AI Đọc Từng Mảnh, Không Đọc Nguyên Từ
Mô hình không nhìn từng chữ cái. Trước khi xử lý, nó chia câu bạn gõ thành những mảnh nhỏ, gọi là token.
Có một điều cần nói rõ ngay từ đầu, vì nó là nền tảng cho mọi phần còn lại của cuốn sách: mô hình ngôn ngữ không đọc giống như con người. Khi bạn đọc câu này, mắt bạn nhìn từng chữ cái, rồi não ghép chúng thành từ và hiểu nghĩa. Còn mô hình thì không thấy văn bản theo cách đó. Trước khi những gì bạn gõ đến được mô hình, các chữ cái đã được chia và gói lại thành những mảnh lớn hơn, gọi là token. Từ lúc đó trở đi, mô hình chỉ làm việc với các token này. Đây từng là một ví dụ vui rất nổi tiếng: bạn hỏi chatbot trong từ tiếng Anh strawberry có bao nhiêu chữ "r", rồi thấy nó trả lời sai. Các mô hình mạnh hiện nay thường đã được huấn luyện tốt hơn nên có thể trả lời đúng câu hỏi đó. Tuy vậy, cách hoạt động bên dưới vẫn không thay đổi. Khi hiểu được cơ chế này, bạn sẽ thấy nó giải thích rất nhiều điều quan trọng: vì sao bạn phải trả chi phí theo lượng văn bản, vì sao mô hình chỉ nhớ được một lượng chữ nhất định trong cùng một lúc, và vì sao cùng một nhiệm vụ có thể rẻ hơn khi làm bằng tiếng Anh so với tiếng Việt.
Trước khi AI đọc, câu chữ đã bị cắt thành mảnh nhỏ
Hãy tưởng tượng có người đưa cho bạn một câu, nhưng câu đó đã được cắt thành nhiều miếng nhỏ như LEGO trước khi bạn nhìn thấy. Một số miếng là cả một từ quen thuộc, như nhà hoặc ăn. Những từ dài hơn hoặc ít gặp hơn thì thường bị chia thành vài phần nhỏ. Ví dụ, từ tokenization có thể được tách thành token và ization. Bạn có thể ghép các miếng đó lại để hiểu nghĩa của câu. Nhưng hãy chú ý: bạn không nhận được từng chữ cái riêng lẻ. Các chữ cái đã được gộp sẵn bên trong từng miếng ghép trước khi câu được đưa tới bạn.
Những mẩu chữ đó có tên riêng. Chúng được gọi là token. Một token là một phần nhỏ của văn bản. Nó có thể là cả một từ, một phần của một từ, hoặc chỉ là một dấu câu. Trước khi mô hình đọc những gì bạn gõ, văn bản đã được chia thành các token như vậy. Mô hình chỉ nhận được chuỗi token đó, chứ không nhận văn bản theo cách con người nhìn thấy.
Các token này cũng không được tạo riêng cho từng câu bạn viết. Chúng được lấy từ một bộ từ vựng cố định. Bộ từ vựng này là danh sách những mẩu chữ mà mô hình được phép dùng. Mô hình đã học danh sách đó từ trước bằng cách xử lý một lượng văn bản rất lớn. Khi bạn nhập câu vào, hệ thống sẽ tách câu đó thành những mẩu có sẵn trong danh sách. Bạn có thể cảm thấy như mình đang gõ từ ngữ cho một thứ biết đọc từ ngữ. Nhưng thật ra không phải vậy. Bạn đang đưa vào những mẩu đã được chuẩn bị sẵn cho một hệ thống vốn chỉ biết làm việc với các mẩu đó.
Những mảnh chữ đó được tạo ra như thế nào
Vậy cái hộc đựng những viên gạch ấy ở đâu ra, và vì sao nhà được một viên gạch riêng còn một từ dài hơn thì bị tách? Có một công thức phổ biến tên là Byte Pair Encoding, thường gọi tắt là BPE, và ý tưởng của nó đơn giản đến mức gần như buồn cười.1 BPE khởi đầu chỉ với những con chữ riêng lẻ. Rồi nó làm đúng một việc, lặp đi lặp lại: quét qua một núi văn bản, tìm cặp hàng xóm xuất hiện cùng nhau nhiều nhất, rồi dán cặp đó lại thành một mẩu mới. Có thể chữ t và h nằm sát nhau nhiều hơn mọi cặp khác, thế là th thành một viên gạch; lượt sau, th và e lại là hàng xóm phổ biến nhất, thế là the được dán thành một viên gạch của riêng nó. Tìm cặp hay đi cùng nhau nhất, dán lại, làm vậy hàng nghìn lần, và bạn nuôi lớn cả một bộ từ vựng từ những con chữ trần trụi ban đầu.
Điều này dẫn đến một hệ quả rất tự nhiên. Những từ được dùng thường xuyên sẽ sớm được ghép lại thành một khối, vì các phần của chúng xuất hiện cạnh nhau rất nhiều lần trong văn bản. Dần dần, chúng trở thành một đơn vị gọn gàng. Ngược lại, những từ hiếm hoặc quá dài không xuất hiện đủ nhiều để các phần của chúng được ghép thành một khối duy nhất. Vì vậy, khi gặp những từ này, hệ thống thường xử lý chúng như nhiều mảnh nhỏ. Không có ai quyết định từ nào quan trọng hơn từ nào. Mọi thứ chỉ dựa trên phép tính thống kê: những mảnh nào thường xuất hiện cạnh nhau nhất trong dữ liệu huấn luyện thì có nhiều khả năng được ghép lại với nhau. Hãy nhớ kỹ điều này, vì đây là nguyên lý quan trọng đứng sau những gì sẽ được giải thích tiếp trong chương này.
Điểm mù khi đếm chữ, và vì sao chọn đúng mô hình lại quan trọng
Vì các chữ cái bị giấu bên trong những "viên gạch" dữ liệu, mô hình không nhìn thấy rõ từng chữ cái trong một từ. Nó nhìn từ strawberry như vài mảnh nhỏ, chứ không thấy cả chuỗi chữ cái s, t, r, a, w, b, e, r, r, y. Trong nhiều năm, điều này khiến mô hình rất dễ trả lời sai khi được yêu cầu đếm chữ cái hoặc đánh vần ngược một từ. Điều thay đổi gần đây không phải là cách mô hình hoạt động, mà là các mô hình mạnh nhất đã được huấn luyện riêng để xử lý những nhiệm vụ như vậy. Chúng học cách tự đánh vần một từ trong đầu trước khi trả lời. Điểm yếu này vẫn chưa biến mất. Các mô hình tốt nhất chỉ học được cách tránh nó, còn các mô hình yếu hơn và rẻ hơn thì vẫn thường mắc lỗi.
Bạn có thể tự kiểm chứng điều đó bằng một câu lệnh đơn giản. Hãy lấy một họ rất quen thuộc với người Việt: "Nguyễn". Thử yêu cầu mô hình đánh vần họ này theo thứ tự ngược lại, từng chữ một, rồi quan sát xem điều gì xảy ra.
"Từ 'Nguyễn' được đánh vần ngược là: n – ê – y – ễ – u – N."
n, ễ, y, u, g, N
Cùng một câu lệnh và cùng một họ, nhưng hai mô hình cho ra hai kết quả trái ngược. Khác biệt duy nhất là mô hình nào trả lời. Mô hình yếu hơn còn bịa thêm chữ "ê" không hề có trong từ, rồi bỏ mất chữ "g". Đây là bài học thực tế đầu tiên về việc tách token: với những việc cần đúng từng chữ, mô hình bạn chọn cũng quyết định một phần câu trả lời. Mô hình mạnh thường xử lý được. Mô hình nhỏ hơn, nhanh hơn, rẻ hơn thì vẫn dễ loay hoay với những chữ mà nó không được nhìn thấy trực tiếp.
Vì sao bạn bị tính tiền theo từng token
Đây là lúc các "viên gạch" bắt đầu khiến bạn tốn tiền. Khi dùng các mô hình này qua một ứng dụng hoặc dịch vụ trả phí, bạn thường bị tính tiền theo token, không phải theo số từ, số câu hay số câu hỏi. Với tiếng Anh, có thể ước tính nhanh rằng một token dài khoảng bốn ký tự, nên một trăm token tương đương khoảng bảy mươi lăm từ.2 Mọi thứ đều được tính: câu lệnh bạn nhập, câu trả lời của mô hình, và cả nội dung đã trao đổi trước đó nếu cuộc trò chuyện kéo dài. Vì vậy, một câu lệnh dài dòng sẽ tốn tiền hơn một câu lệnh ngắn gọn. Tương tự, yêu cầu "tóm tắt báo cáo 40 trang này" sẽ tốn nhiều hơn yêu cầu "tóm tắt đoạn văn này". Nói ngắn gọn, bạn trả tiền cho từng token, ở cả phần bạn gửi vào và phần mô hình trả lời.
Vì sao tiếng Việt có thể tốn nhiều token hơn
Hãy ghép hai ý vừa nói lại với nhau: phần nào càng hiếm thì càng dễ bị tách thành nhiều token, và bạn phải trả tiền theo số token đó. Các bộ tách token được xây dựng chủ yếu từ dữ liệu tiếng Anh, nên nhiều từ tiếng Anh thường chỉ cần một token. Trong khi đó, cùng một ý bằng ngôn ngữ khác có thể bị tách thành nhiều token hơn. Ví dụ, với bộ tách token mà GPT-4o và GPT-5 đang dùng, câu "Cảm ơn bạn rất nhiều vì đã giúp đỡ" bị tách thành 12 token, còn câu tiếng Anh cùng nghĩa "Thank you very much for your help" chỉ có 7 token.3 Nghĩa là cùng một lời cảm ơn, nhưng bản tiếng Việt tốn nhiều token hơn hơn một nửa, trong khi chi phí lại được tính theo từng token. Các nhà nghiên cứu đã đo hiện tượng này trên 22 ngôn ngữ, trong đó có tiếng Việt. Họ thấy rằng người dùng nhiều ngôn ngữ không phải tiếng Anh thực chất đang phải trả phí cao hơn cho cùng một yêu cầu, đồng thời thường nhận kết quả kém hơn.4 Lý do rất đơn giản: chữ của họ bị biến thành nhiều token hơn. Cỗ máy không cố tình bất công. Nó chỉ đếm từng token theo cách đã được thiết kế, nhưng cách đếm đó gây bất lợi hơn cho những ngôn ngữ không phải là trung tâm khi xây dựng bộ từ vựng. Nếu bạn làm việc bằng tiếng Việt, đây là một khoản chi phí có thật và không cân xứng, chứ không phải chỉ là vài sai số nhỏ có thể bỏ qua.
Bộ nhớ của AI cũng được tính bằng token
Token còn quan trọng ở một điểm khác: mỗi mô hình chỉ có thể xử lý một lượng token nhất định tại cùng một thời điểm. Giới hạn này được đặt sẵn ngay từ đầu. Người ta gọi nó là cửa sổ ngữ cảnh, và nó được tính bằng token, không tính bằng số trang. Khi một cuộc trò chuyện quá dài, hoặc một tài liệu quá lớn so với giới hạn đó, mô hình không thể nhìn thấy toàn bộ nội dung cùng lúc. Phần nào không nằm trong cửa sổ ngữ cảnh thì mô hình không thể dùng để suy xét. Tuy vậy, có một điều nhiều người dễ hiểu lầm: ngay cả khi toàn bộ nội dung vẫn nằm trong giới hạn, vị trí của thông tin trong văn bản vẫn rất quan trọng. Phần dễ bị mô hình bỏ sót nhất thường không phải là phần đầu, mà là phần ở giữa. Mô hình thường nhớ phần đầu và phần cuối tốt hơn, còn thông tin nằm kẹt ở đoạn giữa thì dễ bị lướt qua.5 Chuyện này sẽ được nói kỹ hơn ở một chương sau, vì nó ảnh hưởng đến nhiều hành vi của mô hình hơn bạn tưởng. Nhưng điều cần nhớ ở đây là: đơn vị tạo nên dạng "bộ nhớ" đó chính là token, thứ mà chương này đã nói đến từ đầu.
Cái bẫy: AI không đọc giống con người
Nhiều người dễ nghĩ rằng khi một chatbot viết được câu chữ trôi chảy, mô hình đó cũng đọc giống con người, tức là đọc từng chữ, từng từ. Họ cũng có thể nghĩ rằng nếu mô hình đếm đúng số chữ cái trong một từ, thì nó đã thật sự "nhìn thấy" các chữ cái đó. Nhưng thực ra không phải vậy. Văn bản bạn nhập vào vẫn được đưa đến mô hình dưới dạng những mảnh nhỏ đã được tách sẵn, mỗi mảnh có thể gồm nhiều chữ cái. Một mô hình mạnh chỉ là đã được huấn luyện đủ tốt để đoán lại các chữ cái khi nhiệm vụ yêu cầu. Điều này rất quan trọng, vì nếu gặp thứ mà quá trình huấn luyện không dự đoán trước, chẳng hạn một chuỗi ký tự lạ, một hệ chữ ít gặp, hoặc khi bạn dùng một mô hình rẻ hơn, cách đọc theo từng mảnh này sẽ lộ rõ hơn.
Hãy mở hai chatbot khác nhau. Tốt nhất là chọn một mô hình mạnh và một mô hình nhỏ, nhanh, dạng "mini". Sau đó, giao cho cả hai cùng một số việc cần đếm thật chính xác từng chữ cái, ví dụ: "Trong từ strawberry có mấy chữ r?" và "Trong cụm từ ngoằn ngoèo có bao nhiêu chữ n?". Hãy xem hai chatbot có trả lời giống nhau không. Nếu một mô hình trả lời đúng và mượt, còn mô hình kia trả lời sai hoặc lúng túng, bạn sẽ thấy rõ điểm yếu của chúng. Từ đó, bạn cũng học được điều có thể dùng ngay: khi cần độ chính xác đến từng con chữ, bạn nên chọn công cụ nào đáng tin hơn. Bạn cũng có thể thử thêm một việc thú vị khác: dán một câu tiếng Việt vào công cụ đếm token của một nhà cung cấp, rồi dán bản dịch tiếng Anh của cùng câu đó vào. Sau đó, hãy so sánh số token và chi phí để thấy chúng khác nhau như thế nào dù cùng diễn đạt một ý nghĩa.
Vì sao token ảnh hưởng đến chi phí, bộ nhớ và độ chính xác
Cách AI đọc văn bản bằng cách chia nhỏ thành từng mảnh rất dễ bị xem là chuyện nhỏ, nhất là khi lỗi đếm chữ nổi tiếng giờ hầu như đã được xử lý. Nhưng các "mảnh" này chưa bao giờ biến mất. Chúng vẫn âm thầm ảnh hưởng đến cách bạn dùng AI: bạn phải trả bao nhiêu tiền theo số token nhập vào và xuất ra, mô hình có thể nhìn thấy bao nhiêu chữ cùng lúc, ngôn ngữ của bạn có được xử lý công bằng hay không, và khi nào bạn nên chọn một mô hình phù hợp cho những việc cần chính xác đến từng ký tự. Không có gì trong chuyện này là "phép màu". Tất cả đều là kết quả trực tiếp và có thể đoán trước của một hệ thống đọc văn bản bằng những mảnh đã được cắt sẵn. Và chính những mảnh đó cũng là thứ mà mô hình dành cả quá trình hoạt động để đoán, từng mảnh một. Đó sẽ là nội dung của chương tiếp theo.
Nguồn
- 1.Rico Sennrich, Barry Haddow, và Alexandra Birch, 'Neural Machine Translation of Rare Words with Subword Units,' Proceedings of ACL 2016 (https://aclanthology.org/P16-1162/; arXiv 1508.07909, 2015). Bài báo điều chỉnh thuật toán nén byte pair encoding cho việc tách từ: khởi đầu từ một bộ từ vựng gồm các ký tự riêng lẻ, nó liên tục tìm cặp ký hiệu kề nhau xuất hiện nhiều nhất rồi gộp thành một ký hiệu mới, nuôi lớn một bộ từ vựng con sao cho từ thông dụng thành đơn vị trọn vẹn còn từ hiếm vẫn bị tách thành nhiều mảnh.
- 2.'What are tokens and how to count them?' OpenAI Help Center (https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them). Quy tắc nhẩm của OpenAI cho văn bản tiếng Anh là một token xấp xỉ bốn ký tự, tương đương khoảng ba phần tư của một từ, nên chừng 100 token ứng với khoảng 75 từ.
- 3.Số token đo bằng bộ tách o200k_base (bộ mà các mô hình dòng GPT-4o và GPT-5 dùng) qua thư viện tiktoken của OpenAI (https://github.com/openai/tiktoken). Bạn có thể tự kiểm lại con số này trong bất kỳ công cụ đếm token nào.
- 4.Orevaoghene Ahia và cộng sự, 'Do All Languages Cost the Same? Tokenization in the Era of Commercial Language Models,' Proceedings of EMNLP 2023 (https://aclanthology.org/2023.emnlp-main.614/). Trên 22 ngôn ngữ đa dạng về loại hình (trong đó có tiếng Việt), nhóm tác giả thấy rằng vì văn bản không phải tiếng Anh bị tách thành nhiều token hơn, "speakers of a large number of the supported languages are overcharged while obtaining poorer results" (người nói phần lớn các ngôn ngữ được hỗ trợ bị tính phí cao hơn trong khi nhận về kết quả kém hơn), một chênh lệch càng nặng nề hơn do những người này thường sống ở nơi mà giá dùng các API vốn đã đắt đỏ hơn so với thu nhập.
- 5.Nelson F. Liu và cộng sự, 'Lost in the Middle: How Language Models Use Long Contexts,' Transactions of the Association for Computational Linguistics 12 (2024), 157–173 (https://aclanthology.org/2024.tacl-1.9/; arXiv 2307.03172). Nhóm tác giả thấy hiệu năng "often highest when relevant information occurs at the beginning or end of the input context, and significantly degrades when models must access relevant information in the middle of long contexts" (thường cao nhất khi thông tin liên quan nằm ở đầu hoặc cuối ngữ cảnh, và giảm đi đáng kể khi mô hình phải truy xuất thông tin nằm ở khúc giữa của những ngữ cảnh dài).