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?
Correlati: [Devo normalizzare i vettori di parole di word2vec prima di utilizzarli?] (Http://stats.stackexchange.com/q/177905/12359) –