Эти имена были унаследованы от оригинальной реализации Google word2vec.c
, на которой был основан класс gensim
Word2Vec
. (Я считаю, syn0
существует только в последних версиях для обратной совместимости.)
Массив syn0
по существу содержит необработанные слова-векторы. С точки зрения нейронной сети, используемой для обучения векторов слов, эти векторы представляют собой «проекционный слой», который может преобразовать горячее кодирование слова в плотный вектор внедрения правильной размерности.
Операции подобия обычно выполняются для версий слов-векторов, нормализованных по единицам. То есть все векторы были масштабированы до величины 1,0. (Это облегчает вычисление косинус-подобия.) Массив syn0norm
заполняется этими нормализованными единицами векторами, когда они в первый раз нужны.
Этот syn0norm
будет пустым до тех пор, пока вы не выполните операцию (например, most_similar()
), которая требует этого, или вы явно не сделаете вызов init_sims()
. Если вы явно сделаете вызов init_sims(replace=True)
, вы фактически закроете необработанные векторы на месте с помощью векторов с единичной нормой. Это экономит память, которая в противном случае требовалась бы для хранения обоих векторов для каждого слова. (Тем не менее, некоторые словосочетания могут по-прежнему интересоваться исходными необработанными векторами различной величины, поэтому делайте это только тогда, когда вы уверены, что most_similar()
операции с косинусоподобием - это все, что вам нужно.)
Свойства syn1
(или syn1neg
в более распространенном случае обучения с отрицательной выборкой), когда они существуют в полной модели (а не для простого KeyedVectors
объекта только из слов-векторов), внутренние «скрытые» веса модели нейронной сети, ведущие к выходным узлам. Они необходимы во время обучения модели, но не являются частью типичных векторов слов, собранных после обучения.
Я считаю, что префикс syn
- это просто соглашение о присвоении имен нейронным сетям, вероятно, полученное из 'synapse'.