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

问题描述 投票:1回答:1

我使用gensim构建两个单词嵌入(word2vec模型)并使用model.save(model_name)命令将其保存为(word2vec1和word2vec2)两个不同的语料库(两个语料库有些相似,类似意味着它们与第1部分和第2部分相关书)。假设,两个语料库的顶部单词(就频率或出现而言)是同一个单词(假设它是a)。

如何计算两个word2vec模型中提取的顶部单词(比如'a')的相似度(cosine-similarity or similarity)? most_similar()会在这种情况下有效地运作吗?

我想知道两个不同生成模型的相似程度,相同的单词(a)是多少相关?

任何想法都深受赞赏。

python-3.x gensim word2vec word-embedding
1个回答
2
投票

你似乎对word2vec有错误的想法。它不为一个单词提供一个绝对向量。它设法找到相对于其他单词的单词的表示。因此,对于相同的语料库,如果你运行word2vec两次,你将获得同一个单词的2个不同的向量。当您将其与其他单词向量进行比较时,意义就出现了。

king - man将永远与queen - woman接近(余弦相似),无论你训练多少次。但是每列火车后它们会有不同的矢量。

在您的情况下,由于2个模型的训练方式不同,因此比较相同单词的向量与比较两个随机向量相同。你应该比较相对关系。也许是这样的:model1.most_similar('dog') vs model2.most_similar('dog')

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

只需从每个模型中取出矢量并手动计算余弦相似度。

vec1 = model1.wv['computer']
vec2 = model2.wv['computer']
print(np.sum(vec1*vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2)))
© www.soinside.com 2019 - 2024. All rights reserved.