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
属性 中单词的顺序相同。)
然后,您可以使用 numpy
的 argwhere
之类的函数过滤那些高于您的首选阈值的相似性,而 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]
我想用单词 "book"(例如)获取其向量表示,将其命名为 v_1 并找到其向量表示在 v_1 半径 r 的球内的所有单词即 ||v_1 - v_i||<=r,对于某个实数 r.
我知道 gensim 有 most_similar
函数,它允许将顶部向量的数量声明为 return,但这并不是我所需要的。我当然可以使用蛮力搜索并得到答案,但速度会很慢。
如果您用 topn=0
调用 most_similar()
,它将 return 与 的原始 未排序 余弦相似度所有 个模型已知的其他词。 (这些相似之处不会出现在单词的元组中,而只是与 index2entity
属性 中单词的顺序相同。)
然后,您可以使用 numpy
的 argwhere
之类的函数过滤那些高于您的首选阈值的相似性,而 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]