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>.
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: 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_mergeslần để xây dựng bảng quy tắc gộpmerges: list[tuple[str, str]]. - Quá trình mã hóa (Tokenization):
- Áp dụng các quy tắc trong
mergestheo đú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]:
passtrain(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_mergeslầ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ã
wordthành các token theo đúng các quy tắcmergesđã 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.
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.
