Перейти к основному содержимому

Введение в языковые модели

Языковая модель (Language Model, LM [1]) — это фундаментальная концепция в обработке естественного языка (NLP). Её главная задача состоит в том, чтобы моделировать последовательности слов, оценивая, насколько вероятна та или иная фраза в заданном языке.

Формально, языковая модель задаёт распределение вероятностей над последовательностями слов:

Pθ(w1,,wn)P_{\theta}(w_{1},\dots,w_{n})

где θ\theta — обучаемые параметры языковой модели, которые обычно находятся методом максимального правдоподобия (Maximum Likelihood Estimation, MLE) на больших массивах текстовых данных (корпусах текстов).

Знание вероятности всей последовательности позволяет нам решать две основные задачи моделирования:

  1. Предсказание следующего слова (autoregressive LM): Оценка того, какое слово с наибольшей вероятностью продолжит начатый текст:

    p(wnw1w2...wn1)?p(w_{n}|w_{1}w_{2}...w_{n-1}) - ?
  2. Предсказание промежуточных слов (masked LM): Восстановление пропущенных (замаскированных) токенов внутри контекста. Это стало особенно актуально с появлением архитектуры BERT:

    w1....wi1Xiwi+1wi+2...wjXj+1Xj+2Xj+3wj+4wj+5...wn,  X?w_{1}....w_{i-1}\mathbf{X}_iw_{i+1}w_{i+2}...w_{j}\mathbf{X}_{j+1}\mathbf{X}_{j+2}\mathbf{X}_{j+3}w_{j+4}w_{j+5}...w_{n},\;\mathbf{X} - ?

Применение языковых моделей

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

  • Автодополнение (аutocompletion): подсказка следующего слова на клавиатурах смартфонов или автоматическое завершение запросов в поисковых системах.
  • Исправление опечаток при вводе: выбор наиболее вероятных слов в контексте, если текст введён с ошибками и опечатками.
  • Машинный перевод: Выбор наиболее естественного варианта перевода среди нескольких допустимых вариантов.
  • Распознавание речи (speech recognition): Устранение акустической неоднозначности. Например, звуковые последовательности «с верой» и «сферой» звучат почти идентично, но языковая модель позволяет выбрать правильный вариант, опираясь на окружающий контекст предложения.
  • Генерация текста: создание креативных текстов, продолжение историй по их началу, ответы на вопросы в диалоговых системах и чат-ботах.

Статистический подход: марковские цепи

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

P(w1,,wn)=i=1nP(wiw1,,wi1)P(w_{1},\dots,w_{n})=\prod_{i=1}^{n}P(w_{i}|w_{1},\dots,w_{i-1})

Однако при таком подходе для вычисления вероятности ii-го слова нам нужно помнить весь предыдущий контекст w1,,wi1w_1, \dots, w_{i-1}. Число всевозможных контекстов растёт экспоненциально, поэтому мы никогда не соберём достаточно статистики, чтобы точно оценить вероятности длинных уникальных фраз.

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

P(wnw1,,wn1)P(wnwnk,,wn1)P(w_{n}|w_{1},\dots,w_{n-1})\approx P(w_{n}|w_{n-k},\dots,w_{n-1})

Такая статистическая модель называется N-граммной моделью, где N=k+1N=k+1 и представляет собой размер рассматриваемого блока слов w1,,wn1wnw_{1},\dots,w_{n-1}w_{n}.

Вероятности в таких моделях вычисляются простым подсчётом частот совпадений (долей) в обучающем корпусе. Обозначим функцию подсчёта как C()C(\cdot).

Униграмная модель

В этой модели k=0,N=1k=0, N=1 и слова вообще не зависят от контекста, мы просто генерируем слова пропорционально их частоте в языке:

wP(wn)w\sim P(w_{n})

Пример сгенерированного текста: «температура дождь облачно и солнце температура ветер градусы ожидается»

Биграмная модель (k=1,N=2k=1, N=2)

В этой модели k=0,N=1k=0, N=1. Каждое следующее слово зависит только от одного предыдущего:

wP(wnwn1)=C(wn1wn)C(wn1)w\sim P(w_{n}|w_{n-1})=\frac{C\left(w_{n-1}w_{n}\right)}{C\left(w_{n-1}\right)}

Пример сгенерированного текста: «температура воздуха будет облачно и сильный ветер ожидается завтра»

Триграмная модель

В триграмной модели k=2,N=3k=2, N=3, и слово зависит уже от двух предыдущих:

wP(wnwn1,wn2)=C(wn2wn1wn)C(wn2wn1)w\sim P(w_{n}|w_{n-1},w_{n-2})=\frac{C\left(w_{n-2}w_{n-1}w_{n}\right)}{C\left(w_{n-2}w_{n-1}\right)}

Пример сгенерированного текста: «температура воздуха завтра днем составит плюс двадцать градусов»

Анализ окна контекста

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

  • При малом kk оценка вероятностей получается надёжной, так как удаётся накопить большие статистики встречаемости коротких фраз. Однако в результате мы получаем плохую связность текста. Модель теряет нить повествования, как в примерах выше.
  • При большом kk (например, 5-граммы и выше) достигается высокая точность контекста, модель генериует грамматически безупречные длинные фразы. Однако из-за недостаточной статистики встречаемости длинных фраз в обучающем тексте мы сталкиваемся с проблемой разреженной оценки параметров такой модели. В итоге при генерации нового текста модель просто запоминает и копирует обучающую выборку кусками, не проявляя разнообразия.

Сглаживание вероятностей

Допустим, мы применяем статистическую языковую модель для оценки правдоподобия новых текстов

Это полезно, например, при классификации писем на спам и не спам для оценки p(textспам)p(\text{text}|\text{спам}) и p(textне спам)p(\text{text}|\text{не спам}).

В этом случае даже для небольших kk мы столкнёмся с проблемой при новых переходах слов. Допустим, что при применении модели нам встретилась биграмма wi+1wiw_{i+1}w_i, которой не было в обучающей выборке. В этом случае счётчик C(wi+1wi)=0C(w_{i+1}w_i) = 0. А поскольку вероятность всей цепочки считается как произведение

i=1nP(wiw1,,wi1),\prod_{i=1}^{n}P(w_{i}|w_{1},\dots,w_{i-1}),

то правдоподобие всего предложения сразу превращается в ноль.

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

Сглаживание Лапласа

Простейшее решение проблемы разреженности выше — добавить небольшую константу α\alpha к счётчику каждого возможного события, чтобы ни одна вероятность не обращалась в ноль. Формула триграммной модели примет вид:

P(wnwn2,wn1)=C(wn2,wn1,wn)+αC(wn2,wn1)+αVP(w_{n}|w_{n-2},w_{n-1})=\frac{C\left(w_{n-2},w_{n-1},w_{n}\right){\color{red}+\alpha}}{C\left(w_{n-2},w_{n-1}\right){\color{red}+\alpha|V|}}

где V|V| — размер всего словаря.

Влияние гиперпараметра α\alpha
  • При малом α\alpha мы максимально сохраняем оригинальное эмпирическое распределение. Точность возрастает, но разнообразие генерации падает (модель избегает новых сочетаний).
  • При увеличении α\alpha распределение стремится к равномерному, что приводит к увеличению разнообразия текста ценой снижения его связности.

Пример перерегулирования: При слишком большом α\alpha модель решит, что p(рамумама мыла)p(синхрофазатронмама мыла)p(\text{раму}|\text{мама мыла}) \approx p(\text{синхрофазатрон}|\text{мама мыла}), полностью игнорируя здравый смысл языка.

Продвинутые методы сглаживания

Сглаживание Лапласа считает все не встречавшиеся ранее переходы одинаково маловероятными. Такое поведение можно улучшить. Если NN-грамма ранее не встречалась, возможно, стоит опереться на (N1)(N-1)-грамму?

Для триграммы распределение можно брать из биграмной модели:

P(wnwn2,wn1)=C(wn2,wn1,wn)+αC(wn1,wn)C(wn2,wn1)+αC(wn1)P(w_{n}|w_{n-2},w_{n-1})=\frac{C\left(w_{n-2},w_{n-1},w_{n}\right){\color{red}+\alpha C\left(w_{n-1},w_{n}\right)}}{C\left(w_{n-2},w_{n-1}\right){\color{red}+\alpha C\left(w_{n-1}\right)}}

Другой популярный подход — интерполяция. Мы смешиваем предсказания моделей разных уровней с весом λ\lambda:

P^(wnwn2,wn1)=λP(wnwn2,wn1)+(1λ)P(wnwn1)\widehat{P}(w_{n}|w_{n-2},w_{n-1})=\lambda P(w_{n}|w_{n-2},w_{n-1}){\color{red}+(1-\lambda)P(w_{n}|w_{n-1})}

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

Если биграмной модели не хватает данных, можно продолжить рекурсию и сглаживать её с униграмной моделью и равномерным распределением.

Для достижения наилучших результатов в статистическом NLP используется более сложный метод сглаживания Кнесера-Нея (Kneser-Ney Smoothing [2]) и его модификации.

Проблема неизвестных слов (Out-of-Vocabulary)

Ещё одна проблема, тесно связанная со сглаживанием — это появление слов, которых вообще не было в обучающей выборке (Out-of-Vocabulary, OOV).

В классическом подходе эта проблема решается введением специального токена <UNK> (от "unknown"). При подготовке данных все редкие слова (например, встречающиеся реже 3 раз) заменяются на <UNK>. Модель учится предсказывать появление "неизвестного слова" в определённых контекстах. Во время тестирования любое новое слово также расценивается как токен <UNK>.

Модели машинного обучения

Классические N-граммы опираются на строгие совпадения слов. Но слова "собака" и "пёс" для такой модели — совершенно разные сущности. Если в обучении было "собака лает", N-граммная модель не поймёт, что "пёс лает" тоже вероятно.

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

  1. Известный контекст wn1wn2,...w_{n-1}w_{n-2},... кодируется нейронной сетью в вектор признаков (эмбеддинг) x\mathbf{x}.

  2. Для каждого слова из словаря предсказываются их «рейтинги» (сырые значения, называемые логитами, logits):

    g1(x),g2(x),...gV(x)g_{1}(\mathbf{x}),g_{2}(\mathbf{x}),...g_{V}(\mathbf{x})
  3. Логиты не являются вероятностями (они могут быть отрицательными и не суммируются в 1). Чтобы получить корректное распределение вероятностей следующего слова, логиты пропускаются через SoftMax-преобразование:

p(wn=1x)=eg1(x)i=1Vegi(x)p(wn=Vx)=egV(x)i=1Vegi(x)\begin{aligned}p(w_{n}=1|\mathbf{x}) & =\frac{e^{g_{1}(\mathbf{x})}}{\sum_{i=1}^{V}e^{g_{i}(\mathbf{x})}}\\ \cdots & \cdots\\ p(w_{n}=V|\mathbf{x}) & =\frac{e^{g_{V}(\mathbf{x})}}{\sum_{i=1}^{V}e^{g_{i}(\mathbf{x})}} \end{aligned}

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

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

p(wn=1x)=eg1(x)/τi=1Vegi(x)/τp(wn=Vx)=egV(x)/τi=1Vegi(x)/τ\begin{aligned}p(w_{n}=1|\mathbf{x}) & =\frac{e^{g_{1}(\mathbf{x}){\color{red}/\tau}}}{\sum_{i=1}^{V}e^{g_{i}(\mathbf{x}){\color{red}/\tau}}}\\ \cdots & \cdots\\ p(w_{n}=V|\mathbf{x}) & =\frac{e^{g_{V}(\mathbf{x}){\color{red}/\tau}}}{\sum_{i=1}^{V}e^{g_{i}(\mathbf{x}){\color{red}/\tau}}} \end{aligned}

Тогда гиперпараметр температуры τ>0\tau>0 как раз позволит управлять данным противоречием аналогично тому, как это делалось гиперпараметром kk в статистической модели.

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

В качестве модели g1(x),...gV(x)g_{1}(\mathbf{x}),...g_{V}(\mathbf{x}) эффективнее показывают себя нейросети. Поскольку текст - последовательность слов, то, заменив слова соответствующими эмбеддингами, его можно обрабатывать временными свёрточными сетями (temporal convolutional nets [3]), основанными на использовании каузальных свёрток (causal convolutions), которым разрешено обрабатывать лишь предшествующие, но не будущие данные временного ряда, как показано ниже [3]:

Каузальные свёртки аналогичны статистической языковой модели тем, что учитывают исторический контекст ограниченной длины. Для учёта всего исторического контекста можно использовать рекуррентные сети. Однако история в таких сетях хранится в векторе скрытого состояния, которое обновляется домножением на одну и ту же матрицу много раз. За счёт подобного домножения настройка таких сетей происходит нестабильно, а при успешном обучении историческая информация быстро забывается. Лучше помнить историю за счёт использования вентилей (gates) позволяют продвинутые рекуррентные сети LSTM и GRU. Однако эмпирически даже они забывают информацию, которая была несколько сотен шагов назад. Сохранять всю входную информацию в нетронутом виде позволяет механизм внимания, причём для ускорения обработки он используется не в контексте рекуррентных сетей, а в контексте модели трансформера.

Литература

  1. Wikipedia: Language model.
  2. Jurafsky, D., & Martin, J. H. (2023). Speech and Language Processing (3rd ed. draft). Chapter 3: N-gram Language Models.
  3. habr.ru: Временные сверточные сети – революция в мире временных рядов.