Decoding Strategies for Text Generation

Câu hỏi trung tâm

  • Khi model đã trả về phân phối xác suất next-token, nên chọn token tiếp theo bằng chiến lược nào?

Mental model

prompt
-> model tạo logits cho token kế tiếp
-> softmax thành xác suất trên vocabulary
-> decoding strategy chọn token
-> nối token vào prefix
-> lặp lại cho đến khi đủ dài hoặc gặp EOS

Vì sao decoding quan trọng?

  • Text Generation không kết thúc ở một forward pass như classification.
  • Mỗi token được chọn sẽ trở thành context cho bước tiếp theo.
  • Vì vậy decoding strategy quyết định output ổn định, lặp, generic, đa dạng hay dễ mất mạch.

So sánh nhanh

StrategyCách chọnTính chấtKhi nên dùngRủi ro
Greedy DecodingChọn token xác suất cao nhất từng bướcNhanh, deterministicBaseline, output ngắn, debugTối ưu cục bộ, dễ lặp
Beam Search DecodingGiữ nhiều chuỗi ứng viên có score caoDeterministic, tìm rộng hơn greedyTranslation/summarization hoặc output có cấu trúcTốn compute, dễ generic
Top-k SamplingSampling trong k token xác suất cao nhấtĐa dạng có giới hạnCreative generation có kiểm soátk cố định, có thể quá hẹp/quá rộng
Nucleus SamplingSampling trong nhóm token có tổng xác suất đạt top_pLinh hoạt theo phân phốiChat/creative writing tự nhiên hơntop_p cao dễ nhiễu, thấp dễ nhàm

Tổng hợp của tôi

  • Greedy và beam thiên về ổn định: phù hợp khi muốn output ít ngẫu nhiên.
  • Sampling thiên về đa dạng: phù hợp khi output có nhiều cách nói đúng.
  • Top-k giới hạn bằng số lượng token, còn nucleus/top-p giới hạn bằng khối lượng xác suất.
  • Khi output bị lặp hoặc quá an toàn, cần nghi ngờ decoding quá tham lam.
  • Khi output mất mạch hoặc bốc token lạ, cần nghi ngờ sampling quá rộng hoặc temperature quá cao.

Khi áp dụng

  • Factual answer: ưu tiên decoding ổn định, temperature thấp, có thể cần grounding như Retrieval-Augmented Generation.
  • Creative writing/chatbot: sampling có kiểm soát thường tự nhiên hơn greedy/beam.
  • Summarization/translation: beam search có thể hữu ích vì output cần bám input và ít ngẫu nhiên.
  • Debug generation: bắt đầu từ greedy để có baseline deterministic, sau đó thử beam/top-k/top-p.

Nguồn

Liên kết