Word2vec是一个开源工具,用于计算Google提供的单词距离。它可以通过输入单词并根据相似性输出排序的单词列表来使用。 E.g。
输入:
france
输出:
Word Cosine distance
spain 0.678515
belgium 0.665923
netherlands 0.652428
italy 0.633130
switzerland 0.622323
luxembourg 0.610033
portugal 0.577154
russia 0.571507
germany 0.563291
catalonia 0.534176
然而,我需要做的是通过给出2个单词来计算相似距离。如果我给'法国'和'西班牙',我怎么能得到分数0.678515而不通过给'法国'来阅读整个单词列表。
答案 0 :(得分:30)
gensim有一个Word2Vec的Python实现,它提供了一个内置实用程序,用于查找用户输入的两个单词之间的相似性。您可以参考以下内容:
Python中用于查找两个单词之间相似性的语法如下:
>> from gensim.models import Word2Vec
>> model = Word2Vec.load(path/to/your/model)
>> model.similarity('france', 'spain')
答案 1 :(得分:29)
如您所知word2vec
可以将单词表示为数学向量。因此,一旦训练模型,就可以获得单词spain
和france
的向量,并计算余弦距离(点积)。
一种简单的方法是使用word2vec的this Python包装器。您可以使用以下方法获取向量:
>>> model['computer'] # raw numpy vector of a word
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
要计算两个单词之间的距离,您可以执行以下操作:
>>> import numpy
>>> cosine_similarity = numpy.dot(model['spain'], model['france'])/(numpy.linalg.norm(model['spain'])* numpy.linalg.norm(model['france']))
答案 2 :(得分:3)
我在寻找如何通过修改原始distance.c版本而不是使用像gensim这样的其他库时,偶然发现了这一点。
我没有找到答案,所以我做了一些研究,并在这里分享给那些也想知道如何在原始实施中做到这一点的人。
在查看C源代码后,您会发现' bi'是一个索引数组。如果你提供两个单词,word1的索引将在bi [0]中,而word2的索引将在bi [1]中。
模特' M'是一组向量。每个单词都表示为尺寸为'尺寸的矢量。
使用这两个索引和向量模型,查找它们并计算余弦距离(与点积相同),如下所示:
dist = 0;
for (a = 0; a < size; a++) {
dist += M[a + bi[0] * size] * M[a + bi[1] * size];
}
完成此操作后,值&#39; dist&#39;是两个词之间的余弦相似性。
答案 3 :(得分:-1)
我开发了一个代码来帮助计算使用gensim的2个句子/ SKU的余弦相似度。代码可以在这里找到 https://github.com/aviralmathur/Word2Vec
该代码正在使用Crowdflower上的Kaggle竞赛数据
它是使用Word2Vec上的Code for Kaggle Tutorial开发的 https://www.kaggle.com/c/word2vec-nlp-tutorial
我希望这会有所帮助