Python 返回Gensim Word2vec中单词的排名
我现在正在使用Gensim.word2vec进行一个项目,我是这个领域的新手 事实上我已经有一个模特了。有没有办法让我得到一个词与另一个词的相似度等级。例如,单词“girl”最相似的前两个单词是“lady”,然后是“woman”。如果我输入'lady'可以返回1,如果输入'woman'可以返回2,我可以使用哪些函数Python 返回Gensim Word2vec中单词的排名,python,gensim,word2vec,Python,Gensim,Word2vec,我现在正在使用Gensim.word2vec进行一个项目,我是这个领域的新手 事实上我已经有一个模特了。有没有办法让我得到一个词与另一个词的相似度等级。例如,单词“girl”最相似的前两个单词是“lady”,然后是“woman”。如果我输入'lady'可以返回1,如果输入'woman'可以返回2,我可以使用哪些函数 谢谢 这方面没有gensim API,但您可以使用基本Python代码查找单词在较长序列中出现的位置(如果有)——例如gensim的most_simular()给出的结果列表 例如:
谢谢 这方面没有gensim API,但您可以使用基本Python代码查找单词在较长序列中出现的位置(如果有)——例如gensim的
most_simular()
给出的结果列表
例如:
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\u index
将是所有相似项列表中'orange'
的(基于0的)位置,或者如果找不到-1
注意,最昂贵的步骤是创建所有相似单词的all_sims
有序列表;如果要根据一个源词检查多个查询词的排名,您肯定希望保留所有sims
,而不是每次都重新计算它
事实上,如果你确定你要做很多这样的查找,可能是从最深的单词开始,你可以做一次简单的操作,将结果变成一个dict:
word_to_sims_index = {}
for i, sim_tuple in enumerate(all_sims):
word_to_sims_index[i] = sim_tuple[0]
在那之后,找到一个单词的索引将是一个(快速恒定时间)的dict查找
query_index = word_to_sims_index[query_word]
…如果查询词不在dict中,这将抛出一个keyrerror(你可以使用word\u to\u sims\u index.get(query\u word,-1)
,如果你想要一个默认的-1
响应,当该键不存在时。)我认为这是一个,正如他们在另一个答案中所说的,你可以使用model.rank('girl',lady')==1