本文重点
自然语言处理(NLP)的基本单元从最细粒度的词语开始,逐步构成句子、段落、篇章和文档。因此,处理NLP问题的第一步就是从词语入手。为什么需要词向量呢?
在计算机视觉领域,图像本身是以数字形式存储在计算机中的,并且这些数字已经包含了某种信息。此外,不同组的数字之间也包含了一些关系。因此,我们不需要对图像数据进行向量化处理。然而,文本数据则需要转换成计算机可以理解的数字形式。这一过程被称为词向量(word embedding)。因为每个词都需要通过词向量来参与NLP任务,词向量的质量将直接影响模型的表现。本文将系统地介绍词向量的发展历程及其优缺点。
词向量的发展
第一个时代:词嵌入(Word Embedding)时代
第二个时代:上下文嵌入(Context Word Embedding)时代
第三个时代:预训练模型(Pretraining)时代
第四个时代:改进与定制化时代
- 改进型代表:ALBERT和XLNet
- 定制化代表:SciBert 和BioBert
词向量的分类
团圆式
分布式
- 基于矩阵的方法、基于聚类的方法、基于神经网络的方法
主题模型
静态编码
动态编码
从one-hot到BERT
1. One-Hot
- 优点:
- 在一定程度上解决了分类器难以处理稀疏数据的问题
- 能够起到扩展特征的作用
- 缺点:
- 无法处理一词多义的情况
- 编码表示非常稀疏
- 是词袋模型,不考虑词的顺序
- 字典越大,词向量的特征空间越大
- 无法计算不同词之间的相似度
- 特征维度随字典数量变化
2. TF-IDF
- 优点:
- 缺点:
- 由于是词袋模型,不考虑词的位置信息
- 不能反映单词的重要程度和特征词的分布状况
3. N-Gram表示
4. 共现矩阵
- 缺点:
- 无法处理一词多义
- 大部分词不同时共现,导致向量稀疏
- 特征维度随字典数量变化
- 存储整个字典的空间消耗大
- 模型稳定性差(新数据可能使模型失效)
- 优点:
5. 矩阵分解(LSA)
- 缺点:
- 无法处理一词多义
- 计算复杂度高,对m*n矩阵降维需要O(mn²)
- 新文档或新词出现时需要重新训练
- 优点:
6. NNLM
- 优点:
- 模型简单,标准的语言模型
- 可以得到词向量
- 考虑了语言的顺序信息
- 缺点:
- 效率不高
- 词向量无法处理一词多义
- 只利用左边的n-1个词,没有利用更多上下文信息(窗口大小决定了n-1个词),因此只考虑部分信息
7. Word2Vec
- 缺点:
- 词和向量一对一关系,无法处理一词多义
- 是静态方式,通用性强但无法针对特定任务进行动态优化
- 只考虑上下文,不考虑上下文顺序
- 仅考虑词的部分信息(特征提取基于滑窗)
- 受限于窗口大小,无法摆脱长距离依赖
- 可解释性差
- 低频词和未登录词(OOV)效果不佳
- 运用了浅层网络,难以捕捉深层次含义
- 无法反映指代关系,如“it”究竟表示什么
- 优点:
- 利用了部分上下文特征
- 模型向量不再稀疏
- 可以计算词与词之间的相似性,如男人和女人、国王和女王,但无法解释层次关系
8. Glove
- 缺点:
- 优点:
- 利用了语料库的全局统计特征
- 运用了部分上下文特征(类似于word2vec+LSA)
- 模型向量不再稀疏
- 可以计算词与词之间的相似性
- 使用了共现矩阵,但未进行矩阵分解,而是将词向量和比率联系起来
9. ELMO
- 优点:
- 解决了一词多义的问题
- 开创了基于特征融合的预训练方法(预训练+特征融合)
- 双向语言模型(尽管不是真正的双向)
- 可以学习到单词用法的复杂特性(语法信息和语义信息)
- 运用了全局信息
- 缺点:
- 不是真正的双向模型(两个RNN模型参数不共享)
- 无法克服RNN模型的局限性(梯度消失、无法并行计算)
- 应用于新任务的特征是通过多个维度拼接学习得来的,不是Bert一体化的方式
- ELMO使用的1B Word Benchmark数据集,词数为10亿,但句子间的顺序是随机打乱的,无法建模句子级别的依赖关系
10. GPT
- 优点:
- 基于Fine-tuning的形式(预训练+微调)
- 运用了强大的transformer特征提取器
- 解决了一词多义的问题
- 通用任务框架
- 缺点:
- 使用的是单向的transformer(单向语言模型)
- 对于某些类型的任务需要对输入数据的结构进行调整
11. BERT
- 优点:
- 解决了一词多义的问题
- 使用了双向的transformer结构+掩码语言模型(解决信息泄露的问题)
- 预训练的多任务设计(掩码语言模型+下一句预测)
- 通用任务框架
- 真正意义上的语言模型
- 获取比词更高层级的句子级别的语义表征(下一句预测)
- 可以反映指代关系
- 缺点:
- 生成任务不是很友好
- 训练和测试不一致(masked的原因)
- 每个批次只有15%的token被预测,所以收敛较慢
- 模型过大,成本较高
它们之间的关系
- 如果ELMO使用transformer,就会更接近BERT
- 如果GPT将transformer改为双向,也会更接近BERT