2015-08-04 12 views
7

Şu anda Python'da gensim kullanarak word2vec modelinde çalışıyorum ve belirli bir kelimenin zıt anlamlılarını ve eş anlamlılarını bulmama yardımcı olabilecek bir işlev yazmak istiyorum. Örneğin : zıt anlamlı ("üzgün") = "öfkeli" "mutlu" eşanlamlı ("üzgün") =Word2vec aracılığıyla zıt elde nasıl?

word2vec içinde bunu yapmak için bir yolu var mı? Eğer analojiler bulabilirsiniz word2vec yılında

cevap

3

, Asistan gibi bazı standart zıt kullanarak aşağıdaki yolu

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

(fakir, zengin), (kötü, iyi), en yakın zıt birden böyle listeleri bulmak. Bundan sonra bu listenin ortalamalarını kullanabilirsiniz.

+0

Neden vektörlerin ortalaması alınır? – Salamander

+2

Örneğin, senin zerrelerin tohumlar dizisi ss = [('zengin', 'fakir'), ('iyi', 'kötü')] 'dir. Şimdi, "hüzün" zenginlik bulmak için, bir şey gibi yapabilirsin: antonym_candidates = [model.most_similar (pozitif = [ss [0] [0], 'üzgün'], negatif = [ss [0] [1]]), model.most_similar (pozitif = [ss [1] [0], 'üzgün'], negatif = [ss [1] [1]])] '. Şimdi en iyi antonimi seçmek için, (1) tüm olası adayların vektörlerinin en yakın/en sık kelime (2) alma (ağırlıklı) ortalamasını alabilir ve bu vektöre en yakın kelime haznesini bulabilirsiniz: – kampta

+0

Bu durumda, Bir dizi bilinen zıt yaratmak zorundayım. Ben haklı mıyım – Salamander