Что такое perplexity и где она используется?

Perplexity — это метрика, используемая для оценки качества языковых моделей. Она измеряет, насколько хорошо модель предсказывает образцы из распределения данных. Чем ниже perplexity, тем лучше модель способна предсказывать вероятности слов или токенов в языке. Эта метрика особенно популярна при обучении и сравнении n-граммных моделей, нейросетевых языковых моделей (LSTM, Transformer и др.) и при тестировании генеративных моделей текста.

Формальное определение perplexity

Для заданной последовательности слов или токенов w1,w2,...,wNw_1, w_2, ..., w_N и языковой модели, предсказывающей вероятности P(wi∣w1,...,wi−1)P(w_i | w_1,...,w_{i-1}), perplexity определяется следующим образом:

Perplexity(W)=exp⁡(−1N∑i=1Nlog⁡P(wi∣w1,...,wi−1))\text{Perplexity}(W) = \exp\left(-\frac{1}{N} \sum_{i=1}^{N} \log P(w_i | w_1,...,w_{i-1})\right)

Либо, если использовать логарифм по основанию 2:

Perplexity(W)=2−1N∑i=1Nlog⁡2P(wi∣w1,...,wi−1)\text{Perplexity}(W) = 2^{ - \frac{1}{N} \sum_{i=1}^N \log_2 P(w_i | w_1, ..., w_{i-1}) }

Другими словами, perplexity — это экспонента от средней кросс-энтропии на токен. Она показывает, насколько «удивлена» модель, сталкиваясь с новым словом, и в среднем сколько разных вариантов она «ожидает» на каждом шаге генерации.

Интуитивное объяснение

Если perplexity = 1, это означает, что модель абсолютно уверена в каждом следующем слове (предсказывает его с вероятностью 1).

Если perplexity = 1000, это говорит о том, что модель в среднем «выбирает» из ~1000 возможных слов на каждом шаге, то есть она очень неуверенна.

Чем ниже perplexity:

  • тем более уверенно модель делает предсказания;

  • тем лучше она «понимает» структуру языка;

  • тем выше её сжатие информации и вероятность выдать правдоподобный текст.

Применение perplexity

1. Оценка языковых моделей

Perplexity — это стандартная метрика в:

  • N-граммных моделях (bigram, trigram)

  • LSTM- и GRU-моделях

  • Transformer-архитектурах (GPT, BERT-подобные языковые модели)

Используется:

  • для мониторинга качества на тренировочном и валидационном датасетах;

  • для ранней остановки обучения;

  • при сравнении моделей или гиперпараметров.

Пример: если у двух моделей на одном тестовом наборе perplexity равны 20 и 25, предпочтительна первая модель.

2. Оценка предобученных моделей

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

  • OpenAI GPT-2: perplexity ≈ 18 (на WikiText-103)

  • GPT-3: perplexity на различных корпусах (например, BooksCorpus, C4)

  • BERT: perplexity нельзя напрямую вычислить, потому что он обучается на задаче masked language modeling, а не последовательного предсказания.

3. Анализ качества на разных доменах

Perplexity может сильно отличаться для одного и того же текста в зависимости от домена:

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

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

4. Active Learning / Domain Adaptation

Если perplexity входных текстов на целевом датасете высока — это признак того, что модель недостаточно хорошо адаптирована. Тогда используется дообучение (fine-tuning) или адаптация словаря.

Ограничения perplexity

  1. Зависит от словаря (vocabulary size): модели с большим словарём обычно имеют более высокую perplexity.

  2. Не всегда коррелирует с качеством генерации: модель может иметь низкую perplexity, но генерировать бессмысленный текст.

  3. Неприменима к BERT и аналогичным MLM: BERT обучается на задаче заполнения пропусков (masked tokens), а не на предсказании следующего слова, поэтому perplexity напрямую не применяется.

  4. Чувствительна к длине последовательности: особенно при неправильной нормализации.

Альтернативы perplexity

  • BLEU / ROUGE / METEOR — метрики для сравнения генерации с эталоном (например, при машинном переводе, суммаризации).

  • BERTScore — семантическая оценка генерации на основе эмбеддингов.

  • Self-BLEU — мера разнообразия в генерации.

  • Cross-entropy — напрямую отражает loss модели.

  • Log-likelihood — в логарифмическом масштабе, применяется при генерации.

Пример вычисления perplexity

Допустим, модель оценивает вероятность следующего слова в предложении:
"The cat sat on the mat"

Модель предсказала вероятности слов:

  • P(“The”) = 0.1

  • P(“cat” | “The”) = 0.05

  • P(“sat” | “The cat”) = 0.1

  • P(“on” | “The cat sat”) = 0.2

  • P(“the” | “...”) = 0.15

  • P(“mat” | “...”) = 0.3

Тогда perplexity:

PP=exp⁡(−16∑log⁡P(wi))PP = \exp\left( - \frac{1}{6} \sum \log P(w_i) \right) =exp⁡(−16log⁡(0.1⋅0.05⋅0.1⋅0.2⋅0.15⋅0.3))= \exp\left( - \frac{1}{6} \log(0.1 \cdot 0.05 \cdot 0.1 \cdot 0.2 \cdot 0.15 \cdot 0.3) \right) ≈exp⁡(−16log⁡(2.25×10−6))≈exp⁡(2.62)≈13.75≈ \exp\left( - \frac{1}{6} \log(2.25 \times 10^{-6}) \right) ≈ \exp(2.62) ≈ 13.75

Таким образом, perplexity этого предложения в данной модели ≈ 13.75.

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