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知之甚少,这样的过程有一些基础吗?
取所有词向量的平均值是将它们简化为单个向量的最简单方法,因此可以使用余弦相似度。直觉是,通过将所有词向量相加,您可以在结果中得到所有词向量(含义)。然后除以向量的数量,这样较大的词袋就不会得到更长的向量(无论如何,这对余弦相似度并不重要)。
还有其他方法可以将整个句子简化为单个向量,这是一种复杂的方法。我在一篇文章中写了一些相关内容相关问题 https://stackoverflow.com/a/15173821/419338就这样。从那时起,一系列新算法被提出。更容易访问的之一是段落向量 http://cs.stanford.edu/~quocle/paragraph_vector.pdf,如果您熟悉的话,理解起来应该不会有问题word2vec
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)