如何使用word2vec找到最接近向量的单词

sel*_*sel 22 python text-mining data-analysis word2vec

我刚开始使用Word2vec,我想知道如何才能找到最接近向量的单词.我有这个向量,它是一组向量的平均向量:

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

是否有直接的方法在我的训练数据中找到与此向量最相似的单词?

或者唯一的解决方案是计算此向量与训练数据中每个单词的向量之间的余弦相似度,然后选择最接近的一个?

谢谢.

Nic*_*nov 40

对于word2vec的gensim实现,有一个most_similar()函数可以让你找到语义上接近给定单词的单词:

>>> model.most_similar(positive=['woman', 'king'], negative=['man'])
[('queen', 0.50882536), ...]
Run Code Online (Sandbox Code Playgroud)

或者它的矢量表示:

>>> your_word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
>>> model.most_similar(positive=[your_word_vector], topn=1))
Run Code Online (Sandbox Code Playgroud)

其中topn定义了所需的返回结果数.

然而,我的直觉是函数与你提出的完全相同,即计算给定向量和字典中每个其他向量的余弦相似性(效率非常低......)

  • `positive` 参数表示那些应该与您要查找的单词相似的单词。`negative` - 应该与您的词不同的词。`most_similar()` 函数将返回最符合这些标准的单词。根据 [the docs](https://code.google.com/archive/p/word2vec/),word2vec 的作者表明,词向量捕获了一些语言规律,例如向量操作 `vector('king') - vector('man') + vector('woman')` 接近 `vector('queen')`。这就是上面例子的动机。 (2认同)

Moo*_*bie 8

或者,model.wv。包中也提供了similar_by_vector(vector, topn=10, restrict_vocab=None)gensim

通过向量找到前 N 个最相似的词。

参数:

  • vector (numpy.array) – 要计算相似度的向量。

  • topn ({int, False}, optional) – 要返回的前 N ​​个相似词的数量。如果 topn 为 False,similar_by_vector 返回相似度得分向量。

  • 限制词汇 (int,可选) – 可选整数,它限制了搜索最相似值的向量范围。例如,restrict_vocab=10000 只会检查词汇顺序中的前 10000 个词向量。(如果您已按降序对词汇表进行排序,这可能很有意义。)

返回:(词,相似性)的序列。

返回类型: (str, float) 列表


And*_*sky 6

不要忘记在most_similar函数中添加带有否定词的空数组:

import numpy as np
model_word_vector = np.array( my_vector, dtype='f')
topn = 20;
most_similar_words = model.most_similar( [ model_word_vector ], [], topn)
Run Code Online (Sandbox Code Playgroud)