Вступление

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

Код

Код для воспроизведения чисел и цифр, представленных в этой статье, можно скачать из этого репозитория.

Набор данных

Анализ, обсуждаемый в этой статье, основан на необработанном корпусе wikitext-103. Этот корпус состоит из статей, извлеченных из набора Хороших и Избранных статей в Википедии, и имеет более 100 миллионов токенов.

Поскольку у меня нет доступа к мощным вычислительным ресурсам, я выполнил этот анализ только на тестовой выборке. Вот пример того, как выглядит тестовый набор:

Набор тестов имеет следующие свойства:

  • Размер словарного запаса: 17, 733
  • Количество токенов: 196095

Вот список из 10 самых распространенных слов и их количество (сколько раз они появляются в корпусе):

а вот список из 10 наименее распространенных слов и их количество:

Закон Ципфа

В НЛП закон Ципфа - это дискретное распределение вероятностей, которое сообщает вам вероятность встретить слово в данном корпусе. Входными данными является ранг слова (с точки зрения частоты), поэтому вы можете использовать это распределение, чтобы задавать такие вопросы, как:

  • Какова вероятность встретить наиболее распространенное слово в корпусе из 100 000 слов?
  • Какова вероятность встретить 10-е самое распространенное слово в корпусе из 100 000 слов?
  • Какова вероятность встретить наименее распространенное слово в корпусе из 100 000 слов?

Вероятностная функция массы в законе Ципфа определяется как:

куда:

  • k - ранг интересующего нас слова для определения вероятности появления в корпусе
  • N - объем словарного запаса корпуса
  • s является параметром распределения вероятностей и установлен в 1 в классической версии закона Ципфа.

Как показывает следующий вывод, закон Ципфа гласит, что существует связь между вероятностью появления слова в корпусе и его рангом:

Предположим, что s = 1, и наиболее часто встречающееся слово в вашем корпусе, т. Е. Ранг 1, - это «the», то есть слово i, и 10-е наиболее распространенное слово, т.е. ранг 10 в вашем корпусе, слово «кошка», то есть слово j. Также предположим, что вероятность появления слова «the» в вашем корпусе равна 0,5. Тогда согласно уравнению 1 вероятность появления слова «кошка» в вашем корпусе составляет (1/10) * 0,5 = 0,05. Другими словами, для данного корпуса соотношение между рангом слова и вероятностью встретить его следует степенному закону.

Закон Ципфа в Wikitext-103

Соответствуют ли слова в Wikitext-103 закону Ципфа?

Вот снова список из 10 самых употребляемых слов в корпусе, но с парой дополнительной информации:

Столбец «пропорция» - это количество раз, когда определенное слово встречается, деленное на общее количество слов в корпусе, то есть эмпирическую вероятность. Столбец «predicted_proportion» - это теоретическая вероятность согласно закону Ципфа с s = 1. Обратите внимание, что эти два значения очень близки друг к другу.

Вот логарифмический график разброса, показывающий взаимосвязь между рангом слова и его эмпирической и теоретической вероятностью:

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

И что?

Почему имеет значение, что распределение слов в корпусах, на которых вы тренируете нейронную языковую модель, следует закону Ципфа?

Напомним, что модели нейронного языка обучаются на больших корпусах, так что даже самое частое слово составляет небольшую его часть. В этом примере наиболее частым словом является «the», но оно составляет только 7% слов в тестовом наборе викитекста (напомним, что этот корпус содержит 196 тыс. Слов и размер словарного запаса 17 тыс. По закону Ципфа будет только около 0,1 * 0,07 * 196 095 = 1372 обучающих примера для 10-го наиболее распространенного слова. Количество примеров будет продолжать быстро уменьшаться в 10 раз для 100-го, 1000-го и т. Д. Наиболее распространенного слова.

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

Рассмотрите возможность представления слов в этом корпусе с помощью 300-мерного вектора. По закону Ципфа у вас будет всего около 0,01 * 0,07 * 196 095 = 137 обучающих примеров для обучения 100-му наиболее распространенному слову. Это, безусловно, приведет к переобучению, поскольку способность представить это слово (300) намного больше, чем количество обучающих примеров (137). Обучение на большом корпусе - это лишь частичное решение, поскольку оно переносит проблему только на менее распространенные слова.

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

Баевски и Аули (2019) предложили адаптивные входные представления как средство решения проблемы, описанной в предыдущем разделе. Вот диаграмма из их статьи, описывающая эту идею:

В словах они начинают с того, что группируют словарный запас в своем корпусе в кластеры в зависимости от частоты употребления слова. Первый кластер будет иметь размер встраивания d, а размер встраивания последующих кластеров будет уменьшен в k раз. Например, когда авторы построили языковую модель для wikitext-103, они разделили словарь на 3 кластера со следующими свойствами:

  • кластер 1:20 тысяч слов с размером встраивания 1024
  • кластер 2: 40 тыс. слов с размером встраивания 256
  • кластер 3: 200 тыс. слов с размером встраивания 64

обратите внимание, что размер встраивания для каждого кластера уменьшается в k = 4 раза.

Поскольку каждый кластер выводит вектор с разными размерами, каждый из них также связан с матрицей проекции, которая будет проецировать выходные векторы в общее измерение, d, чтобы их можно было объединить и передать в модель для дальнейшей обработки, например. выделение признаков, классификация и т. д. Эти матрицы проекции представляют собой зеленые прямоугольники, обозначенные на диаграмме как «Линейные».

Вышеуказанная установка дает следующие преимущества:

  • Уменьшение количества параметров для тренировки, что приводит к сокращению времени обучения
  • Лучшее обобщение редких слов

Вот сравнение производительности их предложенной модели (ADP и ADP-T) и других распространенных моделей:

Вот как их модель работает при предсказании редких слов:

Обратите внимание, что ADP-T работает лучше всех во всех диапазонах частот слов.

Примечание. «T» означает привязанный, что означает, что параметры в разделе адаптивного ввода модели используются совместно с частью модели с адаптивным softmax.

Заключение

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

Дайте мне знать, что вы думаете в комментариях.

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

Закон Ципфа; Википедия. Последний доступ 10 марта 2019 г.

Языковая модель; Википедия. Последний доступ 10 марта 2019 г.

Набор данных моделирования языка долгосрочных зависимостей WikiText; Милосердие. 2016 г.

"Сила закона"; Википедия. Последний доступ 10 марта 2019 г.

Адаптивные входные представления для моделирования нейронного языка; Баевски и Аули. 2019.