Я использую Word2vec через gensim с предвзятыми векторами Google, обученными в Новостях Google. Я заметил, что слово векторы я могу получить доступ, делая прямые поиски индекса на Word2Vec
объекта не являются единичными векторами:Какое значение имеет длина вектора 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
Однако в методе most_similar
эти векторы не-единицы не используются; вместо этого, нормированные варианты используются с незарегистрированной .syn0norm
собственности, которая содержит только единичные векторы:
>>> w2v.init_sims()
>>> unit_king_vector = w2v.syn0norm[w2v.vocab['king'].index]
>>> numpy.linalg.norm(unit_king_vector)
0.99999994
Чем больше вектор просто масштабируется до версии орта:
>>> 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)
Учитывая, что слово сходство сравнения в Word2Vec сделаны на cosine similarity, для меня не очевидно, что означают длины ненормированных векторов, хотя я предполагаю, что они означают что-то, так как gensim предоставляет их мне, а не только разоблачает единичные векторы в .syn0norm
,
Как формируются длины этих ненормированных векторов Word2vec и каково их значение? Для каких расчетов имеет смысл использовать нормированные векторы, и когда следует использовать ненормированные?
Связанный: [Должен ли я нормализовать векторы слова word2vec перед их использованием?] (Http://stats.stackexchange.com/q/177905/12359) –