繁体   English   中英

返回单词在 Gensim Word2vec 中的排名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM