从「草莓」被切成五块乱码讲起:AI 眼里的字长什么样、为什么中文调 AI 更贵、以及那个人人都在说的解释其实只对了一半
2026-07-26
一句话:AI 读一句话的时候,看到的不是一个个字母或汉字,而是一块块被切好的「积木」。这解释了很多它犯的傻错,但不能解释全部——本文用可以自己跑一遍的实验,带你看清楚它到底看见了什么,顺便学会一件更值钱的事:怎么检验一个听起来很有道理的说法。
反幻觉声明:本文所有切词结果都是用 OpenAI 公开的分词工具
tiktoken在 2026 年 7 月 26 日实际跑出来的,你照着做会得到一模一样的结果。涉及多个模型的准确率对比来自公开实测记录,已注明出处与测试时间。技术原理部分标注了原始论文。本文不含任何未经核实的数字。
打开任何一个 AI 聊天工具,问它:
strawberry 这个词里有几个字母 r?
正确答案是 3 个(s-t-r-a-w-b-e-r-r-y)。
这个问题曾经是 AI 界最有名的笑话——很长一段时间里,一堆号称能考上名牌大学的 AI,会一脸认真地回答「2 个」。
一个能写代码、能解奥数题的东西,怎么会连数字母都数不明白?
要回答这个问题,得先知道一件很反直觉的事:
AI 根本没看见字母。
你输入的每一句话,在进入模型之前,都会先被一把「刀」切成一块块。这个过程叫 tokenization(分词,就是把文字切成小块),切出来的每一块叫一个 token(可以理解成「文字积木」)。
关键在于,这把刀不是按字母切的,也不是按字切的,而是按「哪些组合在训练文本里经常一起出现」来切。常见的词可能一整个是一块,生僻的词会被拆成好几块。
我用 OpenAI 公开的分词工具实际跑了一下 strawberry1:
它被切成了 st / raw /
berry 三块,在模型内部分别对应编号
302、1618、19772。
这就是问题所在:模型收到的是三个编号,不是十个字母。它要数 r,就得先在心里把每块积木重新拆回字母、再一个个数——而这件事,不是它天生会做的动作。
为什么要这么切? 这个办法叫 BPE(字节对编码),最早是 2015 年三位研究者 Sennrich、Haddow 和 Birch 为了解决机器翻译里的生僻词问题提出来的2。在那之前,翻译模型遇到没见过的词就直接抓瞎;把词拆成小块之后,再没见过的词也能用已知的碎片拼出来。这是个非常成功的发明——代价就是模型从此看不见字母了。
如果说英文只是被切得有点碎,那中文曾经的处境要惨得多。
同样是「草莓」两个字,用不同年代的刀切,结果天差地别:
cl100k_base,GPT-4
时代用的):切成 5
块,而且每一块都不是完整的汉字,是「半个字」的字节碎片——单独拿出来连屏幕都显示不出来,只能显示成方框或问号。o200k_base,GPT-4o 之后):切成
2 块,正好一个字一块。差别从哪来?取决于造这把刀的时候,有没有认真喂过中文。中文数据喂得少,汉字就分不到自己的位置,只能被拆成字节。
这件事直接关系到钱。调用 AI 是按 token 数收费的,切得越碎越贵。我实测了三组意思相同的中英文句子:
| 句子 | 旧刀(中/英) | 新刀(中/英) |
|---|---|---|
| 我今天吃了三个草莓 | 13 / 5 → 中文贵 2.6 倍 | 7 / 5 → 中文贵 1.4 倍 |
| 人工智能正在改变世界 | 11 / 7 → 中文贵 1.6 倍 | 5 / 6 → 中文反而便宜 17% |
| 请帮我把这段代码改成用循环写 | 16 / 7 → 中文贵 2.3 倍 | 12 / 7 → 中文贵 1.7 倍 |
注意第二行:换了新刀之后,中文反而比英文便宜。
所以网上那两种说法——「中文更省 token 因为汉字信息量大」和「中文永远比英文贵」——都不对。真实情况是:取决于用的哪把刀。
还有个有意思的细节:「哈哈哈哈哈」在旧刀里是 5 块(一个字一块),在新刀里只要 3 块,因为新刀把「哈哈」学成了一个整体。这说明它确实在中文语料里见过无数次「哈哈」。
到这里,故事听起来很完整:AI 看不见字母 → 所以数不对 → 结案。
但这个结论经不起检验。
2025 年,一位工程师 Max Woolf 做了件很朴素的事:他把 11 个主流模型拉出来,问 strawberry 里有几个 r,跑 100 次;再问 blueberry 里有几个 b,跑 274 次3。不做任何提示词技巧,就像普通用户那样问。
结果很有意思:
这就麻烦了。请你跟着想一遍这个推理:
Woolf 的结论是:差异如此「各有各的怪」,更像是训练的问题,而不是架构上的死穴。换句话说:同一把刀切出来的字,有的模型数得对、有的数不对,差别在于有没有被教会怎么数。
这也和另一项研究对得上——2025 年发表在 IEEE Computer 上的一篇论文专门研究了「能不能教会 AI 数字母」,答案是能4。
而这正是为什么今天的模型大多能答对 strawberry 了:新一代模型在回答前会先把词一个字母一个字母拼出来,硬生生把积木拆开,再数。它不是”看见”了字母,而是学会了一套绕路的办法。
关于 AI,这篇文章讲了两件事:
而第二件事的方法,比第一件事的知识更值钱:
当你听到一个听起来很顺的解释时,问一句:如果它是对的,我应该看到什么?然后去看,是不是真的看到了。
Woolf 做的就是这件事。他没有争论,他只是问:如果怪切词,那所有模型该一起错——然后他去数了。数完发现对不上,解释就得改。
这套动作有个名字,叫科学。它不需要你懂 AI,你在物理课、生物课上早就学过了。
如果你有电脑、装了 Python,三行就能复现本文所有切词结果:
pip install tiktoken
python3 -c "
import tiktoken
e = tiktoken.get_encoding('o200k_base')
w = 'strawberry'
print([(e.decode([i]), i) for i in e.encode(w)])
"把 o200k_base 换成
cl100k_base,就能看到新旧两把刀的区别;把 w
换成任何中文、emoji、你的名字,看看它被切成了几块。
本文全部切词数据由 OpenAI 开源分词库
tiktoken 于 2026-07-26 实测生成,编码器为
cl100k_base 与 o200k_base。https://github.com/openai/tiktoken↩︎
Rico Sennrich, Barry Haddow, Alexandra Birch (2015). Neural Machine Translation of Rare Words with Subword Units. arXiv:1508.07909,后发表于 ACL 2016。这是 BPE 分词方法的源头论文。https://arxiv.org/abs/1508.07909↩︎
Max Woolf (2025). Can modern LLMs actually count the number of b’s in “blueberry”? 测试了 OpenAI、Anthropic、Google、Moonshot 共 11 个模型,strawberry 问题 100 次、blueberry 问题 274 次。https://minimaxir.com/2025/08/llm-blueberry/↩︎
Javier Conde, Gonzalo Martínez, Pedro Reviriego, Zhen Gao, Shanshan Liu, Fabrizio Lombardi (2025). Can ChatGPT Learn to Count Letters? arXiv:2502.16705,发表于 IEEE Computer 2025 年 3 月号。https://arxiv.org/abs/2502.16705↩︎