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

Quản lý token đặc biệt và đệm chuỗi (Special Tokens & Padding Mask)

Khi huấn luyện mô hình theo lô (mini-batch), các câu trong cùng một batch thường có độ dài khác nhau. Ta buộc phải đệm (<pad>) các câu ngắn cho bằng độ dài câu dài nhất hoặc max_le…

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

paddingattention-maskbatchingtokenizer

Kiến thức tiên quyết: word-level-frequency-threshold-tokenizer.

Nội dung đề bài

Mô tả bài toán

Khi huấn luyện mô hình theo lô (mini-batch), các câu trong cùng một batch thường có độ dài khác nhau. Ta buộc phải đệm (<pad>) các câu ngắn cho bằng độ dài câu dài nhất hoặc max_length, đồng thời tạo Attention Mask để ngăn mô hình chú ý đến các token đệm này.

Hãy viết hàm pad_batch(sequences: list[list[int]], pad_id: int = 0, max_length: int = None) -> tuple[np.ndarray, np.ndarray]:

  • sequences: danh sách B chuỗi token ID. Nếu rỗng, raise ValueError.
  • pad_id: ID của token <pad>.
  • max_length: độ dài cố định của batch.
  • Nếu max_length is None: lấy độ dài của chuỗi dài nhất trong batch: L = maxi len(si).
  • Nếu max_length được cung cấp:
  • Nếu có chuỗi nào dài hơn max_length, cắt ngắn (truncate) chuỗi đó về đúng max_length token đầu tiên.
  • Đệm các chuỗi ngắn hơn về đúng max_length.
  • Trả về tuple (padded_sequences, attention_mask):
  • padded_sequences: mảng 2D int64 shape (B, L).
  • attention_mask: mảng 2D int64 shape (B, L) chứa giá trị 1 cho token thật và 0 cho pad token.

Input

  • Hàm pad_batch(sequences, pad_id, max_length): 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 pad_batch: Trả về kết quả kiểu tuple[np.ndarray, 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

batch = [[10, 20, 30], [40, 50]]
padded, mask = pad_batch(batch, pad_id=0)

Output

([[10, 20, 30],
 [40, 50,  0]], [[1, 1, 1],
 [1, 1, 0]])

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

batch = [[1, 2, 3, 4, 5]]
padded, mask = pad_batch(batch, pad_id=0, max_length=3)

Output

([[1, 2, 3]], [[1, 1, 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ế.

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.