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