我刚刚开始使用 Word2vec,我想知道我们如何才能找到最接近向量假设的单词。我有这个向量,它是一组向量的平均向量:
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
有没有一种直接的方法可以在我的训练数据中找到与这个向量最相似的词?
或者唯一的解决方案是计算这个向量和我训练数据中每个单词的向量之间的余弦相似度,然后选择最接近的那个?
谢谢。
我刚刚开始使用 Word2vec,我想知道我们如何才能找到最接近向量假设的单词。我有这个向量,它是一组向量的平均向量:
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
有没有一种直接的方法可以在我的训练数据中找到与这个向量最相似的词?
或者唯一的解决方案是计算这个向量和我训练数据中每个单词的向量之间的余弦相似度,然后选择最接近的那个?
谢谢。
对于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
。
按向量查找前 N 个最相似的词。
参数:
vector (numpy.array) -- 要计算相似性的向量。
topn ({int, False}, optional) – 要返回的前 N 个相似词的数量。如果 topn 为 False,similar_by_vector 返回相似度得分的向量。
restrict_vocab (int, optional) -- 可选整数,限制搜索最相似值的向量范围。例如,restrict_vocab=10000 只会检查词汇顺序中的前 10000 个词向量。(如果您已按频率降序对词汇表进行排序,这可能很有意义。)
返回:(单词,相似性)的序列。
返回类型:(str,float)列表