Gensim 在半径为 r 的球中找到 vectors/words

Gensim find vectors/words in ball of radius r

我想用单词 "book"(例如)获取其向量表示,将其命名为 v_1 并找到其向量表示在 v_1 半径 r 的球内的所有单词即 ||v_1 - v_i||<=r,对于某个实数 r.

我知道 gensim 有 most_similar 函数,它允许将顶部向量的数量声明为 return,但这并不是我所需要的。我当然可以使用蛮力搜索并得到答案,但速度会很慢。

如果您用 topn=0 调用 most_similar(),它将 return 与 的原始 未排序 余弦相似度所有 个模型已知的其他词。 (这些相似之处不会出现在单词的元组中,而只是与 index2entity 属性 中单词的顺序相同。)

然后,您可以使用 numpyargwhere 之类的函数过滤那些高于您的首选阈值的相似性,而 return 仅那些 indexes/words。

例如:

target_word = 'apple'
threshold = 0.9
all_sims = wv.most_similar(target_word, topn=0)
satisfactory_indexes = np.argwhere(all_sims > threshold)
satisfactory_words = [wv.index2entity[i] for i in satisfactory_indexes]