<五>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 更像人不总选最优解按概率碰运气它不是在算是在猜记住了模式不等于会计算但好在学会了摇人下一篇见加油

相关新闻

猫抓插件:革命性浏览器资源嗅探工具,高效管理网络媒体资源

猫抓插件:革命性浏览器资源嗅探工具,高效管理网络媒体资源

猫抓插件:革命性浏览器资源嗅探工具,高效管理网络媒体资源 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无…

2026/10/10 19:01:32 阅读更多 →
SlopCodeBench:用渐进式代码重构基准测试评估大模型编程智能

SlopCodeBench:用渐进式代码重构基准测试评估大模型编程智能

你还在用传统的代码补全来测试大模型吗?如果只让模型看到完整的函数签名和注释,然后生成代码,这其实掩盖了一个关键问题:模型到底是在“理解”代码逻辑,还是在“记忆”代码模式?在真实的开发场景中&#xf…

2026/10/8 22:12:43 阅读更多 →
回溯法解图着色问题:原理、优化与工程实践

回溯法解图着色问题:原理、优化与工程实践

1. 项目概述:当“地图填色”遇上计算机科学刚入行那会儿,总觉得“图着色问题”是个挺抽象的学术概念,离实际开发很远。直到有一次,我需要为一个资源调度系统设计冲突检测模块,面对几十个相互关联、资源需求各异的任务&…

2026/10/14 19:43:20 阅读更多 →

最新新闻

电源硬件设计知识库:三层权威架构与自动化Agent实践

电源硬件设计知识库:三层权威架构与自动化Agent实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:11 阅读更多 →
模型压缩四大路线实战:剪枝、量化、蒸馏与AutoML选型指南

模型压缩四大路线实战:剪枝、量化、蒸馏与AutoML选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:11 阅读更多 →
组合数与逆元全解析:从扔硬币概率题到竞赛实战

组合数与逆元全解析:从扔硬币概率题到竞赛实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:10 阅读更多 →
Windows 10家庭版中文用户名修改:避开两个隐蔽坑的完整指南

Windows 10家庭版中文用户名修改:避开两个隐蔽坑的完整指南

1. 为什么一个中文用户名能把开发环境搅得天翻地覆很多人第一次意识到C:\Users\用户名里那个中文名是个麻烦,往往不是在装系统的时候,而是在某个工具突然报错、某个依赖死活装不上、某个脚本莫名其妙找不到路径的时候。我这次动手改,起因也很…

2026/10/14 20:02:10 阅读更多 →
腾讯云一句话识别实战:从接口调用到生产环境避坑指南

腾讯云一句话识别实战:从接口调用到生产环境避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:02:10 阅读更多 →
Kafka日志异常清理导致Broker频繁崩溃的根因与修复

Kafka日志异常清理导致Broker频繁崩溃的根因与修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:01:10 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →