【问题标题】:Why the similarity beteween two bag-of-words in gensim.word2vec calculated this way?为什么以这种方式计算 gensim.word2vec 中两个词袋之间的相似度?
【发布时间】:2014-11-18 13:51:37
【问题描述】:
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知之甚少,是否有这样的过程的一些基础?

【问题讨论】:

    标签: nlp gensim word2vec


    【解决方案1】:

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

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

    【讨论】:

    • 但是即使是段落向量在训练过程中也使用单词的均值作为整个句子/段落的表示。
    猜你喜欢
    • 2014-12-15
    • 2017-08-22
    • 2012-03-11
    • 2017-03-19
    • 2019-08-05
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多