Python / Gensim - Что означает syn0 и syn0norm? - PullRequest
0 голосов
/ 14 ноября 2018

Я знаю, что в gensims KeyedVectors -модели можно получить доступ к матрице внедрения по атрибуту model.syn0.Существует также syn0norm, который, похоже, не работает для недавно загруженной модели glove .Я думаю, что я также видел syn1 где-то ранее.

Я не нашел для этого строку документации, и мне просто интересно, что за логика стоит за этим?

Так что, если syn0 - это матрица встраивания, что такое syn0norm?Что бы тогда было syn1 и вообще, что означает syn?

1 Ответ

0 голосов
/ 16 ноября 2018

Эти имена были унаследованы от оригинальной реализации 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'.

...