如何通过word2vec获取反义词?

Sal*_*der 11 python gensim word2vec

我目前正在使用Python中的gensim开发word2vec模型,并希望编写一个函数来帮助我找到给定单词的反义词和同义词.例如:反义词("sad")="happy"同义词("upset")="enraged"

有没有办法在word2vec中这样做?

kam*_*pta 8

在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)]
Run Code Online (Sandbox Code Playgroud)

现在使用一些标准的反义词,如(好的,坏的),(丰富的,差的),找到多个最近的反义词列表.之后,您可以使用此列表的平均向量.

  • 例如,你的反义词种子集是`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)取所有可能候选者的向量的平均值(加权),并在最接近该向量的词汇表中找到单词 (3认同)
  • -1; 这是不可能的,因为“是反义词”关系是*对称的*;任何将单词映射到其反义词的函数在逻辑上都必须是它自己的反义词。显然,不可能有一个单一的向量可以添加到任何单词上以获得其反义词,因为添加向量的操作不是其自身的逆操作。 (2认同)