如何使用word2vec通过给出2个单词来计算相似距离?

时间:2014-02-24 05:58:35

标签: word2vec

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而不通过给'法国'来阅读整个单词列表。

4 个答案:

答案 0 :(得分:30)

gensim有一个Word2Vec的Python实现,它提供了一个内置实用程序,用于查找用户输入的两个单词之间的相似性。您可以参考以下内容:

  1. 简介:http://radimrehurek.com/gensim/models/word2vec.html
  2. 教程:http://radimrehurek.com/2014/02/word2vec-tutorial/
  3. Python中用于查找两个单词之间相似性的语法如下:

    >> from gensim.models import Word2Vec
    >> model = Word2Vec.load(path/to/your/model)
    >> model.similarity('france', 'spain')
    

答案 1 :(得分:29)

如您所知word2vec可以将单词表示为数学向量。因此,一旦训练模型,就可以获得单词spainfrance的向量,并计算余弦距离(点积)。

一种简单的方法是使用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

我希望这会有所帮助