Greedy Decoding
Định nghĩa
Greedy decoding là decoding strategy chọn token có xác suất cao nhất ở mỗi timestep khi sinh văn bản.
Cách hiểu bằng lời của tôi
Ở mỗi bước, model tạo phân phối xác suất cho token tiếp theo. Greedy decoding không cân nhắc nhiều đường đi cùng lúc; nó chỉ chọn token đang có xác suất cao nhất ngay lúc đó, nối vào prompt, rồi lặp lại.
prefix hiện tại
-> phân phối xác suất next-token
-> chọn token có xác suất cao nhất
-> prefix mới
-> lặp lạiQuy trình theo nguồn
Trong Chapter 05, sách minh họa greedy search với GPT-2:
- Lấy input prompt.
- Chạy model để lấy logits của token cuối.
- Dùng softmax để đổi logits thành xác suất.
- Sắp xếp token theo xác suất giảm dần.
- Chọn token xác suất cao nhất.
- Nối token đó vào input sequence.
- Lặp lại cho đến khi đủ số bước.
Trong Hugging Face generate(), ví dụ sách dùng do_sample=False để tái tạo greedy search.
Ví dụ trực quan
Với prompt:
Transformers are theGreedy search có thể sinh chuỗi:
Transformers are the most popular toy line in the worldĐiểm đáng chú ý không phải chỉ là câu cuối, mà là quá trình sinh từng token một: most, rồi popular, rồi toy, rồi line, …
Điểm mạnh
- Đơn giản và dễ debug.
- Deterministic: cùng model, prompt và cấu hình thường cho cùng output.
- Có thể hữu ích với chuỗi ngắn khi cần output ổn định hơn đa dạng.
Điểm yếu
- Tối ưu cục bộ: chọn token tốt nhất ở bước hiện tại, không đảm bảo chuỗi cuối tốt nhất.
- Có thể bỏ lỡ chuỗi có xác suất tổng thể cao hơn nếu chuỗi đó bắt đầu bằng token không đứng đầu ở bước đầu.
- Dễ tạo output lặp trong text generation, đặc biệt với văn bản dài hoặc cần đa dạng.
Cần biết
- Greedy decoding là baseline quan trọng trước khi học Beam Search, Top-k Sampling và Nucleus Sampling.
- Nó minh họa rõ bản chất lặp của Text Generation.
- Khi output bị lặp hoặc quá nhàm, greedy decoding là một nghi phạm đầu tiên cần kiểm tra.
Câu hỏi review
- Greedy decoding chọn token như thế nào ở mỗi timestep?
- Vì sao greedy decoding deterministic?
- Vì sao greedy decoding có thể bỏ lỡ chuỗi tốt hơn?
- Khi nào greedy decoding dễ gây output lặp?
Gợi ý trả lời câu hỏi review
- Nó chọn token có xác suất cao nhất từ phân phối next-token.
- Vì nó không sampling; cùng phân phối thì luôn chọn token đứng đầu.
- Vì nó tối ưu từng bước cục bộ, không tìm kiếm nhiều chuỗi ứng viên để tối ưu xác suất tổng thể.
- Khi sinh văn bản dài hoặc cần đa dạng, lựa chọn cục bộ lặp lại có thể dẫn vào vòng lặp từ/ngữ.