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

How to find the closest word to a vector using word2vec

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

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

有没有一种直接的方法可以在我的训练数据中找到与该向量最相似的词?

或者唯一的解决办法是计算这个向量和我训练数据中每个词的向量的余弦相似度,然后select最接近的?

谢谢。

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

>>> model.most_similar(positive=['woman', 'king'], negative=['man'])
[('queen', 0.50882536), ...]

或者它的向量表示:

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

其中 topn 定义返回结果的所需数量。

但是,我的直觉是该函数与您提出的完全相同,即计算给定向量和字典中每个其他向量的余弦相似度(效率很低...)

不要忘记在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)

或者,model.wv。similar_by_vector(vector, topn=10, restrict_vocab=None) 也可以在 gensim 包中使用。

Find the top-N most similar words by vector.

Parameters:

  • vector (numpy.array) – Vector from which similarities are to be computed.

  • topn ({int, False}, optional) – Number of top-N similar words to return. If topn is False, similar_by_vector returns the vector of similarity scores.

  • restrict_vocab (int, optional) – Optional integer which limits the range of vectors which are searched for most-similar values. For example, restrict_vocab=10000 would only check the first 10000 word vectors in the vocabulary order. (This may be meaningful if you’ve sorted the vocabulary by descending frequency.)

Returns: Sequence of (word, similarity).

Return type: list of (str, float)