Nlp 为什么通过';正';和';负数';参数转换为gensim';s most_类似函数返回的结果是否与向量数学结果相同?

Nlp 为什么通过';正';和';负数';参数转换为gensim';s most_类似函数返回的结果是否与向量数学结果相同?,nlp,gensim,word2vec,Nlp,Gensim,Word2vec,导致 model.similar_by_vector(model['king'] - model['man'] + model['woman'], topn=1)[0] 鉴于 ('king', 0.8551837205886841) 给出一个不同的答案(你期望的答案) ('monar',0.6350384950637817) 但我希望这两个都能得到同样的结果。我是否误解了向量数学应该如何在这些向量上执行?如果您想仔细查看它们所做的与您可能期望的不同,您可以查看最相似的方法的源代码,例如,通过

导致

model.similar_by_vector(model['king'] - model['man'] + model['woman'], topn=1)[0]
鉴于

('king', 0.8551837205886841)
给出一个不同的答案(你期望的答案)

('monar',0.6350384950637817)


但我希望这两个都能得到同样的结果。我是否误解了向量数学应该如何在这些向量上执行?

如果您想仔细查看它们所做的与您可能期望的不同,您可以查看
最相似的方法的源代码,例如,通过在线浏览项目的源存储库:

特别是,在你所看到的差异中,可能有几个因素在起作用:

  • 当您向
    最相似()
    提供查找键(单词标记)时,它将取消返回与答案相同的键的资格,前提是您想要的答案不在传入的参数中。也就是说,即使目标位置最靠近
    'king'
    ,如果
    'king'
    是提供的键之一,它也将被忽略,作为可能的分级响应

  • most\u similor()
    使用每个输入字的单位长度规范化版本(通过使用
    word\u vec(word,use\u norm=True)
    进行查找,而括号查找(如
    model[word]
    )使用原始的非规范化向量

model.most_similar(positive=['king', 'queen'], negative=['man'], topn=1)[0]