Ускоренный курс по встраиванию слов.

Что означает вложение слова?

Встраивание слов - это просто причудливый способ выразить числовое представление слов. Хорошей аналогией будет то, как мы используем представление цветов RGB.

Зачем нужно встраивание слов?

Как человек, интуитивно говоря, не имеет большого смысла представлять слова или любой другой объект во Вселенной с помощью чисел, потому что числа используются для количественной оценки и зачем нужно определять слова?

Когда в науке мы говорим, что скорость моей машины составляет 45 км / час, мы получаем представление о том, насколько быстро / медленно мы едем. Если мы скажем, что мой друг едет со скоростью 60 км / ч, мы можем сравнить, кто из нас едет быстрее. Кроме того, мы можем рассчитать, где мы будем в определенный момент времени, когда мы достигнем пункта назначения, если мы знаем расстояние нашего путешествия и т. Д.
Точно так же вне науки мы используем числа для количественной оценки качества Когда мы называем цену предмета, мы пытаемся количественно оценить его ценность, размер одежды, мы пытаемся количественно определить пропорции тела, которые она лучше всего подойдет.

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

Теперь, когда мы знаем, что числовое представление объектов помогает в анализе путем количественной оценки определенного качества, возникает вопрос, какое качество слов мы хотим определить количественно?

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

Что такое качественное встраивание слов и как их генерировать?

Самое простое вложение слов, которое у вас может быть, - это использование горячих векторов. Если в вашем словаре 10 000 слов, вы можете представить каждое слово в виде вектора размером 1x10 000.

В качестве простого примера, если у нас есть 4 слова - манго, клубника, город, Дели - в нашем словаре, то мы можем представить их следующим образом:

  • Манго [1, 0, 0, 0]
  • Клубника [0, 1, 0, 0]
  • Город [0, 0, 1, 0]
  • Дели [0, 0, 0, 1]

У описанного выше подхода есть несколько проблем. Во-первых, размер векторов зависит от размера словаря (который может быть огромным). Это пустая трата места и экспоненциально увеличивает сложность алгоритма, что приводит к проклятию размерности y.

Во-вторых, это встраивание будет тесно связано с их приложениями, что сделает перенос обучения модели с использованием другого словаря того же размера, добавление / удаление слов из словаря будет почти невозможным, так как это потребует повторного обучения всей модели снова.

Наконец, вся цель создания встраивания - уловить контекстное значение слов, чего это представление не может сделать. Между словами, имеющими схожее значение или употребление, нет взаимосвязи.

## Current situation 
Similarity(Mango, Strawberry) == Similarity(Mango, City) == 0
## Ideal situation
Similarity(Mango, Strawberry) >> Similarity(Mango, City)
** Note: Similarity(a,b) = a.b/(||a||*||b||) Cosine similarity

Модель непрерывного мешка слов (CBOW) и скип-грамм

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

В модели CBOW распределенные представления контекста (или окружающих слов) объединяются для предсказания слова в середине. В модели Skip-gram распределенное представление входного слова используется для предсказания контекста.

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

Модель скип-грамм

Мы сделаем это, создав «фальшивую» задачу для обучения нейронной сети. Нас не будут интересовать входы и выходы этой сети, скорее цель состоит в том, чтобы просто узнать веса скрытого слоя, которые на самом деле являются «векторами слов», которые мы пытаемся выучить.

Фальшивая задача для модели Skip-gram будет заключаться в том, что мы попытаемся предсказать соседние слова. Определим соседнее слово по размеру окна - гиперпараметр.

Учитывая предложение:
«У меня будет апельсиновый сок и яйца на завтрак».
и размер окна 2, если целевое слово сок, соседними с ним словами будут (есть, апельсин и, яйца). Наша пара вводимых и целевых слов будет (сок, есть), (сок, апельсин), (сок и), (сок, яйца).
Также обратите внимание, что в окне образца близость слова к исходному слову роли не играют. Таким образом, have, orange и, и яйца будут обрабатываться одинаково во время обучения.

Размеры входного вектора будут 1xV, где V - количество слов в словаре -, то есть одноразовое представление слова. Единственный скрытый слой будет иметь размер VxE, где E - размер встраиваемого слова и гиперпараметр. Выход из скрытого слоя будет иметь размер 1xE, который мы передадим в слой softmax. Размер выходного слоя будет 1xV, где каждое значение в векторе будет оценкой вероятности целевого слова в этой позиции.
Согласно нашему предыдущему примеру, если у нас есть вектор [0,2, 0,1, 0,3, 0,4], вероятность того, что слово будет манго, равна 0,2, а клубника - 0,1, город - 0,3, а Дели - 0,4.

Обратное распространение для обучающих выборок, соответствующих исходному слову, выполняется за один обратный проход. Итак, для сока мы завершим прямой проход для всех 4 целевых слов (have, orange и, egg). Затем мы вычислим векторы ошибок [размер 1xV], соответствующие каждому целевому слову. Теперь у нас будет 4 вектора ошибок 1xV, и мы проведем поэлементное суммирование, чтобы получить вектор 1xV. Веса скрытого слоя будут обновлены на основе этого кумулятивного вектора ошибок 1xV.

CBOW

Фальшивая задача в CBOW чем-то похожа на Skip-gram в том смысле, что мы по-прежнему берем пару слов и учим модель, что они встречаются вместе, но вместо добавления ошибок мы добавляем входные слова для одного и того же целевого слова.

Размер нашего скрытого слоя и выходного слоя останется прежним. Изменится только размер нашего входного слоя и расчет активаций скрытого слоя. Если у нас есть 4 контекстных слова для одного целевого слова, у нас будет 4 входных вектора 1xV. Каждый будет умножен на скрытый слой VxE, возвращающий векторы 1xE. Все 4 вектора 1xE будут усреднены поэлементно, чтобы получить окончательную активацию, которая затем будет загружена в слой softmax.

Skip-gram: хорошо работает с небольшим объемом обучающих данных, хорошо отображает даже редкие слова или фразы.
CBOW: обучается в несколько раз быстрее, чем skip-gram, немного лучшая точность для частых слов.

В части II этого поста: NLP 101: Negative Sampling and GloVe мы обсуждаем:

  • Отрицательная выборка - метод, позволяющий улучшить обучение без ущерба для качества встраивания.
  • Другое слово встраивание называется GloVe, которое представляет собой гибрид модели на основе подсчета и модели на основе окна.

использованная литература

Другие мои статьи, которые, я думаю, вам понравятся: D

Рад, что вы дочитали до конца статьи. 🎉
Надеюсь, ваш опыт чтения был таким же обогащающим, как и тот, который я получил при написании этой статьи. 💖

Ознакомьтесь с другими моими статьями здесь.

Если вы хотите связаться со мной, я выберу Twitter.