Word2vec原理解析

1. 词向量表示

One-hot表示:用词向量的维度代表整个词汇表的大小,每个词对应其在词汇表的位置为1。如:我 今天 中午 吃的 米饭。其中“中午”的One-hot表示为 00100。One-hot表示存在着词之间是孤立的,当词汇表很大时,存在着内存灾难的问题。

分布表示:通过训练,将每个词都映射到一个较短的词向量上来,词向量的长度人为指定。词向量中每一个神经元节点代表属于这一类的程度。
Word2vec原理解析

词嵌入/向量(word embedding):基于神经网络的分布表示又称为词向量或者词嵌入,word2vec模型的目的就是为了的到这样的词嵌入表示。

2. Word2vec中的连续词袋模型(CBOW)

连续词袋模型是一个三层神经网络。该模型的特点是输入已知上下文,输出对当前单词的预测。如“我 今天 中午 吃的 米饭”,假设CBOW模型设定滑动窗口为2来进行训练,则用‘我’,‘中午’,‘吃的’来预测‘今天’,然后滑动窗口右移,用‘我’,‘今天’,‘吃的’,‘米饭’来预测‘中午’。
Word2vec原理解析

  1. 输入层:上下文单词的one-hot表示,图中上下文单词有C=3个,每个单词的one-hot表示长度为V。
  2. 所有的one-hot向量分别乘输入权重矩阵W,W为V * N的矩阵,N为人为设定的词向量表示的长度,初始化权重矩阵W。
  3. 将所得的C个1 * N的向量(one-hot向量乘权重矩阵的结果)相加求平均作为词向量表示。
  4. 将词向量表示乘上输出权重矩阵W^∂(N * V)得到预测向量(1 * V)

将预测向量经过sigmoid**函数得到概率分布,通过交叉熵损失函数反向传播优化。实际上我们不关注输出的内容,真正需要的是训练后的输入权重矩阵W,也叫word embedding矩阵,矩阵中每一行是对应词汇表的词向量表示。

3. Word2vec中的Skip-gram模型

Skip-gram只是逆转了CBOW的因果关系而已,即已知当前词语,预测上下文。

4. 训练优化

由于在实际训练过程中,我们的词汇表是非常大的,这就导致了word embedding矩阵参数量非常巨大,梯度下降会更新全部参数因此非常缓慢

负采样:每次让一个训练样本仅仅更新一小部分权重参数,从而降低梯度下降过程中的计算量。举例来说,当通过‘吃的’和‘米饭’两个词来训练神经网络时,输入为‘吃的’,我们期望输出层中‘米饭’对应的神经元节点为1而其他的输出神经元均为0。这些期望为0的样本则为负样本,所以我们随机选取少量负样本神经元和正样本神经元(‘米饭’)来更新对应的权重。

一元分布:负样本的选取采用一元分布的策略,即更经常出现的词,我们更倾向于选择它为负样本。