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()

Связанные термины

  • loss — perplexity = exp(loss)
  • logits — из них вычисляется loss → perplexity
  • tokenizer — влияет на значение PPL
  • inference — оценка модели через PPL

Готовы запустить GPU-задачу?

Запустить GPU-сервер