ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

<五>Token与幻觉——为什么ChatGPT聊着聊着就飘了

<五>Token与幻觉——为什么ChatGPT聊着聊着就飘了 上篇https://www.cnblogs.com/webor2006/p/21803907了解了 ChatGPT 是怎么一个字一个字往外蹦的。但这引出了一个更让人困惑的问题也是我这回学到的重点。一个看似简单、实则要命的差事预测下一个词——听着是不是太简单了小学生都能玩的游戏凭啥要 1750 亿参数、几百万美元算力、几千亿条语料来训练原因只有一个要把这个简单任务做好背后需要的能力一点都不简单。学的时候发现几个有意思的场景分享一下。第一多义词。你看到他拎着一只包和他把事情全包了——同一个包字意思天差地别。模型要预测包后面的词得先判断这个包到底是名词还是动词。判断错了后文全歪。第二指代。你读到老李把方案交给老王他说这个不行——他指谁老李还是老王人靠常识能推断(多半是老王觉得不行)但模型没有常识它只能靠参数里编码的语言模式来推理。第三隐藏的逻辑。你说外面下雨了——下一句大概率是别忘了带伞之类的。但换成外面下雨了庄稼有救了——又完全是另一码事。模型得根据上下文判断你是在关心出行还是在关心收成。第四话里有话。你说你作业写完了吗——表面是问句实际是催。模型不仅得理解字面意思还得吃透这句话此时此地的用意。所以为了把猜下一个词这件事做对模型被迫学会了语法、语义、常识、逻辑、指代、语用——几乎你能想到的所有语言能力。不是先有了智能所以会猜而是为了猜得更准被迫长出了智能。这个视角一转很多东西就通了。自回归像个雪球越滚越大上篇说了 ChatGPT 是一个词一个词往外蹦的这有个正式名字叫自回归。用函数调用的角度看更清楚。假设你问今天天气怎么样第1次调用: ChatGPT(今天天气怎么样?) → 今天 第2次调用: ChatGPT(今天天气怎么样? 今天) → 上海 第3次调用: ChatGPT(今天天气怎么样? 今天上海) → 的 第4次调用: ChatGPT(今天天气怎么样? 今天上海的) → 天气 ...以此类推注意每次调用都带了完整的问题 前面已生成的词。为什么不只带已生成的部分把问题丢了模型就不知道自己在回答什么了——它会从今天上海的开始自由发挥大概率跑偏。那为什么不一次性生成整段回答技术上不是不行但组合爆炸太恐怖——假设一次预测 50 个词每个词有 20 万种候选组合数就是 20万的50次方比全宇宙的原子数还多根本没法算。一个接一个地猜每次只做一次决策简单得多也稳定得多。而且说实话这跟人写作的习惯挺像——你也不是先把整篇文章在脑子里写好才动笔的。误差会累积为什么说着说着就跑偏了自回归有个天生的毛病一步差步步歪。第一步选了个不是最优但还凑合的词第二步的上下文就被带偏了第三步偏得更离谱……越往后越放飞。就像走路每一步偏 1 度不觉得走 100 步就完全是另一个方向了。这就是为什么 ChatGPT 聊着聊着就飘了——不是它突然变傻了是前面的一个小选择把上下文引到了不太对的方向后面只能将错就错。怎么缓解最直接的办法是更大的上下文窗口。你可以把上下文窗口想象成模型的短期记忆条——窗口越大能记住的对话历史越长就越不容易在局部跑偏。比如你说帮我查一下上海的天气模型往前翻十几轮对话还记得你们在聊旅行计划回答就更靠谱。但窗口有上限——GPT-3 大概能记一篇短文GPT-4 能记几万字GPT-5 更长。本质上就是给模型配了个更大的短期记忆。Token模型看到的其实不是词平常咱们用 ChatGPT不管是 API 账单还是各种客户端总能看到本次消耗 xxx tokens、剩余 xk tokens之类的提示。说实话我第一次看到的时候完全没当回事——token 嘛不就是词换个说法后来才搞明白这个理解是错的。前面一直说预测下一个词但严格来说模型的最小单位不是词而是Token。为啥要搞这个因为这里有个根本约束——计算机需要一个固定大小的词表。ChatGPT 必须事先定好一个有限的词汇表(比如 20 万个)预测的时候只能从这个表里选不能临时加词、不能现学。如果直接用词做单位有三个头疼的问题词表太大中文常用词就几万加上专业术语、人名地名轻松上百万英文几十万单词加上 walk/walking/walked 各种变形更炸新词没完没了元宇宙、Vibe-Coding、直播带货……天天在冒新词永远赶不上算不起每次预测要给每个候选算概率100 万个候选就要算 100 万次太慢了Token 的思路很巧妙常用词整个保留为一个 Token生僻词切成几个 Token生僻到离谱的就切得更碎——用有限 Token 组合出无限的可能。比如中文里今天是一个 Token天气是一个 Token但人工智能可能被切成了人工智能两个 Token生僻英文词 ChatGPT 可能被切成 ChatGPT 三个 Token。一个 Token 到底长啥样它可能是一个完整的中文词(如今天)单独一个字(如真)英文单词的一部分(如 Token ization)一个标点符号(逗号、句号都算一个 Token)一般一个中文字大约对应 1 个 Token英文里一个 Token 大约等于 0.75 个单词。词表越大能整个保留的常用词越多切得越少效率越高——同样一段话消耗的 token 越少你付的钱也越少GPT-2/3: 约 5 万个 Token GPT-4: 约 10 万个 Token GPT-4o: 约 20 万个 Token更大的词表有两个好处一是更精细的表示——常用词不用切碎信息完整二是更高效率——同样一段话Token 数更少模型处理更快你花的钱也更少。所以ChatGPT 预测下一个词严格应该说ChatGPT 预测下一个 Token。但为了方便理解说词也大差不差——现在你再看到账单上的 token 数就知道它不是字数而是模型内部真正的最小计费单位了。为什么同样的问题每次回答都不一样如果你反复问 ChatGPT 同一个问题你会发现它每次的回答措辞都不一样——有时候连内容都有差别。这不是 bug是故意设计的。每次预测时模型不是死板地选概率最高的那个 Token而是按概率随机采样——概率高的被选中的几率大但不是铁定的。这样设计有两个好处。一是更像人类——你问我两遍今天天气怎么样我也不会一字不差地复读。二是能在创造力和准确性之间取个平衡——完全确定性的回答太僵化完全随机又太混乱了。通过概率采样在两者之间找到平衡点。想想看如果 ChatGPT 对同一个问题永远给出一样的回答它跟一个数据库查询有什么区别你只是在检索答案不是在对话。当然这个随机性的程度是可以调的——有两个关键参数控制它Temperature(温度)和 Top-p。温度越高低概率的词越有机会被选中输出就越放飞温度越低输出就越保守、越确定。后面学到的时候再细说这俩参数。它不是在算是在猜说个生活中的事。你邻居家小孩刚上幼儿园你逗他11等于几呀小家伙张口就来2你竖个大拇指心想这娃数学不错。过了两天你又逗他那 23 呢小家伙愣住了支支吾吾半天说不出——他不是会算只是上次那道题他妈教过他答案他记住了。ChatGPT 做算术本质上跟这差不多。你问它36 58 等于多少你以为它在列竖式、进位、一步一步算。实际上它脑子里根本没有计算这回事——只是训练数据里3658这个字符串后面最常出现的就是9然后是4。它顺着概率最高的路径往下猜拼出来就是94。所以它会在一些简单问题上翻车。你问strawberry 里有几个 r它不是对着一串字母去数而是在猜——训练数据里类似的问题后面最常见的是哪个数字猜对了就行猜错了拉倒。本质上就是只记住了模式没理解意思。不过 OpenAI 早就发现了这个问题。从 GPT-4 开始模型学会了调用工具——遇到数学题它不再自己硬猜而是偷偷调 Python 算一下再把结果用自然语言包装一下回复你。所以你现在用 ChatGPT 算数学题基本不会错了——不是因为它学会了数学是它学会了摇人。到 2026 年的新模型(GPT-5.5、Qwen3-Max、Gemini 3.0 等)经过强化学习训练的模型已经有了一定的原生推理能力能在内部进行多步推导和自我纠错不完全依赖外部工具了。但核心逻辑没变——它仍然在猜只是猜得越来越准推理链条越来越深。小结这篇学了几个承上启下的点简单差事逼出复杂智能为了精准预测下一个词模型被迫学会了语法、语义、常识、逻辑自回归 滚雪球自己生成的词又喂给自己一步步滚出完整回答误差累积一步偏了后面的路就歪了——这就是飘了的原因Token 是最小单位不是词是更灵活的词元用有限词表覆盖无限表达随机采样让 AI 更像人不总选最优解按概率碰运气它不是在算是在猜记住了模式不等于会计算但好在学会了摇人下一篇见加油
返回列表