Мы применяем вложения слов, потому что они показали, что они улучшают качество результатов в задачах NLP / ML / AI. Несколько наивная концепция заключается в том, что они работают, расширяя узкий путь, обозначенный словом, предложением или документом, с контекстом, усредненным по огромному корпусу текста. Обычно вложения слов создаются с использованием различных реализаций Word2Vec или GloVe. Для тех, кто хочет копнуть глубже, существует множество a r t i c l e s, описывающих математику их внутренней работы и лежащих в их основе алгоритмов.

Далее давайте более подробно рассмотрим общий пакет слов (CBOW) и модель пропуска граммов (SG), реализованную в Word2Vec. Мы уже знаем, что в обучении CBOW мы пытаемся предсказать слово из его контекста, в то время как в обучении SG мы пытаемся предсказать слова из контекста. Как следствие, CBOW лучше справляется с большими обучающими данными и более частыми словами, в то время как SG хорошо работает также с меньшими объемами обучающих данных и лучше представляет менее частые слова. Более того, SG требует намного (в моем приближении: раз размер окна) больше времени на обучение, чем CBOW.

«Итак, предположим, что мы обучаем CBOW и SG в одном корпусе с одинаковыми настройками, какой результат сравнения мы ожидаем, когда будем смотреть на уровень внедрения слов, а не на производительность в приложении?»

«Может быть, CBOW вернет более частые слова, а SG - менее частые».

«И насколько на самом деле будут отличаться результирующие вложения слов?»

«Понятия не имею, давай начнем эксперимент и чему-нибудь научимся».

- Мой внутренний диалог

Итак, я пошел и получил дамп немецкой википедии за апрель 2019 года с зеркала и применил легкую предварительную обработку (то есть без лемматизации или других тяжелых методов НЛП), чтобы получить 2 ГБ простого текста с некоторыми фразами, склеенными вместе. Затем я использовал gemsim для расчета моделей CBOW и SG с 324 измерениями, размером окна 10 и минимальной частотой 10, что дало по 1,33 миллиона векторов каждая.

Очень простой (но довольно затратный по времени) подход к сравнению заключался в том, чтобы пройтись по словарю одной из моделей и подсчитать, сколько из 10 лучших похожих слов совпало. Результат представлен ниже с шагом в 1 тыс. Слов из словарного запаса и показывает два вывода: 1) векторы слов в модели имеют порядок, и этот порядок влияет на степень согласованности. 2) в целом наиболее похожие слова во многом зависят от выбранной модели.

Частота слов в корпусах распределяется согласно закону Ципфа, степенному закону, так что очень немногие очень распространенные слова составляют значительную часть количества сырых слов. Затем следует значительное количество слов средней частоты и, наконец, длинный хвост редко встречающихся слов. Глядя на картинку выше, кажется, что порядок векторов слов в основном основан на частоте. Пословно просматривая словарный запас и сравнивая его с исходным текстом, оказывается, что он действительно упорядочен по появлению слов в исходном корпусе. Поскольку вхождения слов распределены по всему корпусу, мы ожидаем увидеть в среднем более частые слова раньше, чем менее частые. Также можно сделать вывод, что частота встречаемости исходного слова коррелирует со степенью согласия.

Итак, давайте продолжим и разделим словарь на контролируемое количество классов слов, каждый из которых находится в определенном частотном диапазоне. Принимая во внимание степенной закон, частотные классы могут быть построены путем сравнения частоты наиболее распространенного слова в корпусе (здесь: «der») с частотой каждого слова, взяв логарифм (здесь: основание 2) отношения и округляем результат. В начале распределения данных очень мало, поэтому все 200 наиболее часто встречающихся слов были отнесены к классу «6». Полученные в результате 16 частотных классов на рисунке ниже не имеют ничего общего по размеру, но частоты слов в классе отличаются менее чем на одну степень двойки по сравнению с наиболее часто встречающимся словом.

Теперь мы можем повторить первоначальное сравнение по частотному классу. Кроме того, поскольку первоначальный расчет занял слишком много времени (2 дня!), Мы можем взять достаточно большую выборку из каждого класса (1k) для входных слов. Приведенный ниже результат показывает, что предположение о корреляции между частотой слов и модельным соответствием в целом было правильным. В верхней части распределения (классы 6–8) есть слова, которые имеют небольшие согласования и не вписываются в общую тенденцию. Это то, что мы можем смело назвать стоп-словами. В середине распределения (классы 9–15) есть область, где согласие в целом справедливое, а влияние частоты довольно низкое. Ближе к хвосту распределения (классы 16–21) степень согласия ухудшается с увеличением (не) частотного воздействия.

Теперь мы получили обзор соглашений между CBOW и SG и влияние частоты слов. Затем мы можем исследовать отдельные модели, а также модель согласования частотных классов наиболее похожих слов, которые они предлагают, по сравнению с частотным классом входного слова. Мы снова используем выборку, потому что полный расчет займет очень много времени.

Слова, которые CBOW считает похожими (вверху), как правило, встречаются чаще, чем слова SG (внизу). Во главе раздачи предлагается очень много очень часто встречающихся слов для CBOW и значительно меньше для SG. В средней части распределения слова, предложенные CBOW, обычно встречаются немного чаще, чем слова, предложенные SG. В конце распространения этот эффект продолжается, но CBOW также начинает производить гораздо более редкие слова. Исключение менее часто встречающихся похожих слов при использовании встраивания слов может дать интересные результаты.

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

Обновление: мне потребовалась вторая попытка создать модель GloVe из того же корпуса, потому что я не учел временные требования к пространству GloVe (примерно в 9 раз больше исходного корпуса).

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

При сравнении GloVe и CBOW коэффициент согласия немного выше, чем между GloVe и SG (32,1% против 28,6%), в то время как между CBOW и SG он самый высокий (40%). По сравнению с CBOW мы все еще получаем немного более частые слова, но в середине (и в самой важной части) распределения различия не очень значительны.

Наконец, есть:

  1. Таблица Google с числами и диаграммами для сравнения примеров CBOW, SG и GloVe на 1000 слов для каждого частотного класса: https://docs.google.com/spreadsheets/d/1EWmy_Npb0-Ui5cZkTw7bv7iCr7Cp9tJgMCwYwaxwMKY/edit?usp=sharing
  2. Блокнот на jupyter: https://github.com/alhague/word_embedding_comparison/blob/master/Model%20comparison.ipynb

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