将高维度的词表示转换为低纬度的词表示方法我们称之为词嵌入(word embedding)。
CBOW是通过周围词去预测中心词的模型。(Skip-gram是用中心词预测周围词)
CBOW模型的结构
最左边为上下文词,这些词用One-hot编码表示,维度为1*V(上图容易让人理解错误)
每个上下文的词向量都需要乘以一个共享的矩阵W,由于整个模型是一个神经网络结构,我们将这个存入输入层和隐藏层之间的矩阵定义为W,矩阵的维度为V*N(N是我们自己定义的一个维度)。
One-hot编码矩阵乘以矩阵W得到的是一个1*N的向量。
因为一个中心词会有多个上下文词,而且每个上下文词都会计算得到一个1*N向量,将这些1*N的向量相加取平均,得到中间层(隐藏层)的向量,这个向量也是1*N,之后这个向量需要乘以一个N*V的矩阵W2,最终得到的输出层维度为1*V。
然后将1*V的向量softmax处理得到新的1*V向量,在V个取值中概率值最大的数字对应的位置所表示的词就是预测结果。
上述就是CBOW模型的前向计算过程。
那个这个模型的训练过程如下:
1.当前词的上下文词语的独热编码输入到输入层;
2.这些词分别乘以同一个矩阵W1后分别得到各自的1*N向量
3.将这些1*N向量相加取平均得到一个1*N向量
4.将这个1*N向量乘以矩阵W2,称为一个1*V向量
5.将1*V向量softmax归一化后输出取每个词的概率向量1*V
6.将概率值最大的数对应的词作为预测词。
7.将预测的结果1*V向量和真实标签1*V向量计算误差,一般是交叉熵
8.在每次前向传播之后反向传播误差,不断调整w1和w2的值。
预测的时候,做一次前向传播即可得到预测的中心词结果。
其实,我们在做CBOW时,最终要的是W1这个V*N矩阵。