我使用gensim
构建两个单词嵌入(word2vec模型)并使用model.save(model_name)
命令将其保存为(word2vec1和word2vec2)两个不同的语料库(两个语料库有些相似,类似意味着它们与第1部分和第2部分相关书)。假设,两个语料库的顶部单词(就频率或出现而言)是同一个单词(假设它是a
)。
如何计算两个word2vec模型中提取的顶部单词(比如'a')的相似度(cosine-similarity or similarity
)? most_similar()
会在这种情况下有效地运作吗?
我想知道两个不同生成模型的相似程度,相同的单词(a)是多少相关?
任何想法都深受赞赏。
你似乎对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)))