Top-K & Top-P Sampling
Top-K và Top-P — Lấy mẫu có chọn lọc
AI đang chọn từ tiếp theo. Có 50.000 từ trong từ điển. Nên cho AI chọn từ TẤT CẢ 50.000 từ hay chỉ từ vài từ xác suất cao nhất?
Hình minh họa
Lọc từ trước khi chọn
Câu: "Sáng nay tôi ăn ___" — 10 từ ứng viên với xác suất khác nhau.
Khi nào Top-K gặp vấn đề?
Top-P tự điều chỉnh số từ tùy mức tự tin — ít từ khi chắc chắn, nhiều từ khi không chắc.
Phân phối: "phở" = 85%, "cơm" = 8%, "bún" = 4%, còn lại < 1%
Top-K = 5: Giữ 5 từ — nhưng 3 từ cuối gần như vô nghĩa (0.5%, 0.3%...). Lãng phí!
Top-P = 0.9: Chỉ giữ "phở" (85% đã ≥ 90% → chỉ 1 từ). Hiệu quả!
Trong thực tế, API như Claude và GPT thường dùng cả temperature LẪN top_p. Nếu đặt temperature = 0, top_p = 0.9 — cái nào thắng?
Giải thích
Top-K và Top-P là hai kỹ thuật lọc từ vựng trước khi chọn token tiếp theo, bổ sung cho temperature. Khác với beam search (deterministic, khám phá nhiều nhánh song song), top-k/top-p giữ tính ngẫu nhiên nhưng loại bỏ các token xác suất thấp để tránh output vô nghĩa.
Logits → Temperature (điều chỉnh phân phối) → Top-K/Top-P (lọc từ) → Sampling (chọn ngẫu nhiên từ nhóm đã lọc)
So sánh:
| Tiêu chí | Top-K | Top-P |
|---|---|---|
| Cách lọc | Giữ đúng K từ | Giữ từ đến khi tổng ≥ P |
| Số từ | Cố định | Linh hoạt (thay đổi theo phân phối) |
| Ưu điểm | Đơn giản, dễ hiểu | Thông minh hơn — tự điều chỉnh |
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=100,
# Chỉ chỉnh MỘT trong hai:
temperature=0.8, # Hoặc...
top_p=0.9, # ...cái này (không nên cả hai)
# top_k=40, # Ít dùng hơn top_p
messages=[{"role": "user", "content": "Viết thơ về Hà Nội"}]
)- Top-K giữ đúng K từ xác suất cao nhất (cố định) — đơn giản nhưng cứng nhắc
- Top-P (nucleus sampling) giữ từ đến khi tổng xác suất ≥ P — linh hoạt theo mức tự tin
- Pipeline: Logits → Temperature → Top-K/P → Sampling — mỗi bước lọc thêm
- Thực tế: chỉnh temperature HOẶC top_p, không nên chỉnh cả hai cùng lúc
Kiểm tra hiểu biết
Top-K = 3 nghĩa là gì?