Perplexity
Perplexity - Độ bối rối của mô hình ngôn ngữ
Mô hình A đoán đúng 80% từ, mô hình B đoán đúng 40% từ. Mô hình nào "bối rối" hơn?
Kéo thanh trượt để thay đổi xác suất mô hình gán cho mỗi từ. Xác suất cao = mô hình tự tin → perplexity thấp!
Hình minh họa
Perplexity
1.46
Cực kỳ tự tin! Mô hình gần như chắc chắn.
Cross-entropy H = 0.55 bits | PPL = 2^H = 1.46
Thử kéo TẤT CẢ thanh trượt sang trái (xác suất thấp) → perplexity tăng vọt! Rồi kéo sang phải (xác suất cao) → perplexity giảm mạnh.
Perplexity = mô hình "bối rối" giữa bao nhiêu lựa chọn tại mỗi vị trí. PPL = 10 nghĩa là phân vân giữa 10 từ. PPL = 2 nghĩa là gần như biết chắc!
Giống chơi đoán từ: người giỏi (PPL thấp) thường đoán đúng, ít bất ngờ. Người kém (PPL cao) liên tục "ồ, không ngờ" khi thấy từ tiếp theo.
Perplexity cho thấy sự tiến bộ của NLP qua các thế hệ mô hình:
Từ ngẫu nhiên (50K) → GPT-4 (8): perplexity giảm 6,250 lần nhờ kiến trúc tốt hơn + dữ liệu nhiều hơn!
Mô hình có từ vựng 50,000 từ. Nếu chọn NGẪU NHIÊN (phân phối đều), perplexity bằng bao nhiêu?
Giải thích
Perplexity là chỉ số đánh giá nội tại (intrinsic metric) phổ biến nhất cho mô hình ngôn ngữ như GPT và BERT, đo mức "bất ngờ" trung bình khi gặp mỗi token sau khi qua bước tokenization.
Cross-entropy:
Perplexity = 2 mũ cross-entropy:
N = số token. = xác suất mô hình gán cho token thứ i. PPL thấp = xác suất cao = mô hình tốt.
PPL = 1: Mô hình hoàn hảo, luôn chắc chắn 100% (không thực tế).
PPL = 10: Mỗi bước phân vân giữa ~10 từ. Khá tốt!
PPL = V (kích thước từ vựng): Không biết gì, chọn ngẫu nhiên. Tệ nhất!
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# Tính perplexity cho GPT-2
model = GPT2LMHeadModel.from_pretrained("gpt2")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
text = "Phở Hà Nội rất ngon và nổi tiếng"
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs, labels=inputs["input_ids"])
loss = outputs.loss # cross-entropy loss
perplexity = torch.exp(loss).item()
print(f"Loss: {loss:.4f}")
print(f"Perplexity: {perplexity:.2f}")
# Loss: 3.2145
# Perplexity: 24.89
# → GPT-2 "phân vân" giữa ~25 từ cho mỗi vị tríPerplexity KHÔNG đo: sự mạch lạc (coherence), sự đúng đắn (factuality), sự an toàn (safety), hay sự hữu ích (helpfulness). Để đánh giá chatbot như ChatGPT cần human evaluation + benchmark đa chiều (MMLU, HumanEval, ...).
- Perplexity đo mức 'bối rối' của mô hình: PPL thấp = tự tin, PPL cao = bối rối.
- PPL = 2^(cross-entropy). PPL ≈ k nghĩa là phân vân giữa ~k từ mỗi vị trí.
- Chỉ so sánh PPL khi cùng vocabulary VÀ cùng tập kiểm tra.
- Tiến bộ: Random (50K) → N-gram (200) → LSTM (50) → GPT-2 (18) → GPT-4 (8).
- PPL không đo chất lượng nội dung: cần thêm human eval, benchmark đa chiều.
Kiểm tra hiểu biết
Perplexity = 10 có nghĩa gì?