2
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知之甚少,这样的过程是否有一些基础?

4

1 回答 1

2

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

还有其他方法可以将整个句子简化为单个向量,这是一种复杂的方法。我在关于 SO的相关问题中写了一些关于它的内容。从那时起,已经提出了许多新算法。更容易理解的一种是Paragraph Vector,如果您熟悉它,应该不会有任何理解问题word2vec

于 2014-09-24T09:16:38.877 回答