Вопрос или проблема
Сначала позвольте мне установить, что такое CBoW и skip-gram. Вы можете пропустить этот раздел, если считаете его ненужным.
Фон
Мое понимание состоит в том, что Word2Vec представляет собой набор из двух алгоритмов: непрерывный мешок слов (CBoW) и нейронная языковая модель skip-gram (SGNNLM или просто skip-gram), которые оба являются двухслойными нейронными сетями. То есть, имея словарь $V$ и размер встраивания $H$, они принимают векторы размера $|V|$ и пропускают их через один скрытый слой и один выходной слой, с матрицами весов $W_1\in \mathbb{R}^{H\times |V|}$ и $W_2\in \mathbb{R}^{|V|\times H}$, аналогично небольшой автоэнкодер. Выходной слой всегда упоминается с активацией softmax, и согласно этому курсу на Coursera, у скрытого слоя есть активация ReLU. Тем не менее, я видел, что у него нет активации ($\varphi(x) = x$).
Разница между CBoW и skip-gram состоит в том, что CBoW «предсказывает текущее слово на основе контекста», а skip-gram «предсказывает окружающие слова, исходя из текущего слова». Это дословная цитата из оригинальной статьи Word2Vec, Mikolov 2013. Вот их иллюстрация, которая выглядит интуитивно, но на самом деле она известна своей запутанностью:
Поскольку оба алгоритма используются для перехода от одноразового кодирования к меньшему встраиванию (весам в одной или обеих матрицах), их формат входа и выхода остается одноразовым. Я знаю, что для каждого обучающего примера CBoW начинает с $C$ одноразовых векторов (по одному для каждого слова контекста) и просто усредняет их, чтобы получить один вектор размера $|V|$. (По этой причине его называют «мешком слов»: потому что усреднение коммутативно, вы теряете порядок слов контекста.) Помимо этого хитроумного преобразования многие к одному, остальная часть сети имеет смысл.
Skip-gram не имеет проблем с кодированием входа, но у него есть преобразование многие к одному в конце. Это проблема.
Проблема
Что делает skip-gram на своём выходном слое? Я искал ответы на различных сайтах StackExchange, чтобы найти консенсус по этому вопросу, и, похоже, есть четыре разных лагеря.
-
Skip-gram предсказывает $C$ softmax-значений размером $|V|$, используя $C$ разные матрицы $W_{2}^{(1)} \dots W_{2}^{(C)}$.
Примеры: эта статья (по крайней мере иллюстрации), эта статья, в которой говорится «каждая со своей матрицей весов», и этот вопрос. -
Skip-gram предсказывает $C$ softmax-значений размером $|V|$, используя одну и ту же матрицу $W_2$.
Примеры: этот вопрос и этот ответ. -
Skip-gram предсказывает $1$ softmax значения размером $|V|$, используя одну матрицу $W_2$, и набор данных состоит из пар (центральное слово, слово контекста) вместо (центральное слово, все слова контекста).
Примеры: этот учебник. -
Skip-gram является бинарным классификатором, предсказывающим, находится ли данное слово «в контексте» или «вне контекста» для другого слова. Набор данных состоит из пар слов, которые либо появлялись близко друг к другу (положительные), либо были случайно сопряжены (отрицательные).
Примеры: эта статья, эта статья и этот ответ.
Обычно skip-gram объясняется как имеющий одну выходную матрицу, что относится к гипотезам (2) или (3), но при этом производя $C$ различных слов на выходном слое, из одного и того же скрытого представления, что относится к гипотезе (1). См. эту статью и иллюстрацию в этом вопросе. Это магический трюк. Чистая выдумка.
Я нахожу (3) наиболее разумным, так как у него всего две весовые матрицы и он не производит бесполезные копии. В этом случае skip-gram на самом деле не предсказывает никаких слов, а скорее выдает единственный вектор размера $|V|$, который представляет собой средний одноразовый вектор слов контекста. Этот единственный вектор затем может учитывать один член в потере на каждое слово контекста.
Тем не менее, есть некоторые серьезные проблемы с (3):
-
Вы никогда не сможете достичь $0$ потерь. Допустим, функция потерь является логарифмической вероятностью и давайте посчитаем потери для одного контекстного окна:
$$
\ell(\text{слово}, \text{контекст}) = \sum_{i=1}^C \ln P(\text{контекст}_i \mid \text{слово})
$$
Очевидно, что эта вероятность не может быть равна $1$ для каждого слова контекста. В идеальном случае она равна $1/C$. -
Он не может обрабатывать отрицательные примеры, как в (4). Пусть $y$ будет бинарной переменной, которая равна $1$, когда пара слов положительная, и $0$, когда она отрицательная. Какова $P(y \mid w_1,w_2)$ согласно приведенной выше модели? Это не может быть просто $P(w_2 \mid w_1)$. Почему? Посмотрите на эту бинарную потерю:
$$\begin{aligned}
\ell(w_1, w_2, y) &= y\ln P(y = 1 \mid w_1, w_2) + (1-y)\ln (1 – P(y = 1 \mid w_1,w_2)) \\ &= y\ln P(w_2 \mid w_1) + (1-y)\ln (1 – P(w_2 \mid w_1))
\end{aligned}$$
Как мы видели ранее, в лучшем случае, $P(w_2 \mid w_1) = 1/C$ для положительного примера, что означает $P(y = 0 \mid w_1,w_2) = 1 – 1/C$, что явно гораздо больше. Например: с контекстом $C = 4$, модель предсказывает, что слово является контекстным, присваивая ему вероятность 25%, и случайно распределяет оставшиеся 75% на все другие слова, так что она всегда предсказывает, что слово вне контекста. Вы просто не можете комбинировать вероятности softmax с отрицательным выбором. Этот ответ конкретно утверждает, что вероятность softmax вообще не используется, и вместо этого мы используем «оценку контрастировки шума».
Итак, раз и навсегда: производит ли нейронная языковая модель skip-gram Word2Vec вообще слова контекста?
Ответ — 3, но имейте в виду, что оригинальный алгоритм итерирует по всем доступным словам контекста для каждого центрального слова, таким образом, все возможные пары включены для каждого центрального слова (некоторые частые центральные слова, такие как стоп-слова, могут быть отфильтрованы в зависимости от параметров). Также оригинальная работа использует более быстрый альтернативный алгоритм для замены стандартного softmax.
В зависимости от параметра отрицательного выборки, обучающий набор может также содержать больше пар, где второе слово выбирается случайно.
Смотрите раздел 2 другой статьи Миколова и др. https://arxiv.org/pdf/1310.4546.pdf и оригинальный исходный код https://code.google.com/archive/p/word2vec/.
Редактировать:
Хорошо, я посмотрел на бумагу и код, которые я предложил выше. Я думаю, что они содержат всю информацию, чтобы правильно ответить на ваш вопрос.
Мой (неправильный) ответ выше основывался на упрощении метода. На самом деле, softmax рассматривается только как более простой и медленный альтернативный вариант иерархического softmax. Чистый softmax по всем словам в словаре, похоже, не используется в оригинальной реализации word2vec.
Я думаю, что правильный ответ состоит в том, что Skip-gram учит максимизировать логарифмическую вероятность «иерархического softmax», описанную в формуле (3) статьи (на которую я дал ссылку) по парам близких слов.
Для одной точки данных “иерархическая softmax” потеря может быть выражена как сумма членов по узлам на пути дерева, ведущем от корня к центральному слову. Каждый из этих членов выглядит как обычная логарифмическая потеря (бинарная кросс-энтропия), как в вашем пункте 4, но из-за суммирования по пути в дереве, в целом это, безусловно, более сложно, чем ваш пункт 4.
Если отрицательная выборка включена, метод просто добавляет (4) из статьи к потере. Это будет почти точно так же, как ваш пункт 4.
Ответ или решение
Вопрос: Производит ли нейронная сеть Skip-Gram из Word2Vec контекстные слова?
Введение
Чтобы ответить на вопрос о том, производит ли модель Skip-Gram из Word2Vec контекстные слова, важно сначала рассмотреть основную концепцию самой модели и отличие от других подходов, таких как CBoW (продолжительная мешок слов). Эти модели представляют собой два алгоритма для обучения векторных представлений слов, использующие нейронные сети для обработки текста.
Основы моделей Word2Vec
Модель Skip-Gram, как указано в статье Mikolov и др. (2013), специализируется на предсказании окружающих слов на основе текущего слова. В отличие от CBoW, который предсказывает текущее слово по контексту, Skip-Gram принимает одно слово (центр) и предсказывает множество контекстных слов (окружающих). Это по сути представляет собой задачу одно-к-многим, что вызывает некоторые вопросы касательно выходных данных модели.
Структура сети Skip-Gram
Структура сети Skip-Gram состоит из двух укрытых слоев с весовыми матрицами. При вставке одного слова в виде one-hot-вектора, происходит его преобразование в вектор меньшей размерности. Однако, в отличие от CBoW, на выходе должен генерироваться вектор, который соответствует множеству контекстных слов.
Рассмотрение гипотез о выходных данных
Существуют разные интерпретации на тему того, как именно Skip-Gram вырабатывает выходные слова:
-
Использование различных матриц: Первое мнение гласит, что для каждого контекстного слова производится вероятностное предсказание с использованием множества матриц. Однако это потребует значительных ресурсов и усложняет модель.
-
Использование одной и той же матрицы для всех предсказаний: Это означает, что на выходе появляется множество вероятностных распределений, основанных на одном скрытом представлении.
-
Обработка пар (центр, контекст): Другие исследователи утверждают, что в модели создаються выходы только для определенных пар слов, что позволяет избежать избыточности в представлениях.
-
Бинарная классификация: Есть также мнение, что Skip-Gram работает как бинарный классификатор, определяя, является ли слово контекстным или нет.
Ключевым моментом здесь является то, что, несмотря на различия в интерпретациях, результат остается неизменным: Skip-Gram обрабатывает слова в контексте их появления и учится, как эти слова соотносятся друг с другом.
Итог: Производит ли Skip-Gram контекстные слова?
На основании вышеприведенного анализа можно утверждать, что Skip-Gram все же не производит отдельные контекстные слова в традиционном понимании. Вместо этого он генерирует один вектор, который представляет вероятностное распределение на основе окружающих слов. Процесс обучения осуществляется путем оптимизации логарифмического правдоподобия, что приводит к созданию эффективных векторных представлений, но не обеспечивает наличие четких, предсказуемых контекстных слов отдельно.
В конце концов, важно помнить, что Skip-Gram работает с контекстными парами, из которых извлекается значимая информация о языковых взаимосвязях, и, несмотря на отсутствие явных выходных слов, модель все же помогает в создании точных векторных представлений, что делает ее очень полезной в естественной языковой обработке.
Заключение
Таким образом, Model Skip-Gram из Word2Vec не производит контекстные слова в привычном понимании этого термина, но создает мощные векторные представления, которые принимают во внимание контекстное окружение. Это обеспечивает более глубокое понимание языковых взаимосвязей, что, в свою очередь, способствует решению различных задач в области обработки естественного языка.