Cơ chế lấy mẫu hạt nhân Nucleus Sampling (Top-P Logits Masking)
Được đề xuất bởi Ari Holtzman et al. (2019), Nucleus (Top-P) Sampling khắc phục nhược điểm của Top-K khi phân phối xác suất thay đổi độ tập trung:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: top-k-filtering-logits-masking, stable-softmax-logits.
Nội dung đề bài
Mô tả bài toán
Được đề xuất bởi Ari Holtzman et al. (2019), Nucleus (Top-P) Sampling khắc phục nhược điểm của Top-K khi phân phối xác suất thay đổi độ tập trung:
- Trong một số ngữ cảnh dễ đoán, chỉ có 1 hoặc 2 từ có xác suất cao (> 95%), Top-K cố định K=50 sẽ lấy cả các từ rác.
- Trong ngữ cảnh sáng tạo, hàng trăm từ có thể có xác suất tương đương, Top-K sẽ cắt tỉa quá sớm.
Thuật toán Top-P:
- Tính xác suất Softmax: p = softmax(z).
- Sắp xếp các token theo thứ tự xác suất giảm dần.
- Tính xác suất tích lũy (Cumulative Probability): Ci = ∑j=1i p(j).
- Chọn tập nhỏ nhất các token sao cho tổng xác suất ≥ P (luôn giữ lại ít nhất 1 token có xác suất cao nhất ngay cả khi xác suất của nó > P).
- Gán -∞ cho tất cả các token nằm ngoài tập hạt nhân (nucleus).
Hãy viết hàm top_p_filtering(logits: np.ndarray, top_p: float = 0.9, filter_value: float = -float('inf')) -> np.ndarray:
logits: mảng 1D float64 kích thước (V,).top_p: số thực 0.0 < P ≤ 1.0.- Trả về mảng NumPy cùng kích thước với các token ngoài top-p bị gán bằng
filter_value.
Input
- Hàm
top_p_filtering(logits,top_p,filter_value): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
top_p_filtering: Trả về kết quả kiểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
logits = np.array([10.0, 0.0, 0.0, 0.0])
filtered = top_p_filtering(logits, top_p=0.9)Output
[ 10., -inf, -inf, -inf]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
logits = np.array([1.0, 1.0, 1.0, 1.0])
filtered = top_p_filtering(logits, top_p=0.6)
kept_count = np.sum(~np.isneginf(filtered))Output
np.int64(3)Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
