ARTICLE DETAIL

资讯详情

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

大模型技术全景(六):AI 的“逐字接龙“——Token 与自回归生成背后的真相

大模型技术全景(六):AI 的“逐字接龙“——Token 与自回归生成背后的真相 你有没有好奇过:大模型回答问题时,是像人一样想好整句话再写,还是别的方式?答案是——它根本不会先想好整句话。它是像一个逐字接龙游戏:根据已经写下的内容,一个字一个字地猜下一个最可能出现的词,直到写完。这篇把这个机制彻底拆开:它怎么选词、Token 是什么、词表为什么重要、为什么输出比输入贵、以及 AI 是怎么记住你的。目录目录​编辑目录一、大模型是怎么蹦出回答的:逐字预测1.1 选词不是猜一个,而是按概率抽一个1.2 完整过程1.3 自回归生成二、Token 是什么:AI 眼中的最小语言单位2.1 切分形态2.2 为什么需要 Token三、词表:模型只能在认识的词里选3.1 生成范围3.2 字节级回退:一个字符都不漏四、为什么输出比输入贵4.1 致命伤一:算力闲置4.2 致命伤二:显存带宽被榨干4.3 致命伤三:KV Cache 占显存五、多轮对话:AI 是怎么记住你的5.1 为什么需要多轮对话5.2 上下文超限:AI 也会失忆5.3 推理效率:长对话为什么又慢又贵5.4 模型能力局限:中间遗忘六、面试官追问一、大模型是怎么蹦出回答的:逐字预测核心原理一句话:给定前文,计算下一个最可能出现的词是什么。1.1 选词不是猜一个,而是按概率抽一个模型决定下一个 Token 的完整机制:基于前文,算出词表里所有 Token 的概率分布,再用采样策略选出一个。类比:像玩文字接龙。你写今天天气真,正常人会接好,但也可能接棒不错。模型做的是同一件事——给每个候选词一个概率,再按概率挑一个。1.2 完整过程用户输入中国的首都是哪里?:轮次模型看到的内容预测下一个1中国的首都是哪里?北2中国的首都是哪里?北京3中国的首都是哪里?北京是…不断拼接…最后…北京是…终止符每预测出一个 Token,就拼到后面当新的输入,继续预测下一个,直到碰到终止符。注意:终止符因模型而异——DeepSeek 默认的是end▁of▁sentence,别家模型可能不同。1.3 自回归生成定义:这种用自己刚生成的,作为预测下一个的依据,像滚雪球一样一步接一步往外推的方式,叫自回归生成(Autoregressive Generation)。它是当前所有主流大模型(GPT 系)的工作方式。二、Token 是什么:AI 眼中的最小语言单位定义:Token(词元)是大语言模型理解和处理文本的最小基本单位。类比:人读书要断句——我爱大模型开发会断成我/爱/大模型/开发再理解。AI 也一样,它不读完整句子,而是把句子拆成一个个 Token 来理解。这个断句过程叫分词(Tokenization)。2.1 切分形态形态例子完整单词Hello 1 个 Token单词的一部分unbelievable un / believe / able(3 个 Token)标点逗号、句号、感叹号通常各占 1 个 Token中文1 个汉字通常占 1~2 个 Token(视词频)不同厂商分词器不同,同一句话切出的 Token 可能不一样——就像有人把句子断成大/模型,有人断成大模型。2.2 为什么需要 Token原因一:数字化,让机器能听懂计算机只能处理数字。把文本变成数字要两步:步骤做什么关键点① 切分编号把文本拆成 Token,每个分配整数 IDID 只是代号,没有大小含义——891 不比 432更开心,直接拿 ID 做加减法毫无意义② 映射向量把每个 ID 映射成一串高维浮点数(向量)语义越近,向量在空间里越近:happy 和 glad 的向量距离很近原因二:解决词汇爆炸问题切法问题按字母切太细,序列巨长,算力平方级增长,效率极低按单词切词表爆炸(英语几十万词派生词),新造词没法处理折中:子词(BPE)词表适中,又能拼出任意新词主流 Tokenizer(BPE、SentencePiece)把文本切成介于字和词之间的子词单元——所以 unbelievable 被切成 un/believe/able。三、词表:模型只能在认识的词里选定义:词表(Vocabulary)是模型预定义的一个映射字典,包含模型认识的所有 Token,每个 Token 对应一个唯一数字 ID。类比:一本模型专用字典。LLM 本质是数学函数(输入数字、输出数字),词表就是连接人类语言和模型数字世界的桥梁。3.1 生成范围模型不能生成词表之外的 Token,但可以组合词表里的 Token 拼出新词例:un believe able → unbelievable词表大小是固定的(如 GPT-2 是 50,257),模型永远不可能输出编号 50,258代价:词表里有的词,1 个 Token 就输出;没有的新词,可能要 5~10 个 Token这就是为什么处理冷门专业术语或罕见语言时,LLM 又慢又贵3.2 字节级回退:一个字符都不漏问题:词表里没有 这个表情怎么办?方案做法结局传统分词器直接抛未知标记 [UNK]模型看不懂,两眼一抹黑Byte-fallback把 按 UTF-8 拆成 4 个字节,每个字节映射一个专用字节 Token表情被切成 4 个 Token 正常送入模型为什么说它精妙?对比历史方案:方案问题纯字节级 BPE(GPT-2 早期)词表只有 256 字节,apple 占 5 个 Token、中文苹果占 6 个,上下文窗口被迅速吃满Byte-fallback完美结合:正常词用大 Token 保效率,生僻字/Emoji 降级到字节保鲁棒,100% 不漏字符四、为什么输出比输入贵同样长度的内容,模型写出来比读进去贵得多。原因藏在两个阶段的本质差异里,课件总结了三个致命伤。4.1 致命伤一:算力闲置阶段怎么算特点输入(Prefill)1000 个 Token 打包成大矩阵,一次算完GPU 满载,利用率近 100%,但 0.1 秒干完输出(Decode)每次只算 1 个 Token,还得搬出前面 1000 个缓存做计算GPU 闲置约 95%,生成 1000 Token 要串行跑 1000 步类比:输入像满载货车走高速(费油但跑得快);输出像市区堵车(不费油但耗时极长)。出租车按打表收费,堵车当然更贵。搬砖类比:盖房子要 1000 块砖——输入:1000 个工人同时搬,1 轮搞定输出:只有 1 个工人(下一个词依赖上一个),来回搬 1000 趟,而且搬得越多、每趟还要清点前面搬过的砖(KV Cache 越来越大),越走越慢4.2 致命伤二:显存带宽被榨干输入:消耗计算单元,这是 GPU 强项输出:瓶颈变成显存搬运速度(Memory Bound)——每算一个新 Token,要把缓存里几千个 K 向量从显存搬到缓存显存带宽是 GPU 最稀缺的资源之一(如 H100 带宽 3.35TB/s),输出阶段疯狂搬运,直接把带宽打满4.3 致命伤三:KV Cache 占显存阶段显存占用输入算完就释放,不占地方输出每生成一个 Token,它的 K/V 就永久追加进显存,直到对话结束生成 1000 Token 占 1000 份显存空间对云厂商:显存 钱。一张 A100 只有 80GB,一个用户生成长文本占了 40GB,这张卡能同时服务的用户就急剧减少结论:不是厂商黑,是输出阶段的计算方式(串行 高缓存 占显存)天然决定了它更贵。五、多轮对话:AI 是怎么记住你的先泼冷水:大模型本身没有记忆。核心事实:LLM 本质是无状态(Stateless)的——模型处理每条指令时,默认并不知道你之前说过什么。你换个新会话,它连你叫什么都不记得。那多轮对话怎么实现的?靠应用层模拟:把历史对话记录连同当前新问题一起,重新打包发给模型。所谓记住,其实是每次请求都把之前的话再发一遍。类比:像你每次找同事帮忙,都得把前因后果重新讲一遍——不是同事记性好,是你每次都把背景带上了。5.1 为什么需要多轮对话原因说明例子上下文依赖语境是理解代词/隐喻的关键先问龙是什么,再问它的头像什么复杂问题逐步清晰用户不会一次说清所有信息看病:先我头痛,再一步步补充纠错与对齐给用户机会纠正模型的错模型说错刊物,用户纠正后它改对5.2 上下文超限:AI 也会失忆对话越长,历史 Token 越多,一旦超过上下文窗口上限(如 32K),最早的信息就被截断遗忘。一个经典案例:你开头说我对花生过敏,聊了 20 轮烘焙后,模型忘了这条,推荐了花生酱玛芬蛋糕。解决思路:选择性记忆,而非全记住方案做法对话摘要超长后把旧对话压缩成简短摘要,之后基于摘要继续滑动窗口只保留最近 N 轮,更早的一刀切掉RAG 检索把历史存入向量库,按需检索相关片段(后篇专讲)5.2.1 对话摘要5.2.2 滑动窗口5.2.3 RAG检索5.3 推理效率:长对话为什么又慢又贵每轮都要重新处理整个历史 → Token 消耗和延迟随轮次线性增长。解决技术:提示词缓存(KV Cache):缓存已算过的历史结果,每轮只算新内容(生产级服务都用)上下文剪枝:移除对当前生成无用的历史 Token(比如删掉闲聊轮次,只留正题相关)5.4 模型能力局限:中间遗忘模型更容易记住上下文开头和结尾的信息,中间部分常被忽略——这就是大海捞针测试揭示的现象:关键信息藏在大量无关内容中间时,模型很难找到。六、面试官追问Q1:Token 怎么算费用?为什么充的钱一会儿就没了?A:计费按输入 Token 输出 Token总和。输出 Token 单价更高(见第四节),长对话每轮都要把历史重新发给模型,Token 累积很快。所以同样的话,对话越长越费钱。Q2:中文 1 个字 1 Token 吗?A:不一定。中文通常 1 个字 ≈ 1~2 个 Token,取决于切分和词频。常用字可能 1 个 Token,生僻字可能要拆成多个甚至触发字节级回退。精确数量用各家的 Tokenizer 工具可查。Q3:上下文窗口为什么有限?塞满会怎样?A:因为注意力计算复杂度随长度平方增长,且 KV 缓存占显存、随长度线性增加。塞满后,超出部分会被截断(通常丢最前面的),模型就忘了早先的内容。(上下文窗口完整机制在系列后篇专门讲。)Q4:大模型真的记住你说的话了吗?为什么换新会话它就不记得?A:没有真记忆。LLM 本质无状态,多轮对话是应用层把历史重新打包发给模型模拟出来的。换新会话不带历史它什么都不知道。所以记忆只是把上下文带上的假象,超长后连这个假象也会因截断而失效。Q5:模型输出真的能无中生有吗?为什么生僻内容会更贵?A:模型只能从固定词表里选 Token,不能创造词表外的编号。词表里有的词 1 个 Token 就够;没有的新词/生僻字要拆成多个 Token,甚至触发字节级回退。Token 越多,计算越慢越贵——这就是冷门术语、罕见语言处理成本高的原因。如果这篇让你看清了大模型逐字接龙的真相,欢迎点赞收藏。评论区聊聊:你知道 Token 要花钱后,有没有改变和 AI 聊天的方式?
返回列表