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

Thuật toán Phân đoạn Từ BPE (Byte-Pair Encoding) từ Gốc

1. Ban đầu, mỗi từ được biểu diễn dưới dạng danh sách các ký tự đơn lẻ kết thúc bằng ký tự đặc biệt </w>.

AINâng cao45 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ủ đề

nlptokenizationbpesubwordgptvocabulary

Kiến thức tiên quyết: python-tuple-hashing.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu cách thức hoạt động của Tokenizer Subword (nền tảng của GPT-2/3/4, LLaMA):
  • Ban đầu, mỗi từ được biểu diễn dưới dạng danh sách các ký tự đơn lẻ kết thúc bằng ký tự đặc biệt </w>.
  • Tại mỗi bước lặp, đếm tần suất xuất hiện của tất cả các cặp ký tự liền kề (bigram).
  • Chọn cặp có tần suất cao nhất để gộp (merge) thành một token mới.
  • Lặp lại quá trình này num_merges lần để xây dựng bảng quy tắc gộp merges: list[tuple[str, str]].
  • Quá trình mã hóa (Tokenization):
  • Áp dụng các quy tắc trong merges theo đúng thứ tự ưu tiên đã học lên từ mới để phân rã thành các subword.

Yêu cầu

Xây dựng lớp BPETokenizer:

class BPETokenizer:
    def __init__(self, num_merges: int = 10):
        pass

    def train(self, corpus: list[str]) -> list[tuple[str, str]]:
        pass

    def tokenize_word(self, word: str) -> list[str]:
        pass
  • train(corpus):
  • Tách văn bản thành các từ bằng khoảng trắng.
  • Mỗi từ được tách ký tự và gắn thêm '</w>' vào cuối (ví dụ: "low" -> ('l', 'o', 'w</w>')).
  • Thực hiện num_merges lần gộp cặp có tần suất lớn nhất. Nếu hòa tần suất (tie), chọn cặp nhỏ hơn theo thứ tự từ điển (lexicographical order) của tuple (p1, p2).
  • Trả về danh sách các cặp đã gộp merges.
  • tokenize_word(word):
  • Phân rã word thành các token theo đúng các quy tắc merges đã học.

Input

  • Lớp BPETokenizer(num_merges): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.

Output

  • Các phương thức của BPETokenizer: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.

Ràng buộc

  • Thời gian chạy tối đa: 3000ms.
  • 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

corpus = ['low low low low low lower lower newest newest newest newest newest newest widest widest widest']
tokenizer = BPETokenizer(num_merges=5)
merges = tokenizer.train(corpus)
tokens_low = tokenizer.tokenize_word('low')

Output

['lo', 'w</w>']

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

corpus = ['hug hugs hugging hugger']
tokenizer = BPETokenizer(num_merges=3)
tokenizer.train(corpus)
tokens = tokenizer.tokenize_word('hugged')

Output

['hugg', 'e', 'd</w>']

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.