【发布时间】:2019-08-28 22:29:27
【问题描述】:
我目前正在使用 Python 中的 gensim 研究 word2vec 模型,并想编写一个函数来帮助我找到给定单词的反义词和同义词。 例如: 反义词(“悲伤”)=“快乐” 同义词(“心烦意乱”)=“愤怒”
有没有办法在 word2vec 中做到这一点?
【问题讨论】:
我目前正在使用 Python 中的 gensim 研究 word2vec 模型,并想编写一个函数来帮助我找到给定单词的反义词和同义词。 例如: 反义词(“悲伤”)=“快乐” 同义词(“心烦意乱”)=“愤怒”
有没有办法在 word2vec 中做到这一点?
【问题讨论】:
在word2vec中你可以找到类比,方法如下
model = gensim.models.Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
model.most_similar(positive=['good', 'sad'], negative=['bad'])
[(u'wonderful', 0.6414928436279297),
(u'happy', 0.6154338121414185),
(u'great', 0.5803680419921875),
(u'nice', 0.5683973431587219),
(u'saddening', 0.5588893294334412),
(u'bittersweet', 0.5544661283493042),
(u'glad', 0.5512036681175232),
(u'fantastic', 0.5471092462539673),
(u'proud', 0.530515193939209),
(u'saddened', 0.5293528437614441)]
现在使用一些标准反义词,如(好、坏)、(富、穷),找到多个这样的最近反义词列表。之后,您可以使用此列表的向量的平均值。
【讨论】:
ss = [('rich','poor'), ('good', 'bad')]。现在,要找到sad 的反义词,您可以执行antonym_candidates = [model.most_similar(positive=[ss[0][0], 'sad'], negative=[ss[0][1]]), model.most_similar(positive=[ss[1][0], 'sad'], negative=[ss[1][1]])] 之类的操作。现在要选择最佳反义词,您可以 (1) 取最接近/最频繁的词 (2) 取所有可能候选向量的(加权)平均值,并在词汇表中找到最接近该向量的词
我认为可以使用获得反义词 国王-男人+女人=女王的类比。 这里的女王(国王的反义词和女性的同义词)是从 word2vec 训练模型返回的结果。 假设有一个单词 X 和它的同义词 Y。还有 Y 的反义词是 Z。那么我们可以说 X-Y + Z = (X) 的反义词和 (Z) 的同义词。
【讨论】: