为什么gensim.word2vec中两个词袋之间的相似性以这种方式计算?

时间:2014-09-24 07:08:52

标签: nlp gensim word2vec

def n_similarity(self, ws1, ws2):
    v1 = [self[word] for word in ws1]
    v2 = [self[word] for word in ws2]
    return dot(matutils.unitvec(array(v1).mean(axis=0)), matutils.unitvec(array(v2).mean(axis=0)))

这是我从gensim.word2Vec中摘录的代码,我知道两个单词的相似性可以通过余弦距离来计算,但是两个单词集呢?代码似乎使用每个wordvec的平均值,然后计算两个平均向量的余弦距离。我在word2vec中知道的很少,这个过程是否有一些基础?

1 个答案:

答案 0 :(得分:2)

取所有单词向量的平均值是将它们简化为单个向量的最简单方法,因此可以使用余弦相似性。直觉是通过将所有单词向量相加,您可以得到结果中的所有单词向量(含义)。然后你除以向量的数量,这样更大的单词包不会以更长的向量结束(不管它对于余弦相似性是否重要)。

将整个句子缩减为单个向量的其他方法是复杂的。我在SO related question上写了一些关于它的内容。从那时起,已经提出了许多新算法。其中一个更易于访问的是Paragraph Vector,如果您熟悉word2vec,则不应该理解这些问题。