【问题标题】:How to predict word using trained skipgram model?如何使用训练有素的skipgram模型预测单词?
【发布时间】:2018-11-24 10:01:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: python c++ nlp word2vec gensim


    【解决方案1】:

    我还没有看到任何方法可以做到这一点,并且考虑到hierarchical-softmax (HS) 输出的工作方式,没有明显正确的方法可以将输出节点的激活级别转换为精确的每个单词似然估计。请注意:

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

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

    如果您可以计算给定上下文的 所有 输出节点激活,然后检查每个单词的唯一 HS 代码点节点值,了解它们与“被预测”的接近程度,您可能会综合每个单词的相对分数——衡量这些值与该单词的“特定”输出之间的距离。但是,每个节点的偏差是否以及如何影响该分数,以及该分数如何指示可解释的可能性,尚不清楚。

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

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

    【讨论】:

    • 我意识到 word2vec 并没有真正用于预测,但我对我的用例的预测很感兴趣。考虑到分层 softmax 的设置方式,是否可以乘以单词路径上每个节点的似然性并获得任何给定单词的最终似然性?这就是原始论文的数学含义,但我已经尝试过了,我似乎无法得到有意义的“预测”单词。我不确定我是否只是有错误的代码,还是无法做到这一点。
    • 我不确定这在理论上是否合理。如果一个词在其编码中的所有节点都倾向于正确的 0/1 编码,并且在训练期间以这种方式轻推所有权重足以诱导有用的词向量,则该词是“预测的”。 NN 是否曾经客观上“擅长”预测实际单词或其他理论上的邻近单词,是另一回事。 (输入预测的 1 个单词,仅遵循其编码,是明智的吗?我希望 HS 中的这一点,但不一定是其他近乎或远未命中的编码是明智的。)如果预测是目标,则否定- 采样模型将更加易于审查。
    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2022-10-19
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多