首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两种不同Word2Vec模型中单个词余弦相似度的计算

两种不同Word2Vec模型中单个词余弦相似度的计算
EN

Stack Overflow用户
提问于 2018-09-11 13:43:28
回答 1查看 2.7K关注 0票数 1

我使用word2vec构建了两个单词嵌入( gensim模型),并将其保存为(word2vec1和word2vec2),方法是对两个不同的语料库使用model.save(model_name)命令(这两个语料库有些相似,它们的关系类似于书的第1部分和第2部分)。假设,两个身体的顶部单词(频率或出现频率)是同一个单词(让我们把它说成是a)。

对于这两个cosine-similarity or similarity模型,如何计算提取的顶部单词(如a)的相似度( word2vec )?在这种情况下,most_similar()能有效地工作吗?

我想知道,对于两个不同的生成模型,同一个词(a)是否有多大程度的相似性?

任何想法都是深为感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-12 01:15:31

您似乎对word2vec有错误的看法。它不能为一个单词提供一个绝对向量。它设法为一个单词找到一个相对于其他单词的表示形式。因此,对于同一个语料库,如果你运行两次word2vec,你会得到两个不同的向量为同一个词。当你把它和其他的词向量进行比较的时候,它的意义就来了。

无论你训练多少次,king - man总是与queen - woman密切相关(余弦相似性)。但在每一列火车后,它们会有不同的载体。

在你的例子中,由于这两个模型的训练方式不同,比较同一个词的向量与比较两个随机向量是一样的。你应该比较一下相对关系。也许是这样:model1.most_similar('dog')model2.most_similar('dog')

然而,要回答你的问题,如果你想比较这两个向量,你可以这样做如下。但结果将毫无意义。

只需从每个模型中提取向量,手工计算余弦相似度。

代码语言:javascript
复制
vec1 = model1.wv['computer']
vec2 = model2.wv['computer']
print(np.sum(vec1*vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2)))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52277384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档