词向量方法
分词方法是构建词向量的第一步,后续是获得所有分词的向量表示
分词算法需要解决以下问题:
- OVV 问题:遇到未登记的词,如何解决?
- 分词粒度:分词过粗可以减少句子的表示长度,过细可以降低词汇表的大小
分词方法按照两种方法做区分,基于规则划分、基于分词粒度划分
基于规则划分词
分词方法 | 描述 | 优点 | 缺点 |
---|---|---|---|
基于词典匹配的分词方法 | 给定词典,输入文本,输出分词后的结果。如最大匹配算法、最短路径算法 | 可以很方便地通过增删词典的方式来改变分词结果。 | 存在 OOV 问题、分词粒度问题和歧义问题。 |
基于统计模型的分词方法 | N-gram 和 HMM 等,从大规模语料库中获取统计信息,基于这些统计信息对输入文本进行分词。 | - | 计算复杂度高,需要大量训练数据。 |
基于深度学习的分词方法 | RNN、Attention 等,将分词视为序列标注任务。 | 能够捕捉复杂的上下文关系。 | 需要大量标注数据,且计算资源需求高。 |
- 最大匹配算法:从文本左边或者右边开始,找到最长的、和字典匹配的分词,循环这个过程。从左到右又叫正向最大匹配算法、还有逆向最大匹配算法及双向最大匹配算法
- N-gram:从大规模语料库中获取统计信息,基于这些统计信息对输入文本进行分词
- 基于深度学习:预测字符序列中分词的起始位置和结束位置
基于分词粒度
分词粒度 | 描述 | 优点 | 缺点 |
---|---|---|---|
word(词粒度) | 直接以空格或符号作为分隔符划分出词粒度。 | 保留更多语义信息,处理高效。 | 词典庞大,难以应对新词和低频词。 |
char(字粒度) | 单个字或符号为基本单位进行划分。 | 划分简单,解决 OOV 问题。 | 单个字符语义信息过少,输入序列变长。 |
subword(子词粒度) | 用词表中的小词元来组成句子中的大词汇。包括 BPE、BBPE、WordPiece、ULM 等。 | 平衡了粒度问题,减少 OOV 问题。 | 对于某些语言可能不适应,如 BBPE 不适合中文。 |
获得词向量方法分为两类
传统词向量构建方法
方法 | 优点 | 缺点 |
---|---|---|
BoW | 简单,计算快 | 忽略词序和语义 |
TF-IDF | 突出重要词汇,减少常见词汇权重 | 忽略词序和语义 |
PPMI | 捕捉共现关系 | 维度高,计算存储成本大 |
- Bow 词袋法:汇总所有文档,得到词汇表,统计文档中词汇的数量,得到一个词汇表大小的向量。只考虑频率,没有考虑语序,对于常出现的字词没有区分
- TF-IDF:构建文档与词汇的频率矩阵,然后求 TF、IDF 值,然后合并得到词汇 x 词汇大小的句子,也就是词向量矩阵。虽然可以抑制常出现的字词,但是同样没有考虑语序
- PPMI:计算词汇 x 词汇大小的共现矩阵,取某个词的行或列作为这个词的词向量。能捕抓词与词之间的共现关系
深度学习词向量构建方法
方法 | 优点 | 缺点 |
---|---|---|
Word2Vec | 捕捉语义和语法关系 | 需要大量语料,OOV 问题 |
GloVe | 全局统计信息,处理 OOV 问题 | 训练时间长,计算资源需求大 |
FastText | 捕捉词形信息,适合 OOV 问题 | 需要大量语料,训练时间长 |
CNN | 捕捉局部上下文 | 设计卷积核,长距离依赖捕捉能力有限 |
RNN/LSTM | 处理序列数据,长距离依赖 | 梯度消失 / 爆炸,训练时间长 |
Transformer/BERT | 捕捉长距离依赖和复杂语义关系,效果佳 | 计算资源需求大,OOV 问题 |
- Word 2 Vec :通过神经网络学习词向量,第一层的网络权重就是词向量
- GloVe:利用了词与词之间共现统计信息的全局数据,通过最小化词与词共现次数和它们向量表示之间的差异来训练词向量
- FastText:不是直接对单词进行向量化,而是对单词的子词(subword)单位进行向量化。子词单位可以是单个字符、字符的 n-gram 或者是整个单词本身。这种方法使得模型能够捕捉到词根、前缀和后缀等信息
- CNN:利用卷积处理 N-gram 范围内的词,学习其词向量
- RNN/LSTM:通过循环学习不同长度的序列,然后学习其词向量
- Transformer/BERT:通过循环学习不同长度的序列,然后学习其词向量