Потому что вы всегда хотели знать, почему король-мужчина + женщина = королева.

Вы узнаете слово по компании, которую оно составляет.
- Джон Р. Ферт (1957)

Значение слова - это его использование в языке (…) Невозможно угадать, как слово функционирует. Надо посмотреть на его использование и извлечь из этого уроки .
- Людвиг Витгенштейн (1953)

Тот факт, что мы можем анализировать использование слов в языке, чтобы определить их значение, является фундаментальной идеей распределительной семантики , называемой распределительной гипотезой. Это вдохновение за множеством алгоритмов обучения числовым представлениям слов (также называемых вложениями слов).

Важным аспектом этих представлений является способность решать аналогии слов в форме «A для B то же, что C для X», используя простую арифметику. Обычно это упрощается как «Король - Мужчина + Женщина = Королева».

В этой статье мы попытаемся пролить свет на этот результат, указав рамки, в которых такие отношения действительно возникают. Мы также быстро рассмотрим основные методы изучения встраивания слов (Word2vec, GloVe и fastText). Цель состоит не в том, чтобы подробно изучить каждую модель встраивания, а в том, чтобы получить наиболее важную идею, связанную с каждой техникой. Подробное объяснение того, как работает Word2vec, см. В разделе справочной информации ниже.

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

Редкие представления

Просмотр слов как отдельных единиц

Простой способ представления слов - это горячие представления.
Давайте проиндексируем словарь V по набору {1,…, N }.

Определение: Горячее представление слова - это N -мерный вектор только с одной ненулевой позицией, соответствующей индексу этого слова. слово.

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

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

Плотные представления

Word2vec: изучение вложения путем прогнозирования контекстов слов

В 2013 году Томас Миколов и соавт. разработал алгоритм обучения встраиванию слов под названием Word2vec [бумага] [код]. Этот алгоритм использует мелкую нейронную сеть для изучения векторов слов, так что каждое слово данного корпуса хорошо предсказывает собственный контекст (Skip-Gram ) или наоборот (CBOW).

Эмпирические результаты с использованием этих методов, кажется, показывают, что этот подход успешен при изучении значения слов. Фактически, результирующее пространство внедрения, кажется, имеет направления семантического и синтаксического значения, которые можно раскрыть с помощью простых операций над векторами слов.

Например, мы можем получить слова, имеющие семантические отношения, такие как Country-Capital:

vector(Paris) — vector(France) + vector(Morocco) ~ vector(Rabat)

А также слова, имеющие синтаксические отношения, такие как единственное-множественное число:

vector(Kings) - vector(King) + vector(Person) ~ vector(People)

Как мы можем объяснить арифметику векторов слов?

В недавней статье Gittens et al. демонстрируется, как могут возникать такие отношения. Авторы начинают с предположения, что слово c имеет то же значение, что и набор слов C, когда для любого другого слова w:

Учитывая набор слов C, попытка найти слово c, подтверждающее приведенное выше уравнение, является сложной задачей. Поэтому авторы предлагают поискать слово, минимизирующее «расстояние» между двумя условными распределениями:

где KL обозначает расхождение Кульбака-Лейблера, а V обозначает набор всех возможных слов (словарь). Такое слово называется перефразированием слова C.

Затем авторы доказывают (теорема № 1), что если модель логлинейна:

и если мы предположим условную независимость распределения слов:

тогда перефразирующее слово c проверяет:

Наконец (теорема № 2), они предполагают, что слова распределены равномерно , что позволяет им доказать, что вектор перефразирующего слова:

[TL; DR] По сути, если мы предположим, что:
• все слова распределены равномерно,
• модель встраивания будет log- linear и
• условные распределения слов независимы,
тогда вложение перефразирования набора слов получается путем суммирования вложений всех отдельных слов.

Используя этот результат, мы можем очень легко восстановить семантические отношения, такие как Man:Woman::King:Queen следующим образом:

  • Man и Woman разделяют отношения Мужчина-Женщина. Это означает, что Man - это перефразирование {Woman, X}, где X - абстрактный набор всех слов, которые кодируют отношения Мужчина-Женщина.
  • Поскольку King и Queen имеют одни и те же отношения между мужчиной и женщиной, то King является перефразированием набора слов {Queen, X}.

Используя теорему № 2, получаем:

Примечание. Это доказательство представляет собой интересную попытку объяснить направления семантического и синтаксического значения в Word2vec и других моделях. Но это также предполагает некоторую неточность в распределении слов. На самом деле, распределение слов распределяется неравномерно, вместо этого считается, что оно соответствует закону Ципфа.

GloVe: изучение вложения на основе совпадения слов

Через год после публикации Word2vec Пеннингтон и др. разработал новый алгоритм для изучения вложений слов под названием GloVe [бумага] [код]. Этот алгоритм основан на наблюдении, что отношения слов могут быть восстановлены из статистики совпадения любого (достаточно большого) корпуса.

Пусть Xij - это количество раз, когда слова i и j « одновременно встречаются» в данном корпусе, а Xi - количество раз, когда слово i встречается в целом. При условии, что корпус достаточно велик, мы можем считать, что вероятность того, что слово i встречается рядом со словом j, составляет:

Мы можем обнаружить отношения между словами, глядя на отношения этих вероятностей. Например, вычисляя P(j|"ice")/P(j|"steam") для многих слов j, самые высокие и самые низкие значения будут такими же, как у solid и gas, сообщая нам, что «лед» для «твердого тела», что «пар» для «газа».

Авторы стремились построить модель, которая кодирует эти семантические и синтаксические отношения как линейные операции над своими векторами слов:

Здесь u обозначает вектор слова, а v обозначает векторы контекстного слова. Этот выбор произвольный, поэтому модель должна быть симметричной для преобразования u ← → v. Это достигается в два этапа.

Во-первых, F должен быть гомоморфизмом между группами (R, +) и (R +, ×):

Это подразумевает, что F - это экспоненциальная функция. Это означает, что:

Поскольку последний логарифм не зависит от k, он может быть поглощен смещением bi. Добавление второго смещения bk завершает симметрию модели:

GloVe пытается проверить это равенство для каждой возможной пары слов i & j, минимизируя взвешенную цель наименьших квадратов:

Где f - весовая функция, которая должна быть равна 0, когда Xij = 0, чтобы гарантировать, что логарифм правильно определен:

где параметр отсечки x_max установлен на 100.

Примечание. Если мы проигнорируем смещения в предыдущей цели обучения, мы увидим, что алгоритм пытается сделать скалярное произведение векторов слова и контекста как можно ближе к логарифм совпадения слов. Мы можем интерпретировать это как GloVe, неявно факторизующего логарифм матрицы совпадения X.

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

fastText: надежные вложения с использованием информации подслова

Проблема с GloVe и Word2vec заключается в том, что они изучают вложения только для слов из словаря. В результате слова вне словаря (OOV) не имеют векторного представления и обычно либо представлены вектором нулей, либо средним значением всех векторов слов, либо просто игнорируются из приговор. В 2016 году Бояновски и др. [Paper] [code] опубликовал FastText, метод изучения встраивания слов с использованием информации подслова, который решает эту проблему.

Примечание. Название FastText на самом деле означает два разных, но связанных алгоритма. С одной стороны, есть интересующий нас метод встраивания. Но с другой стороны, есть еще алгоритм классификации FastText, который использует приемы оптимизации для эффективной классификации текстов [бумажных]. Этот классификатор может использовать или не использовать встраивания FastText в зависимости от выбора пользователя.

Короче говоря, FastText (техника встраивания) изучает встраивание символьных n-граммов, то есть последовательностей n последовательных символов. После обучения вложение каждого слова вычисляется как сумма составляющих его n-граммов.

В приведенном выше примере мы предполагаем, что слово going вне словарного запаса. Используя FastText с n = 3, вложение для going может быть получено как сумма его символьных 3-граммов. Среди всех этих n-граммов, граммы <go и ing могут сообщить нам, что слово going является непрерывным действием, связанным с глаголом go без слова going, фактически встречающегося в обучающих данных.

Более простой подход

Факторизация матрицы совместной встречаемости с помощью SVD

В то время как первые успешные методы изучения встраивания слов основывались на нейронных сетях (Bengio et al. 2003, Collobert and Weston 2008), эффективность последних методов встраивания доказала, что в этом нет необходимости. На самом деле Word2vec - это едва ли не нейронная сеть, поскольку в нем нет скрытых слоев и нелинейностей, но он по-прежнему дает хорошие результаты. Затем GloVe неявно факторизует матрицу совместной встречаемости и достигает еще лучших результатов. Итак, насколько простой может быть модель и при этом научиться хорошему встраиванию слов?

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

  • Вычислить вероятность появления каждого слова p(x)
  • Вычислить вероятность одновременного появления каждой пары слов p(x,y)
  • Разделите вероятность каждой совместной встречаемости на вероятность каждого слова p(x,y)/p(x)p(y)
  • Примените логарифм к соотношению: log[p(x,y)/p(x)p(y)].

Это последнее значение называется Точечная взаимная информация (PMI). Поскольку многие слова никогда не встречаются вместе, это означает, что логарифм может быть некорректным. Чтобы избежать этого, мы превращаем любое отрицательное значение PMI в 0. Эта статистика теперь называется PPMI для положительной точечной взаимной информации.

После вычисления матрицы PPMI остается только разложить эту матрицу с помощью SVD, чтобы получить свежие вложения слов. Но вы можете подумать, что эти вложения не так хороши, как Word2vec или Glove. В конце концов, простой СВД не может быть так хорош, как более сложные модели, верно?

В 2014 году Леви и Голдберг продемонстрировали, что векторы слов, изученные с помощью SVD на матрице PPMI, могут превосходить вложения Word2vec в задачах аналогии - при условии использования немного другой меры сходства. Более того, они также показали, что эти векторы слов также изучают направления значения слов, как это делают векторы Glove и Word2vec.

Заключение

Исследования по встраиванию слов все еще продолжаются. Если простые подходы обеспечивают удовлетворительное встраивание слов, более сложные модели могут добавить больше выразительности. Например, недавняя модель ELMo (Peters et al, 2018) [paper] [code] полагается на арсенал CNN и bi-LSTM для изучения контекстуализированных словесные векторы. Эти векторы затем можно добавить к обычным вложениям, таким как GloVe, чтобы обогатить их информацией о контексте слова, что поможет различать слово играть в контексте, например, Мне понравилась эта игра и Давайте играть вместе. .

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

Спасибо за чтение! Если вам понравился этот пост, не стесняйтесь поделиться им и оставить пару аплодисментов 👏. Кроме того, если вам нужно больше материалов о встраивании слов, вы можете обратиться к любой из ссылок ниже.

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