BPE (Byte Pair Encoding) Là Gì?
BPE, hay Byte Pair Encoding, là một phương pháp tách từ (tokenization) trong NLP. Ban đầu nó được tạo ra để nén dữ liệu (data compression) năm 1994, nhưng sau đó được Google áp dụng vào NLP năm 2015. Hiện tại, BPE là tokenization chính trong gần hết các LLM lớn như GPT, LLaMA, hay Claude.
Nói đơn giản: BPE bắt đầu bằng cách cắt văn bản thành từng ký tự riêng lẻ, sau đó tìm cặp ký tự xuất hiện nhiều nhất và gộp chúng lại. Quá trình này lặp đi lặp lại cho đến khi đạt đủ số lượng token cần thiết.
Kết quả là model có thể xử lý được cả từ thông dụng lẫn từ hiếm, mà không cần một bộ từ điển khổng lồ chứa mọi ngôn ngữ.
BPE Hoạt Động Như Thế Nào?
Quá trình BPE gồm 3 bước chính, khá dễ hiểu:
Bước 1: Cắt toàn bộ văn bản thành từng ký tự riêng lẻ. Ví dụ “hello” thành “h”, “e”, “l”, “l”, “o”. Ở giai đoạn này, mỗi token chỉ là 1 ký tự.
Bước 2: Đếm xem cặp ký tự nào đứng cạnh nhau nhiều nhất. Ví dụ nếu “h” + “e” xuất hiện cùng nhau 1000 lần, còn “e” + “l” chỉ 500 lần, thì chọn “h” + “e”.
Bước 3: Gộp cặp đó thành 1 token mới. “h” + “e” thành “he”. Cập nhật lại toàn bộ văn bản, rồi quay lại Bước 2. Lặp lại cho đến khi bộ từ vựng vừa đủ dùng.
Mỗi lần gộp, BPE tạo ra một token mới dài hơn. Sau cùng, model sẽ có cả token đơn lẻ (ký tự), token ngắn (“he”, “th”, “ing”), và token dài (“the”, “tion”, “hello”).
Ví Dụ Thực Tế Về BPE
Giả sử mình có đoạn văn: “low low low low low lower lower newest newest newest newest widest widest”.
BPE sẽ chạy như sau:
- Vòng 1: Cặp “e” + “s” xuất hiện nhiều nhất (trong “newest”, “widest”). Gộp thành “es”.
- Vòng 2: Cặp “es” + “t” xuất hiện nhiều. Gộp thành “est”.
- Vòng 3: Cặp “l” + “o” xuất hiện nhiều (trong “low”, “lower”). Gộp thành “lo”.
- Vòng 4: Cặp “lo” + “w” thành “low”.
Sau vài vòng, model có thể biểu diễn “lowest” bằng 2 token: “low” + “est”, thay vì 6 ký tự riêng lẻ. Đây là sức mạnh của BPE — nó học được cách nhận diện các đơn vị có nghĩa trong văn bản.
Tại Sao Các Model AI Lại Dùng BPE?
Trước BPE, NLP thường dùng 2 cách: word-level (tách theo từ) và character-level (tách theo ký tự). Cả hai đều có vấn đề.
Word-level: Tiếng Việt có hàng trăm nghìn từ, tiếng Anh cũng vài trăm nghìn. Bộ từ điển quá lớn, và gặp từ mới (out-of-vocabulary) là bó tay. Ví dụ “ChatGPTing” không có trong từ điển thì model chẳng biết làm gì.
Character-level: Sequence quá dài. Câu “Tôi yêu AI” thành 12 token thay vì 4. Model phải học mối quan hệ giữa các ký tự, khó hơn và chậm hơn rất nhiều.
BPE giải quyết cả 2 vấn đề. Từ thông dụng như “the” hoặc “tion” thành 1 token. Từ hiếm như “galvanized” thành “gal” + “van” + “ized”. Không bao giờ gặp out-of-vocabulary, mà sequence vẫn ngắn hơn character-level rất nhiều.
BPE Khác Gì So Với Các Phương Pháp Khác?
Ngoài BPE, còn có WordPiece (dùng cho BERT) và SentencePiece (dùng cho T5, LLaMA). Điểm khác biệt chính nằm ở cách chọn cặp để gộp:
BPE: Gộp cặp xuất hiện nhiều nhất (dựa trên tần suất). Đơn giản, hiệu quả. Dùng cho GPT-2, GPT-3, GPT-4.
WordPiece: Tương tự BPE nhưng chọn cặp dựa trên likelihood thay vì tần suất thuần. Dùng cho BERT.
SentencePiece: Xử lý ngôn ngữ không có dấu cách (tiếng Trung, Nhật, Thái). Dùng cho LLaMA, T5.
Thực ra SentencePiece cũng là một variant của BPE, chỉ thêm khác biệt xử lý dấu cách và encoding. Bản chất vẫn là gộp cặp token liên tục.
Byte-Level BPE Là Gì?
GPT-2 bắt đầu sử dụng một biến thể gọi là Byte-Level BPE. Thay vì làm việc với ký tự Unicode (hơn 100,000 ký tự), nó làm việc với 256 bytes của UTF-8 encoding.
Lợi ích: bất kỳ văn bản nào, bất kỳ ngôn ngữ nào, bất kỳ emoji nào đều có thể biểu diễn bằng 256 bytes. Không bao giờ gặp ký tự không xác định. Đây là lý do GPT-4 có thể đọc cả tiếng Việt, tiếng Nhật, emoji, và code trong cùng một model.
Mình thấy đây là một quyết định thiết kế rất thông minh. Nó loại bỏ hoàn toàn vấn đề out-of-vocabulary ở mức độ byte. Mọi thứ đều có thể encode.
Số Token BPE Ảnh Hưởng Gì Đến Hiệu Suất?
Số token trong bộ từ vựng (vocabulary size) là một tradeoff quan trọng:
Bộ từ vừa (10,000-50,000): Sequence dài hơn, nhưng model nhỏ hơn, train nhanh hơn. Phù hợp model nhỏ và trung bình.
Bộ từ lớn (100,000+): Sequence ngắn hơn, model hiểu ngôn ngữ tốt hơn, nhưng tăng kích thước embedding layer đáng kể. GPT-4 dùng khoảng 100,000 tokens.
Với tiếng Việt, BPE có một nhược điểm đáng chú ý: vì tiếng Việt có dấu, một từ như “không” thành “k”, “h”, “ô”, “n”, “g” rồi lại gộp. Kết quả là tiếng Việt thường tốn nhiều token hơn tiếng Anh cho cùng một câu. Đây là một trong những lý do các model AI hiểu tiếng Anh tốt hơn tiếng Việt, và cũng là lý do API cost cho tiếng Việt cao hơn.
BPE Trong Các Model AI Nổi Tiếng
- GPT-2, GPT-3, GPT-4 (OpenAI): Byte-Level BPE, khoảng 50,000-100,000 tokens.
- LLaMA (Meta): SentencePiece BPE, 32,000 tokens.
- Claude (Anthropic): BPE variant, số lượng token tương tự.
- Gemini (Google): SentencePiece, lên đến 256,000 tokens ở Gemini 3.5 Pro.
Đa số các LLM hiện nay đều dùng BPE hoặc variant của nó. Nói cách khác, mỗi lần bạn chat với AI, đoạn văn của bạn đều đi qua BPE tokenizer trước khi model hiểu được.
Lời Kết
BPE là cầu nối giữa text mà người đọc và số mà máy tính hiểu. Nó không phải là thứ gì cao siêu, nhưng không có nó, các LLM sẽ không thể xử lý ngôn ngữ tự nhiên như cách chúng đang làm hiện nay.
Nếu bạn đang tìm hiểu về AI, hiểu BPE giúp bạn giải thích được tại sao cùng một câu, tiếng Anh lại rẻ hơn tiếng Việt trên API cost. Và cũng hiểu được tại sao một số model hiểu tiếng Anh tốt hơn nhiều so với các ngôn ngữ khác — tất cả nằm ở cách token hóa.
