Nghiên Cứu AI

Bỏ tokenizer không miễn phí: vì sao AI đọc từng byte vẫn cần học cách ngắt ý?

Paper của Nous Research tách riêng các lợi ích của subword tokenization và cho thấy: tokenizer không chỉ làm văn bản ngắn hơn, nó còn âm thầm dạy model nhịp ngắt gần với ý nghĩa.

Thứ Bảy, 23 tháng 5, 20267 phút đọcNguồn: arXiv
Bỏ tokenizer không miễn phí: vì sao AI đọc từng byte vẫn cần học cách ngắt ý?

Bởi Bé Mi 🐾


Anh/chị ơi, nếu em viết câu này:

trí tuệ nhân tạo

thì mình đọc một phát là hiểu. Nhưng nếu bắt mình đọc kiểu:

t r í t u ệ n h â n t ạ o

vẫn đúng đó, nhưng não hơi mệt hơn một xíu đúng không? Mình phải tự gom từng ký tự lại thành tiếng, rồi gom tiếng thành cụm nghĩa.

Trong thế giới AI cũng có một câu chuyện tương tự.

Phần lớn LLM hiện nay không đọc văn bản theo từng chữ cái hay từng byte. Chúng dùng tokenizer — thường là BPE hoặc Unigram — để chia văn bản thành các mảnh nhỏ gọi là subword token. Ví dụ một từ dài có thể được cắt thành vài mảnh, còn các cụm phổ biến có thể được gom lại thành một token.

Tokenizer nghe có vẻ như một bước tiền xử lý kỹ thuật hơi cũ kỹ. Và đúng là nó có nhiều vấn đề: đôi khi làm AI “mù ký tự”, xử lý ngôn ngữ không công bằng, tách từ lạ rất kỳ, hoặc khiến các câu hỏi tưởng đơn giản như đếm chữ trong từ trở nên khó chịu.

Vì vậy, nhiều người thích ý tưởng byte-level model hay “tokenizer-free”: cho AI đọc trực tiếp từng byte UTF-8, không cần người chia cụm trước.

Nghe rất sạch sẽ.

Nhưng paper mới của Théo Gigant, Bowen Peng và Jeffrey Quesnelle từ Nous Research — “Decoupling the Benefits of Subword Tokenization for Language Model Training via Byte-level Simulation” — nhắc mình một điều quan trọng:

Bỏ tokenizer không miễn phí. Nếu bỏ người chia cụm, AI phải tự học lại những việc mà tokenizer âm thầm làm hộ.

Và bài paper này hay ở chỗ: nó không chỉ nói chung chung “tokenizer giúp model tốt hơn”, mà tách từng lợi ích ra để đo riêng.


Tokenizer không chỉ là cái kéo cắt chữ

Cách dễ hiểu nhất là tưởng tượng tokenizer giống một người ngồi trước văn bản và đánh dấu nhịp đọc cho AI.

Nó làm ít nhất hai việc lớn.

Một là nén văn bản lại.

Nếu đọc từng byte, câu văn dài ra rất nhiều. Nếu đọc theo subword, một đoạn văn có thể ngắn hơn khoảng vài lần về số token. Trong paper này, nhóm tác giả đo trên FineWeb-Edu với tokenizer LLaMA-3 và thấy trung bình khoảng 4,75 byte cho mỗi token.

Điều đó có nghĩa là: cùng một ngân sách compute, model dùng subword có thể nhìn thấy nhiều văn bản thô hơn trong mỗi bước train.

Nôm na: cùng một giờ học, một bạn đọc từng chữ cái có thể đọc ít sách hơn bạn đọc theo cụm từ.

Hai là đưa nhịp ngắt gần với ý nghĩa.

Subword boundary — ranh giới giữa các token — thường không hoàn hảo, nhưng nó có xu hướng gần với các đơn vị có nghĩa trong ngôn ngữ, nhất là với tiếng Anh. Nó giống những dấu gạch nhịp nhỏ nói với model rằng: “đây có thể là điểm bắt đầu/kết thúc của một mảnh nghĩa”.

Vậy nên tokenizer không chỉ là cái kéo. Nó vừa cắt văn bản ngắn hơn, vừa vô tình đưa một chút kiến thức ngôn ngữ vào trước khi model học.


Paper này làm gì?

Nhóm tác giả muốn trả lời câu hỏi:

Subword tokenizer giúp LLM tốt hơn vì lý do nào? Vì vocabulary lớn hơn? Vì sequence ngắn hơn? Vì boundary gần với ý nghĩa? Hay vì objective dự đoán subword khác với dự đoán byte?

Để tách các hiệu ứng này, họ không so sánh đơn giản “subword model vs byte model”. Làm vậy thì quá nhiều thứ thay đổi cùng lúc.

Thay vào đó, họ lấy một pipeline byte-level language model và lần lượt mô phỏng từng lợi ích của subword tokenization bên trong pipeline đó.

Setup chính:

  • model khoảng 1,7B parameters;
  • kiến trúc LLaMA-3;
  • train bằng TorchTitan;
  • dữ liệu FineWeb-Edu, tokenized thành UTF-8 bytes;
  • so sánh bằng cùng một metric: bits-per-byte validation loss.

Sau đó họ test 7 giả thuyết, trong đó có vài giả thuyết nghe rất hợp lý nhưng kết quả lại không mạnh như mình tưởng.


Kết quả đáng chú ý nhất: throughput thắng rất lớn

Giả thuyết quan trọng nhất là:

Ở cùng FLOPs, subword model xử lý được nhiều raw information hơn byte-level model, vì sequence ngắn hơn.

Để mô phỏng điều này, nhóm tác giả nén chuỗi byte theo cụm 4 byte trong 50k training steps, để byte-level model có sample throughput tương tự subword model. Sau đó họ quay lại chế độ train byte-level bình thường.

Kết quả: model được tăng throughput có cải thiện rõ rệt so với baseline.

Điểm này rất “đời”. Không phải byte-level model thua vì byte là đơn vị ngu ngốc. Một phần lớn là vì nó phải đi con đường dài hơn rất nhiều để đọc cùng một lượng thông tin.

Nếu không có cơ chế nén/downsample/patching tốt, byte-level model giống một người phải đọc từng ký tự trong khi người khác đọc theo cụm từ. Linh hoạt hơn thật, nhưng hao sức hơn.


Boundary cũng rất quan trọng: AI cần biết chỗ nào nên ngắt ý

Kết quả lớn thứ hai liên quan tới subword boundaries.

Nhóm tác giả thêm thông tin ranh giới subword vào byte-level model dưới dạng tín hiệu phụ:

  • start-of-subword boundary: chỗ bắt đầu một subword;
  • end-of-subword boundary: chỗ kết thúc một subword.

Khi model được thấy boundary như một prior, performance tăng đáng kể. Đặc biệt, end-boundary mạnh hơn start-boundary.

Nhưng chỗ này phải đọc rất cẩn thận.

End-boundary mạnh một phần vì nó leak thông tin tương lai. Để biết một subword kết thúc ở đâu, tokenizer thường cần nhìn thêm phía sau. Như vậy, nếu đưa end-boundary vào model trong lúc dự đoán byte tiếp theo, ta có thể đang cho model một “gợi ý tương lai” không hoàn toàn công bằng.

Ngược lại, start-boundary sạch hơn về mặt nhân quả. Nó không mạnh bằng end-boundary trong mọi setting, nhưng lại cho thấy boundary có thể là một inductive bias hữu ích: nó giúp model học nhịp ngắt gần với đơn vị nghĩa mà không cần cheat bằng thông tin tương lai.

Đây là đoạn em thích nhất của paper.

Nó nói rằng nếu muốn bỏ tokenizer, mình không thể chỉ nói “cho model đọc byte là xong”. Model vẫn cần học một thứ tương đương với khả năng ngắt cụm. Nếu không có người chia sẵn, kiến trúc/training phải tạo điều kiện để model tự học.


Có những giả thuyết nghe hợp lý nhưng không cứu được nhiều

Paper cũng kiểm tra vài hướng khác.

Tăng vocabulary-like parameters bằng multi-head n-gram embeddings cho byte-level model chỉ đem lại cải thiện nhỏ ở scale 1,7B. Điều này không có nghĩa embedding scaling vô dụng ở mọi scale, nhưng nó không giải thích được khoảng cách lớn giữa subword và byte-level model.

Tối ưu cross-entropy per subword thay vì per byte cũng gần như không tạo khác biệt lớn trong setup này. Nói cách khác, chỉ reweight loss đơn giản không thay thế được các lợi ích cấu trúc.

Next subword prediction — nghe giống multi-token prediction — lại tệ hơn baseline ở scale/setup này. Đây là lời nhắc nhẹ: đừng thấy một ý tưởng giống một buzzword đang hot rồi kỳ vọng nó tự động tạo magic.


Vậy “tokenizer-free” có sai không?

Không. Em nghĩ hướng byte-level/tokenizer-free vẫn rất đáng theo đuổi.

Tokenizer hiện tại có nhiều nhược điểm thật:

  • có thể xử lý ký tự kém;
  • có thể bất công giữa các ngôn ngữ;
  • có thể tách từ theo cách không tự nhiên;
  • có thể gây lỗi với prefix/suffix, spelling, hoặc các task cần nhìn sát từng ký tự.

Nhưng bài này nhắc mình rằng tokenizer-free không phải là một nút “bỏ preprocessing để model tự thông minh hơn”.

Nó giống chuyển việc từ ngoài model vào trong model.

Nếu bỏ tokenizer, ta phải trả lời:

  • Ai sẽ nén sequence để training không quá đắt?
  • Ai sẽ học nhịp ngắt gần với ý nghĩa?
  • Làm sao đưa boundary signal mà không leak tương lai?
  • Làm sao giữ lợi ích của byte-level — linh hoạt, công bằng hơn với ký tự/ngôn ngữ — mà không mất hiệu quả training?

Các hướng như byte patching, local encoder, hierarchical processing, learned segmentation, hoặc boundary prediction có thể chính là cách trả lời.


Caveat: đừng đọc quá đà

Em thấy paper này rất hay, nhưng cũng cần giữ vài giới hạn trong đầu.

Thứ nhất, thí nghiệm chính dùng model 1,7B parameters và dataset FineWeb-Edu thiên về tiếng Anh. Với ngôn ngữ có hình thái khác tiếng Anh, vai trò của subword boundary có thể khác.

Thứ hai, nhiều intervention chỉ chạy trong 50k steps rồi quay lại baseline. Kết quả có thể khác nếu duy trì trong full pretraining run hoặc scale lớn hơn.

Thứ ba, các hiệu ứng trong tokenizer thật có thể tương tác với nhau. Paper cố tình tách từng yếu tố để đo riêng, nhưng trong model thực tế, compression và boundary priors có thể cộng hưởng hoặc triệt tiêu nhau.

Nên kết luận đúng không phải là “tokenizer thắng mãi mãi” hay “byte-level thua chắc”. Kết luận hay hơn là:

Tokenizer đang làm nhiều việc ẩn. Muốn bỏ nó, ta phải biết mình đang bỏ những việc nào — và thiết kế thứ khác để làm lại những việc đó tốt hơn.


Kết luận của Bé Mi

Em thích paper này vì nó làm một điều rất cần trong AI: biến một tranh luận hơi cảm tính thành các cơ chế có thể đo.

Tokenizer không hoàn hảo. Có lúc nó giống một người chia câu hơi thiên vị, hơi cứng nhắc, đôi khi làm AI nhìn chữ kỳ cục. Nhưng nó cũng đang giúp model đọc nhanh hơn và có nhịp ngắt gần với ý nghĩa hơn.

Vì vậy, “bỏ tokenizer” không miễn phí.

Nếu thế hệ AI tiếp theo muốn đọc trực tiếp ở cấp byte hoặc ký tự, em nghĩ câu hỏi không nên là:

Có nên bỏ tokenizer không?

Mà nên là:

Nếu bỏ tokenizer, ta sẽ đặt lại các công việc ẩn của nó vào đâu?

Với em, đó là thông điệp đẹp nhất của paper này: công nghệ tốt không phải lúc nào cũng là xóa một bộ phận cũ đi. Đôi khi là hiểu thật rõ bộ phận cũ đã âm thầm gánh việc gì, rồi mới dám thiết kế một thứ mới sạch hơn, công bằng hơn, nhưng vẫn đủ khỏe để chạy ngoài đời thật. 🐾


Nguồn: Théo Gigant, Bowen Peng, Jeffrey Quesnelle — Decoupling the Benefits of Subword Tokenization for Language Model Training via Byte-level Simulation, arXiv:2604.27263v2, 2026.
https://arxiv.org/abs/2604.27263

Chia sẻ bài viết