参考论文
Efficient Estimation of Word Representations in Vector Space
Distributed Representations of Words and Phrases and their Compositionality
CBOW模型:
概述:
CBOW模型,中文译为“连续词袋模型”,全称(Continuous Bag-of-Words),完成的任务是给定中心词 w i w_{i} wi的一个去心邻域(比如半径为2,通常成为windows,窗口,这里窗口的大小为5)内的单词 ( w i − 2 , w i − 1 , w i + 1 , w i + 2 ) (w_{i-2},w_{i-1,w_{i+1},w_{i+2}}) (wi−2,wi−1,wi+1,wi+2),预测w_i的概率,由于没有考虑词之间的顺序,所以称为词袋模型。
模型图:

w(t-1),w(t-2),w(t+1),w(t+2) 表示输入的单词的词向量。中间的不是一般的全链接的projection层,而是简单的对输出的词向量进行简单的求和再取平均得到这一层的输出,所有中间叫SUM。输出层是一个softmax层得到词汇表各词的概率。
skip-gram模型:
概述:
Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。对于这句话:“The quick brown fox jumps over the lazy dog.”的训练样本如下:

模型图:

Softmax层的限制:
当我们的词汇表大小在百万级别以上时,这意味着我们用softmax计算各个词的输出概率的的计算量很大。
Hierarchical Softmax层(分成的softmax层):
概述:
- 为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。我们把输出softmax层变成了一颗二叉霍夫曼树,那么我们的softmax概率计算只需要沿着树形结构进行就可以了。

- 霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,根节点是树的入口,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。
- 如何“沿着霍夫曼树一步步完成”呢?在word2vec中,我们采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,即:

- 其中 x w x_{w} xw时输入,θ是逻辑回归模型的参数
- 容易理解,被划分为左子树而成为负类的概率为P(−)=1−P(+)。在某一个内部节点,要判断是沿左子树还是右子树走的标准就是看P(−),P(+)谁的概率值大。而控制P(−),P(+)谁的概率值大的因素一个是输入的词向量和当前节点的模型参数θ。
- 我们的目标就是找到合适的所有节点的参数θ和所有词的词向量, 使训练样本达到最大似然
- 霍夫曼树的直观说明:树的每个叶子节点对应词汇表的一个词;数的中间节点和根节点可以看作一个神经元,它由一个与输入向量同维度的权重向量W和一个sigmod激活函数组成,其中θ=w;对于与一个样本(wi,wj)即霍夫曼树的根节点的输入是wi,我们的训练目的就是让当输入wi是根节点到wj对应的叶子结点路径的概率最大
训练:
- 上面树上输出w2的概率如下:
P ( w 2 │ w ) = ( 1 − 1 1 + e ( − w T θ 1 ) ) ( 1 − 1 1 + e ( − w T θ 2 ) ) 1 1 + e ( − w T θ 3 ) P(w2│w)=(1-\frac{1}{1+e^{(-w^T θ_{1} )}})(1-\frac{1}{1+e^{(-w^T θ_{2} )}})\frac{1}{1+e^{(-w^T θ_{3} )}} P(w2│w)=(1−1+e(−wTθ1)1)(1−1+e(−wTθ2)1)1+