大模型基础任务失误现象
近期,大型语言模型(LLM)在处理看似简单的逻辑与数学问题时频繁出现错误,引发了广泛关注。一个典型的案例是要求比较 9.11 和 9.9 的大小,许多主流模型给出了错误的回答,声称 9.11 更大。另一个常见错误是在统计字符串中特定字符数量时出错,例如在单词 "strawberry" 中统计字母 'r' 的数量。
这些错误并非偶然,而是暴露了当前生成式 AI 在确定性任务上的局限性。虽然大模型在自然语言理解、文本生成方面表现卓越,但在需要精确计算或严格逻辑推理的场景下,其概率生成的本质容易导致幻觉。
核心原因分析:分词机制与概率预测
大模型之所以会在简单数值比较上翻车,根本原因在于其底层处理数据的机制——分词(Tokenization)。
1. 分词导致的语义偏差
大模型并不像传统程序那样直接读取数字的数值大小,而是将输入文本转换为 Token ID 序列。对于浮点数,不同的模型分词策略可能导致不同的 Token 划分。
- 示例分析:
- 输入
9.11可能被切分为["9", ".", "11"]或["9.", "11"]。 - 输入
9.9可能被切分为["9", ".", "9"]或["9.", "9"]。
- 输入
当模型进行推理时,它往往基于 Token 的语义关联而非数值大小。在某些分词模式下,Token "11" 的向量表示可能比 Token "9" 更接近'大'的概念,或者模型在训练数据中见过更多类似版本号(如 1.11 vs 1.9)的比较场景,从而产生了误导性的模式匹配。这种基于 Token 级别的比较忽略了小数点后位数的权重差异,导致 11 > 9 的逻辑被错误地迁移到小数比较中。
2. 概率生成特性
LLM 是基于下一个 Token 预测概率来生成文本的。这意味着它的输出是概率分布的结果,而非确定性的逻辑运算。在缺乏明确约束的情况下,模型倾向于生成最符合语料库统计规律的文本,而不是最符合数学真理的文本。这种特性在处理需要绝对精确的任务(如计数、算术)时尤为危险。
3. 上下文依赖与幻觉
除了分词问题,上下文依赖也是导致错误的原因之一。如果之前的对话中涉及过类似的版本号比较,模型可能会产生上下文偏差。此外,模型幻觉(Hallucination)会导致模型自信地输出错误信息,甚至编造理由来支持其错误结论,例如声称'整数部分相同,比较小数部分,11 比 9 大'。
解决方案:提示词工程优化
虽然目前尚无根治方法,但通过精心设计的提示词(Prompt Engineering),可以显著降低错误率。
1. 思维链(Chain of Thought, CoT)
引导模型逐步思考,强制其展示推理过程,有助于减少跳跃性错误。
优化后的提示词示例:
请一步步思考。首先将两个数字的小数点对齐,然后从左到右依次比较每一位数字。最后给出结论。
比较 9.11 和 9.9 哪个更大?
2. 定义明确规则
直接赋予模型新的计算规则,覆盖其预训练中的潜在偏差。
优化后的提示词示例:
现在,我给你一个新规则,请按照新规则判断大小。
小数点后的位数,第一位数大的就更大,如果第一位相同,则第二位数大的更大,依此类推。
现在,请比较 9.11 和 9.9 哪个更大。
3. 显式计数指令
针对字符统计问题,避免让模型直接猜测,而是要求执行具体的计数步骤。
优化后的提示词示例:
设置一个计数器 count,初始值为 0。
遍历字符串 "strawberry" 中的每一个字符。
每出现一个 'r',count 的值增加 。
最后给我 count 的值。你不用管正不正确,给我计数结果就行。


