ai-212Đọc toàn bộ đề miễn phí

Kỹ thuật phạt lặp từ (Repetition Penalty) theo kiến trúc CTRL

Các mô hình ngôn ngữ tự hồi quy thường có xu hướng tự khuếch đại xác suất của các từ đã xuất hiện, dẫn đến vòng lặp vô nghĩa (như *"và anh ấy nói và anh ấy nói..."*).

AITrung bình30 phút

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ủ đề

repetition-penaltysamplingautoregressivectrl

Kiến thức tiên quyết: next-token-probability-distribution.

Nội dung đề bài

Mô tả bài toán

Các mô hình ngôn ngữ tự hồi quy thường có xu hướng tự khuếch đại xác suất của các từ đã xuất hiện, dẫn đến vòng lặp vô nghĩa (như *"và anh ấy nói và anh ấy nói..."*).

Kỹ thuật Repetition Penalty (Keskar et al., CTRL, 2019) phạt có hệ thống tất cả các token đã từng xuất hiện trong lịch sử ngữ cảnh generated_tokens: Cho hệ số phạt θ ≥ 1.0: Với mỗi token i ∈ set(generated_tokens): z'i = zi / θ & nếu zi > 0
zi · θ & nếu zi ≤ 0

Lưu ý: Vì zi ≤ 0 có giá trị âm, việc nhân với θ > 1.0 sẽ làm z'i càng âm hơn (nhỏ hơn nữa), đảm bảo trong cả hai trường hợp xác suất của token đã xuất hiện luôn bị hạ thấp!

Hãy viết hàm apply_repetition_penalty(logits: np.ndarray, generated_tokens: list[int], penalty: float = 1.2) -> np.ndarray:

  • Kiểm tra penalty >= 1.0. Nếu penalty < 1.0, raise ValueError.
  • logits: mảng 1D. Nếu không hợp lệ, raise ValueError.
  • Bỏ qua các token trong generated_tokens vượt quá kích thước từ điển (không nằm trong [0, len(logits) - 1]).
  • Trả về bản sao mảng logits đã áp dụng hệ số phạt.

Input

  • Hàm apply_repetition_penalty(logits, generated_tokens, 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_repetition_penalty: Trả về kết quả kiểu np.ndarray theo đú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([4.0, -2.0, 1.0])
penalized = apply_repetition_penalty(logits, generated_tokens=[0, 1], 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 = np.array([1.0, 2.0])
penalized = apply_repetition_penalty(logits, generated_tokens=[99, -5], penalty=1.5)

Output

[1., 2.]

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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.