word2vec 的CBOW,多层softmax,负采样。

NNLM的原理基于N-1个词来预测第N个词,而CBOW是希望用前后N个词来预测中间词,这是CBOW与NNLM的本质区别。

NNLM中存在投影层,将ONE-HOT编码与词库矩阵C进行运算投射,从词库矩阵取出一列。同时对每个词取出的每个列,进行一个concat拼接。

而由于当词库非常巨大时,这个计算是非常耗费时间的。因此,就出现了CBOW

  • CBOW

CBOW将矩阵C直接舍弃,直接把这样一句话中的每个词初始化一个词词向量,这个初始化的词向量就是模型要学习的。

在NNLM中存在projetion layer进行了词组向量拼接,CBOW则是将各个词向量进行求和。假设原本300维的向量,存在3个词,在NNLM中,进行拼接则为900维的向量,而在CBOW中,则进行求和,即还是为300维的向量,大大减少了运算。

word2vec 的CBOW,多层softmax,负采样。_第1张图片

 

在NNLM中,在词向量进行拼接后,会存在隐藏层,与隐藏层进行全连接,然后再与SOFTMAX进行求概率。再CBOW中进行了变更,CBOW中去掉了隐藏层,因为隐藏层的全连接计算需要花费大量计算,因此将其去掉,同时我们假设词库为10^8。则我们在进行softmax运算时,需要算出10^8词库中每个词的概率,其起算也是非常巨大,因此在CBOW中, 我们为了高效计算,我们在计算概率时,存在以下两个方式

  • 多层SOFTMAX

在机器学习中,如果要输出特征的预测结果中的重要性,会用到树模型,因为树在选择分裂的时候,就是选择包含的信息量大的特征进行分裂的。这里运用了HUffman Tree.

如图:

word2vec 的CBOW,多层softmax,负采样。_第2张图片

 

对每个词进行ONE-HOT后,进行词向量求和为Xw,作为输入。

使用Huffman Tree ,原本我们计算的是10^8的概率向量,但是现在就可以转换为一个二分类问题,二分类中最简单的直接的就是LR模型的,假设Xw就是一个词向量表示,在每个非叶子节点处(途中黄色的圆点)还会有一个参数θwi,那我们的在LR中可以用一个sigmoid函数来映射,最后变成一个最小化损失函数的优化问题。

  • CBOW:负采样

在我们的例子中,预测“我喜欢观看巴西足球世界杯“这句话中的“巴西“这个词为我们的标准答案,其他的1000万-1个就都不是标准答案.既然这样,干脆就在这1000万-1个负样本中抽取负样本来计算。

word2vec 的CBOW,多层softmax,负采样。_第3张图片

将词库在0-1中进行N等分,同时,再将其进行m等分,当将从10^8的词库中要取50W的词,进行抽取,才可保证被抽取到的每个词的概率相等。

你可能感兴趣的:(word2vec,CBOW,SOFTMAX,NEGATIVE_)