如何使用训练的跳跃模型预测单词?

How to predict word using trained skipgram model?

本文关键字:单词 模型 跳跃 何使用      更新时间:2023-10-16

我正在使用Google的Word2vec,我想知道如何获得使用分层softmax训练的skipgram模型预测的顶级单词,给定输入单词?

例如,当使用负采样时,可以简单地将输入词的嵌入(来自输入矩阵(与输出矩阵中的每个向量相乘,然后取具有最高值的向量。但是,在分层 softmax 中,由于使用了霍夫曼树,有多个输出向量对应于每个输入词。

在这种情况下,我们如何计算给定输入词的输出词的似然值/概率?

我还没有看到任何方法可以做到这一点,并且考虑到分层软最大值 (HS( 输出的工作方式,没有明显正确的方法可以将输出节点的激活水平转换为精确的每字似然估计。请注意:

  • 模拟负采样预测的predict_output_word()方法甚至不尝试处理 HS 模式

  • 在训练期间,HS 和负采样模式都不会做出精确的预测——它们只是推动输出更像当前训练示例所需的

在某种程度上,您可以计算给定上下文的所有输出节点激活,然后检查每个单词的唯一 HS 代码点节点值,了解它们与"被预测"的接近程度,您可以合成每个单词的相对分数 - 一些衡量值与该单词的"确定"输出的距离。但是,每个节点的偏差是否以及如何导致该分数,以及该分数如何表明可解释的可能性尚不清楚。

由于HS代码严格按词频分配的方式,也可能存在问题 - 因此"邻居"单词共享大部分相同的编码可能在语义上非常不同。(在最初的word2vec.c代码中有一些提示,通过将相关单词聚类为具有相似的编码而不是严格的频率来分配HS编码可能是有益的,但从那以后我很少看到这种做法。

如果可解释的预测很重要,我建议坚持负抽样。(但也要记住,word2vec 主要用于预测,它只是使用预测训练尝试来引导对其他任务有用的向量排列。