Text Generation
Tạo văn bản là cách model ngôn ngữ viết nội dung bằng cách dự đoán từng token một, rồi chọn token theo phương pháp giải mã tham lam, tìm kiếm chùm hoặc lấy mẫu.
Sinh văn bản là quá trình model tự động tạo ngôn ngữ viết, từ câu trả lời một dòng đến báo cáo hoặc chương trình hoàn chỉnh. Hiện nay, việc này chủ yếu do mô hình ngôn ngữ lớn (LLM) thực hiện theo kiểu tự hồi quy: với một prompt cho trước, model tính xác suất của mọi token trong bộ từ vựng, chọn một token, nối token đó vào chuỗi rồi lặp lại cho đến khi quyết định dừng. Cùng quy trình này vận hành trợ lý hội thoại, tự động hoàn thành mã, dịch máy và tóm tắt văn bản. Các hệ thống trước đây điền mẫu hoặc lấy mẫu từ model n-gram và mạng neural hồi quy; Transformer đã giúp tạo ra các kết quả dài, mạch lạc một cách thực tiễn kể từ GPT-2 năm 2019.
Cách sinh tự hồi quy hoạt động#
Tokenization chuyển prompt thành ID token, rồi model xử lý tất cả trong một lượt prefill song song và lưu key, value attention của từng token vào KV cache. Ở mỗi bước giải mã, model chỉ đưa token mới nhất qua mạng, đọc cache và tạo logits — một điểm số thô cho mỗi mục từ vựng — rồi softmax chuyển các điểm số thành xác suất. Chiến lược giải mã chọn token tiếp theo; token này được truyền đến người dùng và nối vào chuỗi. Quá trình sinh dừng khi gặp token kết thúc chuỗi, chuỗi dừng hoặc giới hạn token, vì vậy độ dài đầu ra được quyết định trong lúc sinh:
Prefill tiêu tốn nhiều phép tính, còn decode bị giới hạn bởi băng thông bộ nhớ, vì vậy các engine phục vụ model cần lên lịch cẩn thận cho cả hai bước, chẳng hạn bằng prefill theo khối. Streaming cho phép ứng dụng hiển thị văn bản ngay khi văn bản xuất hiện: giao diện LLM của Ultralytics chuyển tiếp stream=True đến OpenAI SDK, nhờ đó ứng dụng YOLO26 có thể lần lượt in phần mô tả cảnh được phát hiện từ model khi từng sự kiện response.output_text.delta đến.
Các chiến lược giải mã#
Chiến lược giải mã định hình đầu ra không kém gì model. Giải mã tham lam luôn chọn token có khả năng cao nhất; phương pháp này có tính xác định nhưng dễ lặp lại. Beam search giữ lại k chuỗi một phần có khả năng cao nhất rồi trả về chuỗi hoàn chỉnh tốt nhất, phù hợp với tác vụ chỉ có một đáp án đúng như dịch thuật. Lấy mẫu rút token từ phân phối, thường sau khi điều chỉnh phân phối: temperature chia logits trước softmax, lấy mẫu top-k chỉ giữ k token có khả năng cao nhất, còn lấy mẫu nucleus (top-p), được đề xuất trong bài The Curious Case of Neural Text Degeneration của Holtzman và cộng sự năm 2019, giữ tập token nhỏ nhất có tổng xác suất đạt p. Ví dụ với từ vựng gồm năm token trong PyTorch cho thấy cả hai tác động:
import torch
# Next-token logits over a five-word vocabulary after the prompt "I took the"
vocab = ["bus", "train", "car", "stairs", "banana"]
logits = torch.tensor([3.0, 2.4, 1.8, 0.6, -2.0])
# Temperature divides the logits: low values sharpen the distribution, high values flatten it
for temperature in [0.5, 1.0, 1.5]:
probs = torch.softmax(logits / temperature, dim=-1)
print(f"T={temperature}:", ", ".join(f"{w} {p:.2f}" for w, p in zip(vocab, probs)))
# Top-p (nucleus) sampling keeps the smallest set of tokens whose probabilities reach p
probs, order = torch.softmax(logits, dim=-1).sort(descending=True)
keep = probs.cumsum(dim=-1) - probs < 0.9
print("Top-p 0.9 keeps:", [vocab[i] for i in order[keep]])
# Sample from the renormalized nucleus
torch.manual_seed(0)
picks = torch.multinomial(probs[keep] / probs[keep].sum(), num_samples=10, replacement=True)
print("Samples:", [vocab[order[i]] for i in picks])Ở temperature 0.5, "bus" có xác suất 0.71; ở 1.5, xác suất giảm xuống 0.42 và "banana" tăng từ 0.00 lên 0.02. Top-p 0.9 giữ lại "bus," "train," và "car," với tổng xác suất 0.95, nên không thể lấy mẫu "stairs" và "banana"; mười lần lấy mẫu tạo ra sự kết hợp đa dạng của ba token còn lại. Các tùy chọn khác cũng tác động lên cùng logits: hình phạt lặp làm giảm điểm của những token đã dùng, còn giải mã có ràng buộc dùng mask để loại bỏ mọi token vi phạm grammar hoặc JSON schema; nhờ đó API đảm bảo đầu ra có cấu trúc. Giải mã suy đoán tăng tốc quá trình sinh bằng cách cho model nháp nhỏ đề xuất một số token để model lớn xác minh trong một lượt.
Sinh văn bản và các thuật ngữ liên quan#
- Mô hình hóa ngôn ngữ: Học xác suất của token tiếp theo, đây là mục tiêu huấn luyện giúp quá trình sinh có thể thực hiện được. Sinh văn bản là cách sử dụng model đó trong giai đoạn suy luận.
- Model chuỗi sang chuỗi: Model encoder-decoder tạo văn bản đầu ra từ một đầu vào riêng biệt, như trong dịch thuật. LLM chỉ có decoder xử lý cùng tác vụ bằng cách tiếp tục prompt.
- Model ngôn ngữ khuếch tán: Tạo toàn bộ đoạn văn bằng cách tinh chỉnh song song mọi vị trí qua nhiều bước khử nhiễu, thay vì tạo từng token một.
- Văn bản thành hình ảnh: Nhận văn bản đầu vào và tạo ra pixel.
Chất lượng và rủi ro#
Văn bản được tạo ra trôi chảy dù đúng hay sai, vì vậy ảo giác là rủi ro chính trong các tác vụ cần độ chính xác thực tế; sinh tăng cường truy xuất (RAG) giúp giảm rủi ro bằng cách đưa tài liệu nguồn vào prompt. Temperature thấp giúp câu trả lời nhất quán hơn, còn temperature cao tạo thêm sự đa dạng nhưng cũng tăng khả năng chọn phải token ít có khả năng và sai. Văn bản do máy viết cũng khó nhận diện, thúc đẩy các nghiên cứu về đóng dấu bản quyền AI. Trong bài báo về GPT-3 năm 2020, những người được yêu cầu phân biệt bài báo tin tức dài 200 từ do model 175 tỷ tham số viết với bài do người viết chỉ trả lời đúng 52% số lần.










