首页 > 解决方案 > 为什么 Word2Vec 中 model.wv.similarity() 的输出结果与 model.wv.similar() 不同?

问题描述

我已经训练了一个 Word2Vec 模型,我正在尝试使用它。当我输入“动力”最相似的单词时,我得到了这样的输出:

动力系统 0.6429724097251892
驱动力 0.5936785936355591
动能 0.5788494348526001
动力车 0.5579575300216675
引擎 0.5339343547821045
推动力 0.5152761936187744
扭力 0.501279354095459
新动力 0.5010953545570374
支撑力 0.48610919713974
精神力量 0.47970670461654663

但问题是,如果我输入model.wv.similarity('动力','动力系统')我得到的结果是 0.0,这不等于

0.6429724097251892

更让我困惑的是,当我得到“动力”这个词和“驱动力”这个词的下一个相似之处时,它显示

3.689349e+19

所以为什么 ?我对相似性有误解吗?我需要有人告诉我!!代码是:

res = model.wv.most_similar('动力')
for r in res:
    print(r[0],r[1])
print(model.wv.similarity('动力','动力系统'))
print(model.wv.similarity('动力','驱动力'))
print(model.wv.similarity('动力','动能'))

输出:

动力系统 0.6429724097251892
驱动力 0.5936785936355591
动能 0.5788494348526001
动力车 0.5579575300216675
引擎 0.5339343547821045
推动力 0.5152761936187744
扭力 0.501279354095459
新动力 0.5010953545570374
支撑力 0.48610919713974
精神力量 0.47970670461654663
0.0
3.689349e+19
2.0

标签: word2vec

解决方案


我写了一个函数来替换该model.wv.similarity方法。

def Similarity(w1,w2,model):
    A = model[w1]; B = model[w2]
    return sum(A*B)/(pow(sum(pow(A,2)),0.5)*pow(sum(pow(B,2)),0.5)

您输入的单词在哪里w1以及在哪里,是您训练的 Word2Vec 模型。w2model


推荐阅读