В 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)]
Теперь, используя некоторые стандартные антонимы, как (хорошо, плохо), (богатые, бедные), найти несколько таких списков ближайших антонимов. После этого вы можете использовать среднее значение векторов этого списка.
Почему именно здесь требуется усреднение векторов? – Salamander
Например, ваш набор антонимов - 'ss = [('rich', 'poor'), ('good', 'bad')]'. Теперь, чтобы найти антоним 'sad', вы можете сделать что-то вроде antonym_candidates = [model.most_similar (positive = [ss [0] [0], 'sad'], negative = [ss [0] [1]]), model.most_similar (положительный = [ss [1] [0], 'sad'], negative = [ss [1] [1]])]. Теперь, чтобы выбрать лучший антоним, вы можете (1) взять самое близкое/наиболее частое слово (2) принять (взвешенное) среднее из векторов всех возможных кандидатов и найти слово в словаре, ближайшем к этому вектору – kampta
Итак, Мне нужно создать набор известных антонимов. Я прав? – Salamander