Nucleus Sampling
Lấy mẫu top-p (nucleus) chọn từng token từ tập nhỏ nhất có tổng xác suất đạt p, nhờ đó tập ứng viên thay đổi theo độ tin cậy của model, khác với top-k.
Lấy mẫu nucleus, còn gọi là lấy mẫu top-p, là phương pháp giải mã chọn mỗi token tiếp theo từ tập ứng viên nhỏ nhất có tổng xác suất đạt ngưỡng p, rồi lấy mẫu từ tập đó. Ari Holtzman cùng các đồng nghiệp tại Đại học Washington và Allen Institute for AI giới thiệu phương pháp này năm 2019 trong bài báo Trường hợp kỳ lạ của sự suy thoái văn bản thần kinh. Nghiên cứu với GPT-2 Large cho thấy giải mã tham lam và tìm kiếm chùm khiến model ngôn ngữ rơi vào các vòng lặp đơn điệu, lặp lại, trong khi lấy mẫu từ toàn bộ phân phối dẫn đến văn bản thiếu mạch lạc; việc cắt bỏ phần đuôi không đáng tin cậy của phân phối tạo ra văn bản có perplexity và độ đa dạng gần với văn phong con người nhất. Top-p hiện là thiết lập tiêu chuẩn trong các API tạo sinh văn bản của hầu hết mọi mô hình ngôn ngữ lớn.
Cách chọn nucleus#
Ở mỗi bước, model ngôn ngữ chấm điểm mọi token trong từ vựng của nó, rồi softmax chuyển các điểm số đó thành xác suất. Sau đó, lấy mẫu nucleus sắp xếp token từ khả năng cao nhất đến thấp nhất, cộng dồn xác suất theo thứ tự cho đến khi tổng đạt p, loại bỏ mọi token ngoài tập đó, chuẩn hóa lại các token còn lại để tổng bằng một, rồi lấy mẫu một token.
Xét bốn ứng viên có xác suất 0,50, 0,25, 0,15 và 0,10, đồng thời đặt p bằng 0,8. Hai ứng viên đầu có tổng xác suất 0,75, chưa đạt ngưỡng, nên ứng viên thứ ba được thêm vào và nucleus bao phủ xác suất 0,90. Token thứ tư bị loại; ba token còn lại được chọn với xác suất lần lượt xấp xỉ 0,56, 0,28 và 0,17 sau khi chuẩn hóa lại.
Đặc điểm xác định của phương pháp này là nucleus tự điều chỉnh kích thước ở mỗi bước. Sau cụm "Thủ đô của Pháp là", một token chiếm gần như toàn bộ xác suất và nucleus thu nhỏ còn một từ. Ở đầu một câu chuyện, xác suất phân tán trên hàng trăm từ hợp lý, khiến nucleus mở rộng để bao gồm những từ đó. Một số lượng ứng viên cố định không thể thích ứng theo cách này.
Quy trình tương tự trong PyTorch, cho một bước giải mã trên từ vựng gồm sáu token:
import torch
# # Xác suất token tiếp theo cho bộ từ vựng gồm 6 token
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# # Sắp xếp, rồi giữ các token cho đến khi tổng tích lũy đạt top_p
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # # token vượt ngưỡng top_p vẫn được giữ lại
# # Chuẩn hóa lại nucleus và lấy mẫu id token tiếp theo
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())Đầu ra liệt kê nucleus gồm các token có ID 1, 3 và 5, chiếm tổng cộng 0,80 xác suất, sau đó là ID được lấy mẫu. Các token 0, 2 và 4 không thể được chọn ở bước này; chạy lại script sẽ chọn một trong ba token còn lại theo tỷ lệ xác suất của chúng.
Top-p so với giải mã greedy, top-k và temperature#
- Giải mã greedy luôn chọn token có xác suất cao nhất. Phương pháp này mang tính xác định và hiệu quả với câu trả lời thực tế ngắn, nhưng đầu ra dài thường có xu hướng lặp vòng.
- Lấy mẫu top-k giữ lại một số lượng ứng viên cố định. Khi k được đặt bằng 50, ngay cả ở bước có độ tin cậy cao, model vẫn lấy mẫu trong số 50 token, bao gồm cả những lựa chọn vô nghĩa; trong khi ở bước không chắc chắn, các lựa chọn hợp lý có thể bị loại. Top-p thay số lượng cố định bằng một tỷ lệ xác suất cố định.
- Temperature chia điểm số của model trước khi áp dụng softmax. Giá trị dưới 1 làm phân phối tập trung hơn vào các lựa chọn hàng đầu, còn giá trị trên 1 làm phân phối dàn trải hơn. Vì top-p được áp dụng sau temperature, tăng temperature cũng làm nucleus rộng hơn.
- Lấy mẫu min-p giữ lại mọi token có xác suất ít nhất bằng một tỷ lệ được thiết lập so với xác suất của token đứng đầu, vì vậy ngưỡng cắt cũng phản ánh độ tin cậy của model. Hugging Face Transformers, vLLM và llama.cpp cung cấp phương pháp này cùng với top-p.
Vì temperature và top-p đều kiểm soát tính ngẫu nhiên, lời khuyên thông thường là điều chỉnh một trong hai thay vì điều chỉnh cả hai cùng lúc. Nhiều engine suy luận cũng cho phép dùng top-k và top-p đồng thời, trong đó top-k đặt giới hạn cứng cho số lượng ứng viên.
Chọn giá trị top-p#
Top-p bằng 1.0 sẽ tắt bộ lọc; giá trị mặc định thường nằm trong khoảng 0.9 đến 1.0. Top-p chỉ định hình lại xác suất vốn có của model, vì vậy độ chính xác thực tế phụ thuộc vào việc cung cấp ngữ cảnh nền cho prompt, chẳng hạn bằng tạo sinh tăng cường truy xuất, phương pháp giúp giảm ảo giác bằng cách cung cấp cho model các dữ kiện cần thiết. Giá trị cao hơn tăng tính đa dạng cho hoạt động lên ý tưởng, lời thoại của chatbot và viết sáng tạo. Giá trị thấp hơn như 0.5 tạo đầu ra dễ dự đoán và lặp lại hơn, phù hợp với trích xuất dữ liệu, prompt phân loại và mã; giải mã có ràng buộc còn đi xa hơn bằng cách chặn mọi token có thể phá vỡ định dạng bắt buộc.
Thiết lập tương tự cũng chi phối đầu ra ngôn ngữ trong các pipeline thị giác. Khi một phát hiện của Ultralytics YOLO26 kích hoạt mô tả cảnh từ model thị giác-ngôn ngữ, giao diện LLM của Ultralytics chuyển thẳng các đối số yêu cầu như top_p đến API của nhà cung cấp, vì vậy giá trị thấp như 0.5 giúp các mô tả về những khung hình tương tự có cách diễn đạt nhất quán.










