返回Gensim Word2vec中的单词排名

时间:2018-07-27 22:21:48

标签: python gensim word2vec

我现在正在使用Gensim.word2vec进行一个项目,我是该领域的新手。

实际上我已经有了一个模型。有什么办法可以让我获得一个单词与另一个单词的相似度。例如,单词“ girl”的前2个最相似的单词是“ lady”,然后是“ woman”。如果我输入“ lady”可以返回1,我可以使用任何功能吗?如果我输入“ woman”可以返回2,可以使用我的功能吗?

谢谢!

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