Neural network 如何使用经过训练的CBOW预测单词

Neural network 如何使用经过训练的CBOW预测单词,neural-network,nlp,deep-learning,word2vec,language-model,Neural Network,Nlp,Deep Learning,Word2vec,Language Model,我有一个关于CBOW预测的问题。假设我的工作是使用3个周围的单词w(t-3),w(t-2),w(t-1)作为输入来预测一个目标单词w(t)。一旦模型经过训练,我想预测一个句子后缺少的单词。这个模型是否只适用于前三个单词已知,后一个单词未知的四个单词的句子?如果我有一个10字的句子。前九个单词是已知的,我可以使用9个单词作为输入来预测该句子中最后一个缺失的单词吗?Word2vec CBOW模式通常在目标单词周围使用对称窗口。但它只是对窗口中所有单词的(训练中的当前)单词向量进行平均,以找到预测神经

我有一个关于CBOW预测的问题。假设我的工作是使用3个周围的单词w(t-3),w(t-2),w(t-1)作为输入来预测一个目标单词w(t)。一旦模型经过训练,我想预测一个句子后缺少的单词。这个模型是否只适用于前三个单词已知,后一个单词未知的四个单词的句子?如果我有一个10字的句子。前九个单词是已知的,我可以使用9个单词作为输入来预测该句子中最后一个缺失的单词吗?

Word2vec CBOW模式通常在目标单词周围使用对称窗口。但它只是对窗口中所有单词的(训练中的当前)单词向量进行平均,以找到预测神经网络的“输入”。因此,它可以容忍非对称窗口——如果两侧可用的单词较少,则该侧使用的单词也较少(对于文本前端/末尾的单词,该侧甚至可能为零)

此外,在每个训练示例中,它并不总是使用指定的最大窗口,而是使用一些随机大小的窗口,直到指定的大小。因此,对于
window=5
,它有时在每一侧只使用1,而在另一侧使用2、3、4或5。这样做是为了有效地加重更接近的单词

最后也是最重要的一点,对于您的问题,word2vec在训练“模型说这个目标位置应该使用什么确切的词?”期间并没有真正进行全面预测。在“分层softmax”或“负采样”变体中,这样的准确预测可能会很昂贵,需要计算与整个语料库词汇表大小成比例的神经网络输出节点激活水平

相反,它所需的计算次数要少得多,以查看神经网络预测训练数据中观察到的实际目标词的强度,这可能与其他一些词形成对比。在分层softmax中,这涉及到为一个目标字的短编码计算输出节点——忽略编码其他字的所有其他输出节点。在负采样中,这涉及到为目标单词计算一个不同的输出节点,再加上为其他随机选择的单词计算几个输出节点(“负”示例)

在这两种情况下,培训都不知道这个目标词是否比所有其他词更容易预测,因为它不需要花时间评估所有其他词。它只是查看一个真实示例的目标词的输出的当前强度,并(通过反向传播)使其稍微增强

这一过程的最终结果是单词向量被有效地安排用于其他目的,类似的单词彼此接近,甚至某些相对方向和大小似乎也与人类对单词关系的判断相匹配

但最终的单词向量和模型状态在预测文本中缺失的单词方面可能仍然是平庸的——因为它只是在个别例子中做得更好。从理论上讲,你可以比较模型对每个可能的目标词的预测,从而强制创建一个排序的预测词列表——但这比训练所需的任何东西都要昂贵,而预测这样的词并不是词向量集的常见下游应用。所以实际上,大多数word2vec库甚至不包含任何用于进行完整目标词预测的接口方法。(例如,谷歌的原始word2vec.c没有。)

几个版本之前,Python
gensim
库添加了一种用于预测的实验方法,
[predict\u output\u word()][1]
。它只适用于负采样模式,并且它不像在训练中那样处理窗口词权重。你可以尝试一下,但如果结果不令人印象深刻,也不要感到惊讶。如上所述,对单词进行实际预测并不是word2vec培训通常的真正目标。(其他更有状态的文本分析,即使只是大型的共现表,也可能在这方面做得更好。但它们可能不会强迫单词向量进入像word2vec这样有趣的星座。)