Что такое стохастический аспект Word2Vec? - PullRequest
0 голосов
/ 13 января 2019

Я векторизую слова в нескольких разных корпусах с помощью Gensim и получаю результаты, которые заставляют меня переосмыслить функционирование Word2Vec. Насколько я понимаю, Word2Vec был детерминистическим и что положение слова в векторном пространстве не будет меняться от обучения к обучению. Если «Мой кот бежит» и «Ваша собака не может бегать» - это два предложения в корпусе, то значение «бегать» (или его стебель), по-видимому, обязательно фиксировано.

Однако я обнаружил, что это значение действительно варьируется в зависимости от модели, и слова постоянно меняются в векторном пространстве, когда я тренирую модель. Различия не всегда имеют огромное значение, но они указывают на существование какого-то случайного процесса. Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Это подробно описано в Gensim FAQ , который я цитирую здесь:

Q11: я неоднократно тренировал свою модель Word2Vec / Doc2Vec / etc, используя один и тот же текстовый корпус, но векторы каждый раз были разными. Есть ли ошибка или я ошибся? (* 2век обучения недетерминизма)

Ответ: Модели * 2vec (word2vec, fasttext, doc2vec…) начинаются со случайной инициализации, затем в большинстве режимов используется дополнительная рандомизация во время тренировки. (Например, окна обучения случайным образом усеченный как эффективный способ взвешивания более близких слов выше. Отрицательные примеры в режиме отрицательной выборки по умолчанию выбираются случайным образом. И сокращение частых слов, как контролируется параметром sample, определяется случайным выбором. Эти поведения были определены в алгоритме оригинальной статьи Word2Vec описание.)

Даже когда вся эта случайность исходит от генератор псевдослучайных чисел, который был посеян, чтобы дать воспроизводимый поток случайных чисел (что по умолчанию делает gensim), обычный случай многопоточного обучения может еще больше изменить порядок подготовки текстовых примеров и, следовательно, окончательное состояние модели. (Кроме того, в Python 3.x хэширование строк рандомизируется каждый перезапуск интерпретатора Python - изменение порядка итераций словарный запас от бега к бегу, и, таким образом, делая даже то же самое Строка случайных чисел выбирает разные слова в разных запускает.)

Таким образом, следует ожидать, что модели варьируются от запуска к запуску, даже обучены на тех же данных. Там нет единого "правильного места" для любого слово-вектор или документ-вектор, чтобы свернуть: только позиции, которые в постепенно полезные расстояния и направления от других векторов обученный внутри той же модели. (В общем, только векторы, которые были обучены вместе в чередующемся сеансе контрастного использования становятся сопоставимы по своим координатам.)

Подходящие параметры обучения должны давать модели, которые примерно полезны, от запуска к бегу, как друг друга. Тестирование и оценка процессы должны быть терпимы к любым сдвигам в положениях вектора и небольшой «джиттер» в общей полезности моделей, возникающий из свойственный алгоритм случайности. (Если наблюдаемое качество от ход за ходом сильно различается, могут быть и другие проблемы: слишком мало данных, плохо настроенные параметры или ошибки / слабости в оценке Метод.)

Вы можете попытаться форсировать детерминизм, используя workers=1 для ограничения обучение в одном потоке - и, если в Python 3.x, с использованием PYTHONHASHSEED переменная окружения для отключения обычного строкового хэша рандомизации. Но тренировки будут намного медленнее, чем с потоки. И вы будете скрывать врожденное случайность / приближенность лежащих в основе алгоритмов, таким образом, что может сделать результаты более хрупкими и зависит от удачи конкретная настройка. Лучше терпеть немного джиттера и использовать чрезмерное дрожание как индикатор проблем в других местах данных или Настройка модели - вместо навязывания поверхностного детерминизма.

0 голосов
/ 13 января 2019

Хотя я не знаю деталей реализации Word2Vec в gensim, я знаю, что, в общем, Word2Vec обучается простой нейронной сети со слоем внедрения в качестве первого слоя. Весовая матрица этого встраиваемого слоя содержит интересующие нас слова.

При этом, как правило, также довольно часто инициализировать веса нейронной сети случайным образом. Итак, у вас есть источник вашей случайности.

Но как результаты могут отличаться, независимо от различных (случайных) начальных условий?

Хорошо обученная модель будет присваивать похожие векторы словам, имеющим аналогичное значение. Это сходство измеряется косинусом угла между двумя векторами. Говоря математически, если v и w - векторы двух очень похожих слов, то

dot(v, w) / (len(v) * len(w)) # this formula gives you the cosine of the angle between v and w

будет близко к 1.

Кроме того, это позволит вам делать арифметику, как знаменитый

king - man + woman = queen

Для иллюстрации представим 2D-векторы. Будут ли эти арифметические свойства потеряны, если вы, например, повернуть все на некоторый угол вокруг начала координат? С небольшим математическим образованием я могу вас заверить: нет, они не будут!

Итак, ваше предположение

Если «Моя кошка бежит» и «Ваша собака не может бегать» - это два предложения в корпусе, то значение «бег» (или его основа) кажется обязательно исправлено.

неправильно. Значение «бег» не фиксируется вообще. Однако (каким-то образом) исправлено сходство (косинус) и арифметическая связь с другими словами.

...