Genesis most_similar 仅查找同义词(不是反义词)

Genesis most_similar find synonym only (not antonyms)

有没有办法让 model.wv.most_similar 在 gensim return 中只显示正面意义的词(即显示同义词而不显示反义词)?

例如,如果我这样做:

import fasttext.util
from gensim.models.fasttext import load_facebook_model
from gensim.models.fasttext import FastTextKeyedVectors
fasttext.util.download_model('en', if_exists='ignore')  # English
model = load_facebook_model('cc.en.300.bin')
model.wv.most_similar(positive=['honest'], topn=2000)

那么模式也要去return“不诚实”之类的词。

('dishonest', 0.5542981028556824),

但是,如果我只想要正面意义的单词怎么办?

我尝试了以下方法 - 从向量 space 中的“诚实”中减去“不”:

import fasttext.util
from gensim.models.fasttext import load_facebook_model
from gensim.models.fasttext import FastTextKeyedVectors
fasttext.util.download_model('en', if_exists='ignore')  # English
model = load_facebook_model('cc.en.300.bin')
model.wv.most_similar(positive=['honest'], negative=['not'], topn=2000)

但不知何故它仍然return不知何故“不诚实”。

('dishonest', 0.23721608519554138)
('dishonesties', 0.16536088287830353)

知道如何以更好的方式做到这一点吗?

不幸的是,由 word2vec 算法训练 创建的向量 space 并不 完全符合我们人类对纯同义词的直觉理解。

相反,word2vec 对 'similarity' 的理解更为笼统——总的来说,反义词往往彼此非常相似:它们在相似的上下文中使用(word2vec 训练的驱动力),关于相同的主题。

此外,尽管许多可以理解的对比确实与各种方向有模糊的关联,但并不存在普遍的“相反”(或“正面”)方向。所以 'not' 和单词 不会 巧妙地颠倒单词的主导意义,并且 'honest' + 'not' 不会可靠地帮助找到 [=13] 的方向=].

除了基本的 word2vec(在其他研究文献中或通过您自己的实验)之外,除非为这项任务找到一些额外的技术,否则您最多只能使用已知的不需要的答案来进一步优化结果。也就是说,类似以下 的内容可能 提供略微改进的结果:

word_vecs.most_similar(positive=['honest'], negative=['dishonest'])

(使用更多相关词进一步扩展示例,无论您是否想要,也可能有所帮助。)

另请参阅先前答案中的一些评论和链接以获取更多想法: