Что такое 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=1NlogP(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=1Nlog2P(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
-
Зависит от словаря (vocabulary size): модели с большим словарём обычно имеют более высокую perplexity.
-
Не всегда коррелирует с качеством генерации: модель может иметь низкую perplexity, но генерировать бессмысленный текст.
-
Неприменима к BERT и аналогичным MLM: BERT обучается на задаче заполнения пропусков (masked tokens), а не на предсказании следующего слова, поэтому perplexity напрямую не применяется.
-
Чувствительна к длине последовательности: особенно при неправильной нормализации.
Альтернативы 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∑logP(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 на новых доменах и анализе сходимости моделей на больших текстовых корпусах.