我现在正在使用Gensim.word2vec进行一个项目,我是该领域的新手。
实际上我已经有了一个模型。有什么办法可以让我获得一个单词与另一个单词的相似度。例如,单词“ girl”的前2个最相似的单词是“ lady”,然后是“ woman”。如果我输入“ lady”可以返回1,我可以使用任何功能吗?如果我输入“ woman”可以返回2,可以使用我的功能吗?
谢谢!
答案 0 :(得分:0)
没有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
而不是每次都重新计算。
实际上,如果您确定要进行很多此类查找(可能是从最深处的单词向下查找),则可以执行一次操作以将结果更改为dict:
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
。)
答案 1 :(得分:0)
我认为这是duplicate,就像他们在另一个答案中所说的那样,您可以使用model.rank('girl', 'lady')==1
。