2015-08-04 2 views
7

В настоящее время я работаю над моделью word2vec, используя gensim в Python, и хочу написать функцию, которая может помочь мне найти антонимы и синонимы данного слова. Например: антонимом («грустный») = «счастливый» синоним («расстроить») = «Разъяренный»Как получить антонимы через word2vec?

Есть ли способ сделать это в word2vec?

ответ

3

В 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)] 

Теперь, используя некоторые стандартные антонимы, как (хорошо, плохо), (богатые, бедные), найти несколько таких списков ближайших антонимов. После этого вы можете использовать среднее значение векторов этого списка.

+0

Почему именно здесь требуется усреднение векторов? – Salamander

+2

Например, ваш набор антонимов - '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

+0

Итак, Мне нужно создать набор известных антонимов. Я прав? – Salamander