2016-03-16 34 views
6

Sto utilizzando Word2vec tramite gensim con i vettori preassegnati di Google addestrati su Google News. Ho notato che la parola vettori posso accedere eseguendo una ricerca indice dirette sull'oggetto Word2Vec non sono vettori unitari:Che significato ha la lunghezza di un vettore Word2vec?

>>> import numpy 
>>> from gensim.models import Word2Vec 
>>> w2v = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 
>>> king_vector = w2v['king'] 
>>> numpy.linalg.norm(king_vector) 
2.9022589 

Tuttavia, nel metodo most_similar, questi vettori non-unità non sono utilizzati; invece, versioni normalizzate sono utilizzati dalla documentato .syn0norm proprietà, che contiene solo versori:

>>> w2v.init_sims() 
>>> unit_king_vector = w2v.syn0norm[w2v.vocab['king'].index] 
>>> numpy.linalg.norm(unit_king_vector) 
0.99999994 

Il vettore grande è solo una versione in scala piano del versore:

>>> king_vector - numpy.linalg.norm(king_vector) * unit_king_vector 
array([ 0.00000000e+00, -1.86264515e-09, 0.00000000e+00, 
     0.00000000e+00, -1.86264515e-09, 0.00000000e+00, 
     -7.45058060e-09, 0.00000000e+00, 3.72529030e-09, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
     ... (some lines omitted) ... 
     -1.86264515e-09, -3.72529030e-09, 0.00000000e+00, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 
     0.00000000e+00, 0.00000000e+00, 0.00000000e+00], dtype=float32) 

Dato che somiglianza tra parole i confronti in Word2Vec sono fatti da cosine similarity, non è ovvio per me cosa significhi la lunghezza dei vettori non normalizzati - anche se presumo significano qualcosa di, poiché gensim me li espone invece di esporre solo i vettori di unità in .syn0norm .

Come vengono generate le lunghezze di questi vettori Word2vec non normalizzati e qual è il loro significato? Per quali calcoli ha senso usare i vettori normalizzati e quando dovrei usare quelli non normalizzati?

+0

Correlati: [Devo normalizzare i vettori di parole di word2vec prima di utilizzarli?] (Http://stats.stackexchange.com/q/177905/12359) –

risposta

3

Mi scuso per essere stato in anticipo.

La funzione obiettivo dei modelli di incorporamento delle parole è di massimizzare la probabilità di log dei dati in base al modello. In word2vec, ciò si ottiene riducendo al minimo lo dot product (normalizzato con softmax) del vettore previsto (utilizzando il contesto) e il vettore reale (rappresentazione corrente) di una parola data la parola contesto.

Si noti che l'attività per cui sono stati formati i vettori di parole è sia di prevedere la parola data dal contesto, sia il contesto della parola data (skip-gram rispetto a cbow). La lunghezza dei vettori di parole non ha significato come tale, ma i vettori stessi hanno proprietà interessanti/applicazioni.

di trovare le parole simili, a trovare le parole con la massima somiglianza coseno (equivalenti a trovare le parole con la distanza euclidea minima dopo unità normalizzare i vettori, controllare link), che most_similar funzione sta facendo.

Per trovare le analogie, possiamo semplicemente utilizzare il vettore di differenza (o direzione) tra le rappresentazioni vettoriali grezze dei vettori di parole.Ad esempio,

  • v ('Paris') - v ('France') ~ v ('Roma') - v ('L'Italia') `
  • v ('buono') - v (' cattivo ') ~ v (felice) - v (' triste ')

In gensim,

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

Riferimenti:

  1. GloVe: Vettori globali per Word Rappresentazione
  2. word2vec Parametro Learning spiegato - paper
  3. Regolarità linguistiche in continuo parola spazio Rappresentanze - paper
  4. Word2Vec

Copia la risposta relativa (ancora senza risposta question)