[英]Return the rank of word in Gensim Word2vec
我现在正在使用 Gensim.word2vec 进行一个项目,我是这个领域的大一新生。
其实我已经有一个模型了。 有什么方法可以让我得到一个词与另一个词的相似度等级。 例如,与“girl”一词最相似的前两个词是“lady”,然后是“woman”。 如果我输入'lady'可以返回1,如果我输入'woman'它可以返回2,我可以使用任何功能吗?
谢谢!
没有用于此的 gensim API,但您可以使用基本的 Python 代码来查找单词出现在较长序列中的哪个位置(如果有)——例如由 gensim 的most_similar()
给出的结果列表。
例如:
origin_word = 'apple'
query_word = 'orange'
all_sims = w2v_model.most_similar(origin_word, topn=0) # topn=0 gets all results
query_index = -1
for i, sim_tuple in enumerate(all_sims):
if sim_tuple[0] == query_word:
query_index = i
break
在此代码的末尾, query_index
将是'orange'
在所有相似列表中的(基于 0 的)位置,如果未找到,则为-1
。
请注意,最昂贵的步骤是创建所有相似词的all_sims
有序列表; 如果您要根据一个原始词检查多个查询词的排名,您肯定希望保留all_sims
,而不是每次都重新计算它。
事实上,如果你确定你会做很多这样的查找,可能会通过最深的单词,你可以做一次将结果更改为字典:
word_to_sims_index = {}
for i, sim_tuple in enumerate(all_sims):
word_to_sims_index[i] = sim_tuple[0]
在那之后,找到一个词的索引将是一个(快速恒定时间)字典查找......
query_index = word_to_sims_index[query_word]
...如果查询词不在字典中,则会抛出 KeyError 。 (您可以使用word_to_sims_index.get(query_word, -1)
如果您希望在键不存在时使用默认的-1
响应。)
我认为这是重复的,正如他们在另一个答案中所说,您可以使用model.rank('girl', 'lady')==1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.