2024 年 7 月,一个小学算术题让几乎所有主流大模型同时「翻车」。第一财经记者实测 12 个大模型,其中 8 个认为 9.11 大于 9.9,包括 ChatGPT-4o、Gemini Advanced、Claude 3.5 Sonnet 等头部产品;只有通义千问、文心一言、Minimax、腾讯元宝答对。更耐人寻味的是,当记者追问「为什么」时,大多数模型又会改口承认错误。
这个现象值得追问,因为它把大模型「看似会算、实则靠猜」的短板,暴露在了一个任何人都能验证的例子上。常见直觉认为,能通过奥数题的模型处理小数比较应该毫无压力;但事实说明,模型的「计算」并不走人类熟悉的符号规则,而是取决于文本如何被切分、以及训练语料里这类数字以什么语境出现。要理解这一矛盾,需要从大模型读取文本的第一步——分词——讲起。
起因:综艺得票率点燃的连环翻车
事件的导火索是《歌手》节目的一期得票率:孙楠 13.8%,香缇莫 13.11%。有网友质疑 13.11% 明明大于 13.8%,排名却有出入,便把截图发给大模型求证,得到的却是同样的错误判断。Scale AI 的提示工程师 Riley Goodside 顺着这条线索直接测试「9.11 vs 9.9」,多个主流模型集体答错,相关截图迅速在社交平台传播,最终演变成一场媒体实测。
第一财经的实测把样本扩大到 12 个模型,结果只有 4 个答对。答错的方式各有不同:ChatGPT 直接比较小数点后的数字,得出 11 大于 9;智谱清言虽然正确指出十分位 1 小于 9,结论却仍是 9.11 更大;豆包甚至举例「9.11 元比 9.9 元多 0.21 元」。而当记者追问推导过程时,几乎所有模型都开始自我修正——有的在推演中算出了 0.11 小于 0.9,却话锋一转得出 9.11 大于 9.9。这种「一追问就改口」的现象,暗示模型并非在稳定地计算,而是在生成一段符合概率分布的文本。
机制一:分词器把小数拆成了 Token
要解释错误来源,先看大模型处理输入的起点——分词器(Tokenizer)。模型不能直接处理字符,而是把文本切分成称为 Token 的片段,再映射为编号。OpenAI 开源的 GPT-2 分词器(基于 BPE 算法,可在其在线工具中直接观察)对这两个数字的切分是:
- 「9.9」被切为三个 Token:9、.、9;
- 「9.11」同样被切为三个 Token:9、.、11。
在 OpenAI 的 gpt2 词表里,前者的编号序列是 24、13、24,后者是 24、13、806。也就是说,模型「眼」中并没有一个完整的小数 9.11,而是一串离散片段。两个数的小数部分——「9」与「11」——成了模型最容易直接比较的对象。
这里需要澄清一个常见误解:Token 编号 806 大于 24,并不代表模型「按编号比大小」。编号只是词汇表的索引,本身没有数值含义。真正的影响在于,分词把「9.11」拆成了互不粘连的片段,丢失了小数点后位数对齐这一算术结构;当模型要在 X.9 与 X.11 之间做判断时,它不再有「两个都是一位小数」这种结构可依,只能退回到语料里见过的表面模式。
分词方式由训练语料决定:BPE 会把语料中高频共现的片段合并成同一个 Token,所以常见数字(如 1 到 100、年份)往往被合并,不常见的数字则被拆得更碎。早期语言模型基本不对数字做特殊处理,切分完全取决于统计,这为后续的多位计算埋下了隐患。
机制二:训练语料里,「9.11 大于 9.9」更常见
光有分词还不足以解释全部现象,因为即使把数字换成没有歧义的其他组合,问题依然存在。真正起作用的第二个因素,是训练数据的语境偏差。
互联网语料中,「9.11」最常见的语义是日期(9 月 11 日)和版本号。在版本号语境里,9.11 确实「大于」9.9——比如软件版本迭代,3.11 排在 3.9 之后;在日期语境里,9.11 又是一个记忆点极强的日子。而像「9.11 与 9.9 哪个大」这种小学算术,在语料中出现的频率远低于上述语境。语言模型通过预测下一个 Token 训练,本质上是在拟合文本的统计分布:给定上下文,它输出的总是概率最高的延续。于是面对这个问句,模型更「见过」的是版本号与日期里「9.11 更大」的写法,自然倾向于输出这个答案。
两个对照证据支持这一解释。其一,把数字换成 9.35 与 9.9,同样问「哪个大」,模型大多能答对——因为不存在「9 月 35 日」,也没有对应版本号,语料里没有可借用的错误模式,而分词切分与 9.11 并无区别。其二,第一财经实测中,个别模型在答错后追问「为什么」会改口,说明模型并不是被某条固定规则锁死,而是被新的上下文重新分配了概率。
自注意力与提示顺序:为什么换一种问法就能答对
Riley Goodside 在反复测试中还发现,把选项放到提问之前(如「哪个更大:9.9 还是 9.11?」)时,模型更容易答对;而把问题放在前面、再列出两个数字时,错误率更高。这涉及自注意力机制:模型处理每个 Token 时,会依据上下文动态调整各 Token 之间的注意力权重。当「更大」这个词与两个数字出现在相近的位置,模型更有可能把两个数字当作同一比较关系中的两个操作数来处理。
但这只是概率层面的松动,而非机制层面的修复。即使模型在某个提示下答对了,也不代表它稳定理解了小数结构。第一财经的实测中,有模型在联网查询时先做对,随后又话锋一转导向错误结论;也有模型在推演中已经算出 0.11 小于 0.9,结论却依然写 9.11 大于 9.9。正确与错误之间的摇摆,说明答案来自概率采样,而不是一次可靠的算术计算。
对照:什么问法能救,什么问法救不了
下表汇总了不同语境下大模型的表现与判断依据,供读者在遇到类似问题时作参考:
| 问法或语境 | 模型常见表现 | 判断依据 |
|---|---|---|
| 直接问「9.11 和 9.9 哪个大」 | 多答错(9.11 大) | 第一财经实测 12 个模型 8 个答错 |
| 换数字「9.35 和 9.9 哪个大」 | 多能答对 | 无日期或版本号联想,分词相同却答对 |
| 选项前置,如「9.9 还是 9.11 更大」 | 更易答对 | 自注意力把两数关联到同一比较 |
| 明确按数学比较或指出是浮点数 | 基本答对 | 上下文消除版本号与日期歧义 |
| 追问「为什么」 | 多数改口 | 新上下文重新分配概率分布 |
| 版本号、目录等语境 | 按语境判断(9.11 大) | 语料中该模式高频出现 |
这张表说明了一个更本质的结论:模型的表现主要被语境与概率主导,而不是被数学规则主导。同样的两个数字,换一个问法就能得到相反的答案,这在符号计算里是不可想象的。
成立条件与边界:什么时候模型真正「会算」
那么是否存在让模型稳定答对的条件?从实测与检索资料看,可以归纳为三类。
一是明确语境。把「9.11」限定为浮点数或「按数学比较」,能显著提高正确率——这相当于把版本号、日期等歧义消除,让模型回到算术语境。二是借助工具。第一财经实测中答对的通义千问调用了代码解释器实际计算,腾讯元宝则整理了公开讨论并给出有出处的结论——它们没有依赖模型的内部「算术」,而是绕过了它。三是提示技巧。零样本思维链(如要求「一步一步地想」)对这类问题有一定帮助,而角色扮演式提示(如「你是一个数学天才」)效果有限,说明触发可靠推理并不容易。
但这些方法都有边界。工具调用依赖外部计算能力,思维链也只是提高概率而不是保证正确。更关键的证据来自学界:2024 年一篇研究分词对算术影响的论文(Singh 与 Strouse)发现,把数字按从左到右三位的切分方式改成从右到左按逗号分隔,GPT-3.5 与 GPT-4 的加法准确率最高可提升约 20%;从左到右切分还会导致系统性的进位错位——当答案位数与加数不一致时,模型会稳定地输出某种错误模式。这说明分词方式是真实、可复现的影响因素,同时也意味着问题很难靠单一手段根治:即使改进分词,也可能影响其他任务的表现,且更大的模型只是缩小、并未消除这种偏差。
还需强调一点:即使模型在单次比较中答对,也不能推广到其他算术场景。数字比较只是精确符号操作里最简单的形式,进位、借位、括号优先级等多步运算同样容易出错。更稳妥的使用方式,是把模型的数值输出当作一个候选答案,用外部工具或人工复核来兜底,而不是默认它正确。
流程图:一次错误回答的完整链路
下图串联了从输入到错误输出的完整过程,也呼应了上文提到的两个机制:
flowchart TD
A[输入: 9.11 和 9.9 哪个大] --> B[分词器切分]
B --> C[Token 序列: 9 . 11 与 9 . 9]
C --> D[自注意力编码]
D --> E[按训练语料预测下一个 Token]
E --> F{语料中哪种模式更常见?}
F -- 版本号与日期语境更常见 --> G[输出: 9.11 更大]
F -- 算术语境更常见 --> H[输出: 9.9 更大]
G --> I[用户追问原因]
I --> J[新上下文重算概率分布]
J --> K[多数模型改口答对]
关键转折发生在两个节点:一是分词把小数拆散,让「9.11」失去整体性;二是模型根据语料统计而非数学规则决定输出。追问之所以有效,是因为它提供了新的上下文,把概率分布从「版本号模式」推向「算术模式」——但这与「真正理解」是两回事。
结论:模型不是算错,而是根本没在算
回到最初的问题:为什么大模型会把 9.11 算得比 9.9 大?直接原因是分词器把小数拆成了互不粘连的 Token,间接原因是训练语料中「9.11 大于 9.9」的版本号与日期语境远比算术语境常见,两者叠加,使「9.11 更大」成为模型概率上的首选输出。模型并没有做错算术——它根本没有执行算术,而是在猜测最像样的回答。
这一现象对使用者的实际含义是:当模型给出的数值比较结果与直觉冲突时,不必先怀疑自己的数学,更值得怀疑的是模型的语境与概率偏好。给它一个明确的数学语境、要求推导,或者直接交给计算工具,往往比反复追问更有效。大模型的「智能」建立在统计规律之上,而算术是一种精确规则——在规则与统计冲突的地方,正是它最容易出错的地方。