2015-08-04 18 views
7

Attualmente sto lavorando al modello word2vec usando gensim in Python, e voglio scrivere una funzione che possa aiutarmi a trovare gli antonimi ei sinonimi di una determinata parola. Per esempio: antonimo ("triste") = "felice" sinonimo ("sconvolto") = "infuriato"Come ottenere contrari attraverso word2vec?

C'è un modo per farlo in word2vec?

risposta

3

In word2vec si possono trovare analogie, come segue

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

Ora utilizzando alcuni contrari standard come (buono, cattivo), (ricchi, poveri), trovare più tali elenchi dei contrari più vicini. Successivamente è possibile utilizzare la media dei vettori di questo elenco.

+0

Perché è necessaria la media dei vettori qui? – Salamander

+2

Ad esempio, il tuo gruppo di seme di contrari è 'ss = [('ricco', 'povero'), ('buono', 'cattivo')]'. Ora, per trovare l'antonimo di 'sad', puoi fare qualcosa come' antonym_candidates = [model.most_similar (positivo = [ss [0] [0], 'triste'], negativo = [ss [0] [1]]), model.most_similar (positivo = [ss [1] [0], 'triste'], negativo = [ss [1] [1]])] '. Ora per scegliere il miglior antonimo, puoi (1) prendere la parola più vicina/più frequente (2) prendere (pesata) la media dei vettori di tutti i possibili candidati e trovare la parola nel vocabolario più vicino a questo vettore – kampta

+0

Quindi, in quel caso, Devo creare una serie di contrari noti. Ho ragione? – Salamander

Problemi correlati