NLP《词汇表示方法(三)word2vec》

Word2Vec是2013年Google发布的工具,也可以说是一个产生词向量的一群模型组合,关于词向量,也就是嵌入词向量的解释之前也解释了,这里不赘述。该工具主要包含两个词向量的生成模型,跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。
在这里插入图片描述

看起来是相反的两个模型,且看下面分解。

一:CBOW
在这里插入图片描述

是一个简单的三层神经网络模型,输入一个词的上下文词语,来预测该词语本身的概率的模型,比较对称啊,取得是某个词语的前R个词语和后R个词语,预测当前词汇的概率。

在这里插入图片描述

这个模型挺容易理解的:
在这里插入图片描述

我们拥有词汇库大小是V,预测模型的窗口大小是C,C=2R,我们的嵌入词向量的低维维度是N,了解这个后我们来看看这个模型。

1:输入
是C个one-hot的原始词向量(每个向量x是1 x V维度向量)。
在这里插入图片描述

2:隐藏层
是一个N维度的向量,由于嵌入词向量矩阵是唯一的,所以从输入层到隐藏层的权重W(词向量矩阵)是唯一的,共享的,它的参数权重是V x N维度的。在隐藏层做的如下运算。
在这里插入图片描述

包含了求和和平均值的操作。

3:输出层
是单独一个one-hot原始词向量y,代表的是当前词的预测,向量y是1 x V维度向量,只不过加上了softmax操作。此时隐藏层是1 x N维的向量,因此此时线性层的参数权重是N x V维度的。我们期望的输出是y,预测输出的是y’。
在这里插入图片描述

经过softmax进行计算,就不展开了,因为之前学习过。计算各个词语的归一化概率。

4:损失函数,交叉熵损失函数。
在这里插入图片描述

二:Skip-Gram模型
在这里插入图片描述

这个模型跟CBOW是反过来的模型,给出当前词语,预测这个词语前后R个词语是什么?
在这里插入图片描述

由于是和CBOW是镜像关系,这个模型挺容易理解的:
在这里插入图片描述

我们拥有词汇库大小是V,预测模型输出的的窗口大小是C,C=2R,我们的嵌入词向量的低维维度是N,了解这个后我们来看看这个模型。

1:输入
是1个one-hot的原始词向量(该向量x是1 x V维度向量)。
在这里插入图片描述

2:隐藏层
是一个N维度的向量,由于嵌入词向量矩阵是唯一的,所以从输入层到隐藏层的权重W(词向量矩阵)是唯一的,共享的,它的参数权重是V x N维度的。在隐藏层做的如下运算。
在这里插入图片描述

3:输出层
在这里插入图片描述
是C个one-hot原始词向量,代表的是当前词的预测,每个输出向量y是1 x V维度向量,只不过加上了softmax操作。此时隐藏层是1 x N维的向量,因此此时线性层的参数权重W’是N x V维度的。我们期望的第k个输出是y_k,预测输出的是y_k’。
在这里插入图片描述

经过softmax进行计算,计算各个词语的归一化概率。最终我们通过softmax函数产生一共 C个单词的多项式分布。

4:损失函数,交叉熵损失函数。
对于第k个输出(1<= k <= C):
在这里插入图片描述

对于所有输出:
在这里插入图片描述

三:总结
上述模型训练完毕后,其实One-hot编码乘以矩阵W就是我们要求的中心词的词向量,W则是词表中所有词的词向量拼接起来的词表征矩阵,我们更新训练参数W的过程就是在不断的更新词向量。

最后,在上面的学习中我们可以发现,利用softmax求概率值时,每一次的训练我们都需要将词表里的每一个词都计算一遍,这样遍历整个词表的操作会在大语料库计算时变得异常困难。因此,word2vec还有两个加速运算的机制,层次softmax和负采样,种类不展开描述了,有兴趣的同学自行了解啊。