word2vec - 为什么 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
解决方案
我写了一个函数来替换该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 模型。w2
model
推荐阅读
- c - 将动态分配的指针传递给 pthread 的正确方法是什么
- python-3.x - 如何在python 3中用回车分隔字符串
- c# - 在面板中的表之间添加空格
- c++ - 将 std::conditional 与不可转换的类型一起使用(原始与指针)
- c++ - 使用带有无法识别的长选项的“getopt_long”时出现分段错误
- javascript - 如何使用 jest 和 travis-ci 构建过程修复“在集成测试中拒绝访问”
- amazon-web-services - AWS 置放群组 - 共享相同硬件的两个实例如何会造成问题?
- reactjs - 如何设置和获取 redux-form 字段的值
- assembly - 为什么 NASM 不能正确初始化寄存器的值?
- sql-server - Why I cannot log in to the SQL Server (Error 18456)