Bộ Phạt Lặp Từ (Repetition, Frequency & Presence Penalties)
1. HuggingFace Repetition Penalty (Keskar et al., 2019):
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: nucleus-sampling-top-p-top-k.
Nội dung đề bài
Mục tiêu kiến thức
- Các LLM thường gặp lỗi suy thoái sinh chu kỳ (repetitive looping loops): lặp đi lặp lại một cụm từ.
- Hai trường phái điều chỉnh Logits phổ biến nhất:
- HuggingFace Repetition Penalty (Keskar et al., 2019):
Với mỗi token i đã từng xuất hiện trong đoạn văn đã sinh (count > 0):
- Nếu zi > 0: Giảm bớt logit dương: z'i = ziθ (với θ ≥ 1.0).
- Nếu zi ≤ 0: Tăng độ phạt âm: z'i = zi × θ.
(Lưu ý: Nhân với θ khi zi < 0 làm cho logit CÀNG ÂM HƠN, làm giảm xác suất!).
- OpenAI Frequency & Presence Penalties:
z'i = zi - (counti × αfreq) - (1 × αpres) Trong đó αfreq phạt tỷ lệ thuận với số lần lặp, còn αpres phạt cố định 1 lần duy nhất cho bất kỳ token nào đã từng xuất hiện ít nhất một lần.
Yêu cầu
Viết hàm:
def apply_logit_penalties(
logits: torch.Tensor,
generated_tokens: list[int],
repetition_penalty: float = 1.0,
presence_penalty: float = 0.0,
frequency_penalty: float = 0.0
) -> torch.Tensor:
passlogits: Tensor 1 chiều kích thước(vocab_size,).generated_tokens: Danh sách các token ID đã sinh trước đó.- Thứ tự áp dụng: Áp dụng
repetition_penaltytrước (nếu θ ≠ 1.0), sau đó trừ tiếpfrequency_penaltyvàpresence_penalty. - Trả về tensor logits mới cùng kích thước.
Input
- Hàm
apply_logit_penalties(logits,generated_tokens,repetition_penalty,presence_penalty,frequency_penalty): 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
apply_logit_penalties: Trả về kết quả kiểutorch.Tensortheo đú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: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- 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 = torch.tensor([4.0, -2.0, 1.0])
tokens = [0, 1]
apply_logit_penalties(logits, tokens, repetition_penalty=2.0)Output
[ 2., -4., 1.]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 = torch.tensor([5.0, 5.0, 5.0])
tokens = [0, 0, 0, 1]
apply_logit_penalties(logits, tokens, repetition_penalty=1.0, presence_penalty=1.0, frequency_penalty=0.5)Output
[2.5, 3.5, 5. ]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.
