Word2Vec Python 相似度

Word2Vec Python similarity

我用这段代码做了一个词嵌入:

with open("text.txt",'r') as longFile:
        sentences = []
        single= []
        for line in longFile:
            for word in line.split(" "):
                single.append(word)
            sentences.append(single)
    model = Word2Vec(sentences,workers=4, window=5)

我现在想计算两个词之间的相似度,看看它们的邻居是什么。 model["word"]model.wv.most_similar()model.similar_by_vector()model.similarity() 有什么区别? 我应该使用哪一个?

编辑:也许我们应该在这里标记 gensim,因为它是我们正在使用的库

如果你想找到两者的邻居,你可以使用 model.wv.most_similar() 这将为您提供每个单词的字典(前 n 个)及其与给定字符串(单词)的相似度。此方法将计算 word-vectors.

之间的余弦相似度

请注意,您提到的其他方法在 3.4.0 中已弃用,请改用 model.wv.similarity()model.wv.similar_by_vector()

您也可以使用 model.wv.similar_by_vector() 来做完全相同的事情,只不过是传递一个向量。例如。 model["woman"] 会给你这样一个向量。实际上,如果您查看实现,所有方法所做的就是调用 most_similar()

def similar_by_vector(self, vector, topn=10, restrict_vocab=None):
   return self.most_similar(positive=[vector], topn=topn, restrict_vocab=restrict_vocab)

similar_by_word() 方法也是如此。我其实不知道为什么这些方法首先存在。

要找到恰好两个词之间的相似性度量,您可以使用 model.wv.similarity() 求余弦相似度或model.wv.distance() 求两者之间的余弦距离。

为了回答你的实际问题,我会简单地计算两者之间的相似度,而不是比较 most_similar() 的结果。

希望对您有所帮助。查看 docs 或源文件以获取更多信息,我认为代码文档非常好。