学习word2vec相关内容之后的笔记整理,以及TensorFlow中simple版本的实现(CBOW + Skip-Gram)。强烈推荐的资料:word2vec 中的数学原理详解
CBOW基本知识
-
词向量是在训练语言模型过程中得到的副产品
- CBOW
- 输入层:目标单词的上下文Context(ω)词向量(前后的 k 个单词)
- 投影层:输入层词向量求和
- 输出层
- Huffman Tree (带权路径长度最小) Huffman Coding (前缀编码 编码总长最短 left-child: 1 right-child: 0)
-
目标函数
- 最大化目标函数,梯度上升法
-
Negative Sampling
- 对每个词ω⊂C都有一个辅助向量θ作为训练参数
- 评价函数:context(w)时预测词分别为w和u的概率(应该让w的概率增大,同时减小u的概率)
- 使用梯度上升法训练
- 有点DSSM的感觉,用正例和负例去协同训练
- CBOW with attention - Ling, et al. (2015)
- 考虑到每个词与其他词之间的距离:距离不同,词提供信息的程度不同(距离越近的词越informative)
- 例子:We won the game! Nicely played!
- the 对于 game 的预测有影响(可以预测 the 之后的词是个名词),但是对之后的 played 没什么影响
- problems of CBOW
- 投影层过于简单:由于传统CBOW上下文的定义是目标词前后的词向量简单相加,因此缺少对于词序的感知,也就没有办法学习到句法相关任务的word embeddings
- 较复杂的一种改进:将sum改为concatenation(无法scale to large context window)
- 然而window size的选择也是一个问题,过小过大都不行
- CBOW with attention
-
在投影层不是简单的将上下文词向量相加而是根据上下文对该词的重要性进行带权相加
-
- 考虑到每个词与其他词之间的距离:距离不同,词提供信息的程度不同(距离越近的词越informative)
Simple Implementation
链接见这里:Simple Skip-gram 以及 Simple CBOW