ML Fundamentals
perplexity
Метрика качества языковой модели: экспонента от среднего cross-entropy loss по токенам.
Что такое perplexity
Perplexity (PPL, «перплексия») — стандартная метрика оценки языковых моделей. Интуитивно: «насколько модель удивлена» при виде текста. Чем ниже perplexity, тем лучше модель предсказывает токены.
PPL = exp(L) = exp(-1/N × Σ log P(token_i | context))
Где L — средний cross-entropy loss по N токенам.
Интерпретация
PPL = 10 означает: в среднем модель уверена примерно «как при выборе из 10 равновероятных вариантов».
| PPL | Уровень |
|---|---|
| < 10 | Отличная LLM на специфическом домене |
| 10–30 | Хорошие LLM общего назначения (GPT-4, Llama 3) |
| 30–100 | Удовлетворительно |
| > 100 | Модель плохо подходит для данного текста |
Perplexity на разных датасетах
- WikiText-2, WikiText-103: стандартные бенчмарки для LLM
- PTB (Penn Treebank): классический датасет для оценки
- Домен-специфические тексты: PPL будет выше вне обучающего распределения
Типичные PPL на WikiText-2:
- Llama 3 8B: ≈ 6–7
- GPT-2 (124M): ≈ 29
Ограничения
- PPL зависит от токенизатора: нельзя сравнивать модели с разными токенизаторами напрямую
- PPL не коррелирует идеально с качеством downstream задач
- Низкий PPL не гарантирует фактическую точность (модель может уверенно генерировать неверные факты)
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# Вычислить PPL на тексте
model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
encodings = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**encodings, labels=encodings.input_ids)
loss = outputs.loss
ppl = torch.exp(loss).item()
Связанные термины
Готовы запустить GPU-задачу?
Запустить GPU-сервер