Đọc ngày 2026-07-29

Kế hoạch hôm nay

Mục tiêu cần hiểu

  • Hiểu vì sao sinh văn bản mạch lạc khó hơn chỉ dự đoán token tiếp theo.
  • Phân biệt greedy search, beam search và sampling khi decode text.
  • Nắm top-k và nucleus sampling kiểm soát sự đa dạng của output như thế nào.
  • Biết trade-off giữa output chính xác, đa dạng, tự nhiên và ít lặp.

Câu hỏi dẫn đường

  • Greedy search, beam search và sampling khác nhau thế nào?
  • Vì sao output sinh văn bản dễ bị lặp?
  • Top-k và nucleus sampling kiểm soát sự đa dạng ra sao?

Ghi chú trong khi đọc

  • Phần The Challenge with Generating Coherent Text nói rằng text generation khó hơn classification vì model không trả về một nhãn cuối cùng trong một forward pass. Model trả về phân phối xác suất trên vocabulary, còn ta phải chọn token kế tiếp bằng một decoding strategy.
  • Với task classification/token classification, logits có thể được đổi trực tiếp thành class hoặc xác suất class. Với Text Generation, logits phải được chuyển thành token, token mới lại được nối vào prompt, rồi quá trình lặp lại.
  • Vì decoding diễn ra từng bước nên chi phí tính toán tăng theo độ dài output. Sinh 100 token không phải là “một lần dự đoán dài”, mà gần giống 100 vòng dự đoán liên tiếp.
  • Chất lượng output không chỉ đến từ model mà còn từ cách decode: greedy dễ ổn định nhưng có thể lặp/thiếu tự nhiên; sampling tăng đa dạng nhưng dễ lệch nếu điều chỉnh sai.
  • GPT-2 là ví dụ decoder-only, autoregressive language model và causal language model: nó ước lượng xác suất token tiếp theo dựa trên prefix đã có.
  • Công thức trực giác:

Nói đơn giản: xác suất của cả đoạn văn được tách thành nhiều bước “token này có hợp lý không nếu trước đó là prefix này?“.

Autoregressive và causal language models

  • Autoregressive nhấn vào cách phân rã xác suất: thay vì ước lượng cả chuỗi một lần, model ước lượng từng token dựa trên các token trước đó.
  • Causal nhấn vào luật nhìn context: token hiện tại chỉ được dùng quá khứ/prefix, không được nhìn token tương lai. Trong Transformer, luật này thường được thực hiện bằng causal mask.
  • Vì vậy hai cụm này rất gần nhau trong LLM generation: autoregressive nói “dự đoán tuần tự”, causal nói “không nhìn tương lai”.
  • So sánh với BERT: BERT dùng masked language modeling và có thể nhìn cả trái lẫn phải quanh token bị mask; GPT-2 dùng causal language modeling nên sinh tự nhiên từ trái sang phải.

Greedy Search Decoding

  • Greedy Decoding là decoding method đơn giản nhất: ở mỗi timestep, lấy token có xác suất cao nhất từ phân phối next-token.
  • Quy trình trong sách: lấy logits của token cuối trong prompt, softmax thành xác suất, sắp xếp token theo xác suất, chọn token đứng đầu, nối token đó vào input rồi lặp lại.
  • Ví dụ prompt Transformers are the có thể đi theo chuỗi lựa chọn xác suất cao nhất như most -> popular -> toy -> line -> in -> the -> world.
  • Điểm cần nhớ: greedy search nhìn tốt ở từng bước cục bộ, nhưng không đảm bảo chuỗi cuối là tốt nhất toàn cục. Một chuỗi có xác suất tổng thể cao hơn có thể bắt đầu bằng token không phải lựa chọn số 1 ở bước đầu.
  • Nhược điểm trong text generation: dễ sinh output lặp, đặc biệt khi cần văn bản dài hoặc đa dạng.
  • Cách gọi trong generate() để tắt sampling theo ví dụ sách: do_sample=False.

Beam Search Decoding

  • Beam Search Decoding không chỉ giữ một lựa chọn như greedy. Nó giữ nhiều prefix ứng viên, mở rộng từng prefix, rồi giữ lại các chuỗi có tổng score tốt nhất.
  • Với num_beams=5, model duy trì 5 chuỗi ứng viên ở mỗi bước decode. Điều này giúp tránh một số lỗi tối ưu cục bộ của greedy.
  • Điểm mạnh: deterministic nếu không sampling, ổn định hơn sampling và tìm kiếm rộng hơn greedy.
  • Điểm yếu: tốn compute hơn và vẫn có thể sinh câu generic/lặp nếu score ưu tiên chuỗi an toàn.

Top-k And Nucleus Sampling

  • Top-k Sampling giữ lại k token có xác suất cao nhất rồi sampling trong nhóm đó. Nó giúp output đa dạng hơn greedy nhưng vẫn loại bớt token quá thấp xác suất.
  • Nucleus Sampling hay top-p sampling giữ nhóm token có tổng xác suất đạt ngưỡng top_p, ví dụ top_p=0.9.
  • Cách nhớ: top-k giới hạn bằng số lượng token, nucleus giới hạn bằng khối lượng xác suất.
  • Nếu muốn output sáng tạo hơn, sampling thường hợp hơn greedy/beam. Nhưng nếu mở quá rộng, output có thể mất mạch hoặc chọn token lạ.

Viết lại bằng lời của tôi

  • Sinh văn bản mạch lạc khó vì model không thật sự “viết nguyên đoạn” trong một lần. Nó chỉ liên tục đoán token tiếp theo. Mỗi lần đoán xong, token được chọn sẽ thay đổi context cho lần đoán sau.
  • Vì vậy lỗi nhỏ ở một bước có thể kéo cả đoạn đi lệch hướng. Nếu decoding quá tham lam, output có thể an toàn nhưng nhàm/lặp. Nếu decoding quá ngẫu nhiên, output có thể đa dạng nhưng mất mạch.
  • Mental model: model cho xác suất, decoding method quyết định cách chọn token, và chuỗi token đã chọn quyết định context tiếp theo.
  • Với Autoregressive Language Model, mình hiểu model đang chơi trò “viết tiếp một chữ hợp lý nhất từ phần đã có”. Với Causal Language Model, điểm cần nhớ là nó bị khóa tầm nhìn về phía tương lai, nên lúc train/generate đều phải dựa vào prefix.
  • Với Greedy Decoding, mình hiểu đây là kiểu “mỗi bước chọn nước đi đang có điểm cao nhất”. Nó dễ giải thích và deterministic, nhưng vì chỉ tối ưu từng bước nên có thể mắc kẹt vào câu lặp hoặc kém tự nhiên.
  • Với Beam Search Decoding, mình hiểu đây là kiểu “giữ vài nước đi tốt nhất cùng lúc”. Nó bớt thiển cận hơn greedy, nhưng vẫn không phải sáng tạo tự do vì nó ưu tiên chuỗi có score cao.
  • Với Top-k Sampling và Nucleus Sampling, mình hiểu đây là cách cho model “bốc thăm có kiểm soát”: vẫn lấy mẫu để đa dạng hơn, nhưng chỉ bốc trong vùng token đủ hợp lý.
  • Synthesis quan trọng của ngày này là Decoding Strategies for Text Generation: model chỉ tạo phân phối, còn decoding quyết định cách biến phân phối đó thành chuỗi token thật.

So sánh decoding strategies

StrategyCách chọnHợp khiRủi ro
Greedy DecodingChọn token xác suất cao nhất ở mỗi bướcCần baseline nhanh, deterministicTối ưu cục bộ, dễ lặp
Beam Search DecodingGiữ nhiều chuỗi ứng viên có tổng score caoCần output ổn định, ít ngẫu nhiênTốn compute, có thể generic
Top-k SamplingSampling trong k token xác suất cao nhấtCần đa dạng nhưng vẫn giới hạn ứng viênk cố định nên có thể quá hẹp/quá rộng
Nucleus SamplingSampling trong nhóm token đạt tổng xác suất top_pCần đa dạng linh hoạt theo phân phốitop_p cao dễ nhiễu, thấp dễ nhàm

Tóm tắt hoàn thành

Điều chưa rõ

  • Làm sao chọn decoding strategy theo mục tiêu cụ thể: factual answer, creative writing, chatbot hay summarization?
  • Khi output bị lặp, nguyên nhân thường đến từ model, prompt, hay decoding hyperparameters?
  • Autoregressive và causal có luôn đồng nghĩa trong mọi tài liệu không, hay chỉ thường đi cùng nhau trong decoder-only LMs?
  • Khi nào greedy search đủ tốt, và khi nào bắt buộc phải chuyển sang beam search hoặc sampling?

Việc cần làm