我刚开始使用Word2vec,我想知道如何才能找到最接近向量的单词 . 我有这个向量,它是一组向量的平均向量:
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
是否有直接的方法在我的训练数据中找到与此向量最相似的单词?
或者唯一的解决方案是计算此向量与训练数据中每个单词的向量之间的余弦相似度,然后选择最接近的一个?
谢谢 .
对于word2vec的gensim实现,有 most_similar() 函数可以让你找到语义上接近给定单词的单词:
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 定义了所需的返回结果数 .
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 包中找到 .
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)列表
3 回答
对于word2vec的gensim实现,有
most_similar()
函数可以让你找到语义上接近给定单词的单词:或者它的矢量表示:
其中
topn
定义了所需的返回结果数 .然而,我的直觉是函数与你提出的函数完全相同,即计算给定向量和字典中每个其他向量的余弦相似性(效率非常低......)
不要忘记在most_similar函数中添加带有否定词的空数组:
或者,model.wv . similar_by_vector(vector, topn=10, restrict_vocab=None)也可在
gensim
包中找到 .