应用 word2vec 查找所有高于相似度阈值的单词
Applying word2vec to find all words above a similarity threshold
命令model.most_similar(positive=['france'], topn=100)给出与"france"最相似的前100个词。但是,我想知道是否有一种方法可以将高于相似度阈值的最相似词输出到给定词。有没有像下面这样的方法?:
model.most_similar(阳性=['france'],阈值=0.9)
不,您必须请求大量(或全部,使用 topn=0
)然后自己应用截止。
您的要求理论上可以作为选项添加。
但是,cosine-similarity 绝对幅度不一定具有稳定的含义,例如不同模型运行的“90% 相似”。它们的分布可以根据模型训练参数而变化,例如向量 size
,并且它们 most-often 仅在 ranked-comparison 中解释为来自同一模型的其他成对值。
例如,'cold' 的前 100 most-similar 个词的组成在具有不同训练参数的模型中可能非常相似,但#1 到#100 字可能完全不同。因此,如果您选择一个绝对阈值,您可能希望根据对模型的观察或与其他模型训练元参数一起改变截止值。
好吧,假设你可以。试试下面的代码:
def find_most_similar(model, wrd, threshold=0.75):
res = [item for item in model.wv.most_similar(wrd, topn=len(model.wv.vocab)) if item[1] > threshold]
return res
命令model.most_similar(positive=['france'], topn=100)给出与"france"最相似的前100个词。但是,我想知道是否有一种方法可以将高于相似度阈值的最相似词输出到给定词。有没有像下面这样的方法?: model.most_similar(阳性=['france'],阈值=0.9)
不,您必须请求大量(或全部,使用 topn=0
)然后自己应用截止。
您的要求理论上可以作为选项添加。
但是,cosine-similarity 绝对幅度不一定具有稳定的含义,例如不同模型运行的“90% 相似”。它们的分布可以根据模型训练参数而变化,例如向量 size
,并且它们 most-often 仅在 ranked-comparison 中解释为来自同一模型的其他成对值。
例如,'cold' 的前 100 most-similar 个词的组成在具有不同训练参数的模型中可能非常相似,但#1 到#100 字可能完全不同。因此,如果您选择一个绝对阈值,您可能希望根据对模型的观察或与其他模型训练元参数一起改变截止值。
好吧,假设你可以。试试下面的代码:
def find_most_similar(model, wrd, threshold=0.75):
res = [item for item in model.wv.most_similar(wrd, topn=len(model.wv.vocab)) if item[1] > threshold]
return res