LLM如何预测下一个词?从Token到概率,一文看懂大模型推理内幕 📅 2026/7/4 3:45:10 大模型就像一个超级预测机器它的全部智慧就是猜下一个字——但问题是它凭什么猜得这么准你有没有想过当你给 ChatGPT 发一句“中国的首都是”它怎么就知道接“北京”而不是“上海”明明它只是一个接收文本、输出文本的程序内部到底发生了什么今天我们就钻进 LLM 的肚子里从 Token 开始一步步拆解它预测下一个词的全过程。读完这篇你会对大模型“凭空生成”文本的能力有一个立体的认知——不再是黑盒而是有迹可循的数学魔法。一、TokenLLM 的“最小货币单位”我们人类看到的是“我爱人工智能”但 LLM 不认识汉字。它只认识数字所以第一步就是把自然语言切碎成词元Token。Token 是 LLM 处理信息的最小单元也是计费的基本单位——它不一定是完整单词可能是子词、字符甚至标点。举个例子unhappiness这个英文词LLM 不会当做一个整体而是切成[un, happi, ness]。中文也是类似我爱人工智能自然语言处理很有趣→[我, 爱, 人工智能, ,, 自然语言处理, 很, 有趣]。为什么要切得这么碎如果只认完整词英文有几十万单词中文更有几百万模型根本记不过来切成子词后模型只需掌握几万个“基础积木”组合效率极高。更小的词表意味着更快的运算和更低的显存占用。每个 Token 在模型内部都有一个唯一的编号Token ID比如“你”可能是57668。你把 Prompt 发过去模型收到的就是一堆 Token ID 的数组。这就是输入一串数字。二、Embedding给数字赋予“灵魂”Token ID 是纯粹的数字索引没有语义。57668和57669之间没有任何数学关系你不能说“你”1“好”。LLM 的第一步操作就是把这个 ID映射成一个高维向量这个过程叫Embedding。Embedding 是把离散的 Token ID 变成连续的语义向量让模型能够计算词与词之间的“距离”。每个 Token ID 都对应一个向量例如 1024 维或 4096 维这个向量可以理解为该 Token 在高维空间中的坐标。语义相近的词它们的向量在空间里距离就近。比如“国王”和“王后”的向量距离就很近而“苹果”离它们很远。更有趣的是向量之间还能做运算国王 - 男性 女性 ≈ 王后这说明模型通过训练不仅学到了词义还学到了语义关系。LLM 内部有一个巨大的Embedding Matrix嵌入矩阵相当于一张“向量查找表”。当拿到 Token ID57668它直接去这张表的第57668行把对应的向量“抽出来”。但到此为止每个 Token 还是孤立的——它们只知道自己是什么不知道自己在句子里的位置。三、位置编码让每个词知道“我在哪”考虑这两句话“我咬了狗”“狗咬了我”它们的 Token 完全一样但顺序不同意思天差地别。Embedding 本身不携带顺序信息所以必须给每个向量叠加一个位置编码Position Encoding。位置编码告诉模型每个 Token 属于句子的第几个位置让语义与顺序融合。常见的做法是给每个位置生成一个固定的向量比如用正弦余弦函数然后直接加在 Embedding 上。这样每个 Token 最终携带两类信息语义信息它是什么位置信息它在哪里现在模型有了一个个带坐标和顺序的向量但它还是不知道词与词之间的依赖关系——比如“它”指代谁这就要靠自注意力机制了。四、自注意力让模型“读懂上下文”这句英文The animal didnt cross the street, becauseitwas too tired.这里的it指代的是animal还是street人类一眼就懂是动物因为“tired”常修饰动物但模型怎么知道答案就是Self-Attention自注意力。Q、K、V 三部曲对每个 Token 的向量模型会通过三个不同的线性变换生成三个新向量QQuery查询向量代表“我在找什么”——比如代词it要找个先行词KKey键向量代表“我能提供什么”相当于一张名片告诉别人我有什么属性VValue值向量代表“我能提供什么实际内容”也就是具体特征细节。还是上面那个句子。假设我们只关注it和animal、street的关系token1animal - (Q1, K1, V1) token2it - (Q2, K2, V2) token3street - (Q3, K3, V3)模型要做的是用it的 Query 向量去和句子中每个词的 Key 向量做点积得到一组注意力分数score_it_animal Q2 · K1 score_it_street Q2 · K3如果score_it_animal数值远大于score_it_street就说明it和animal的相关性更强模型会把更多注意力放到animal上。然后这些分数经过 Softmax 归一化变成权重再分别乘以对应词的 Value 向量最后加权求和得到it位置的新表示——这个新表示里就融合了animal的语义细节比如“疲倦”这个属性从而正确地让it指代动物而非街道。自注意力机制的本质就是用 Q 去找最匹配的 K然后用 V 来提供实际内容。Q 是问题K 是索引V 是答案。同样的道理可以用在歧义场景里“苹果手机” → 模型会通过注意力分数发现“苹果”和“手机”强相关它的向量就会偏向电子设备“我吃了苹果” → 上下文里“吃了”这个词会拉高“苹果”作为水果的注意力分数于是它的语义转向食物。这就是上下文消歧的核心——不是靠词典硬查而是靠 QKV 的动态加权。你可能会问Q、K、V 是怎么来的它们都是通过模型训练学出来的权重矩阵直接对原始向量做线性变换。我们不需要手动设计模型自己会调整这些矩阵让注意力分数最有利于预测下一个词。五、从注意力到预测概率分布和自回归经过多层自注意力Transformer 里的 Decoder 部分模型已经为当前序列中的每个位置生成了富含上下文信息的向量。接下来要做的事就是预测下一个词。对于最后一个位置即当前输入序列的末尾模型会取它的向量通过一个线性层 Softmax映射成词表大小的概率分布。比如词表有 5 万个 Token输出就是一个 5 万维的向量每个维度代表对应 Token 成为下一个词的概率。拿“中国的首都是”为例“北京” 的概率92%“北平” 的概率4%“长安” 的概率2%其他所有词共 2%模型选择概率最高的那个或者按温度采样输出对应的 Token ID。然后这个新 Token 会被追加到输入序列末尾模型再继续预测下一个词。这就是自回归生成每次生成一个词然后把新词加入上下文再生成下一个直到遇到结束标记或达到最大长度。六、串起全流程一个完整的推理过程现在我们把所有步骤串起来看看一次完整的生成到底经历了什么输入“中国的首都是”Tokenization切分为[中国, 的, 首都, 是]转成 Token ID[123, 456, 789, 101]Embedding每个 ID 查表得到对应的语义向量比如 1024 维位置编码给每个向量加上位置信息位置 0,1,2,3 的编码多层自注意力经过 N 层 Transformer 块每层都有 QKV 计算让每个位置的向量都融合上下文输出概率取最后一个位置的向量线性变换 Softmax得到词表大小的概率分布采样按概率选出“北京”概率最高输出 Token ID循环将“北京”加入输入继续预测下一个词……直至结束整个过程计算量极大但核心思路就是不断重复步骤 5~7。七、一些你可能关心的“实战问题”1. 为什么 Tokenization 会影响计费和效果因为计费按 Token 数算而不同模型的分词器Tokenizer切法不一样。比如英文中ChatGPT可能被切成一个 Token也可能切成ChatGPT。所以相同的文本在不同模型上花费可能不同。而且切得越合理模型理解越好——比如中文“人工智能”如果被切成“人工”和“智能”就会丢失整体语义所以现在主流中文模型都会把常用词保留为完整 Token。2. 位置编码为什么重要有没有更先进的做法早期用固定正弦编码现在很多模型用可学习的位置编码即把位置也当成参数来训练。还有 RoPE旋转位置编码等变体本质都是给向量注入位置信息只是实现方式不同。3. 注意力机制真的能看到所有词吗理论上是但实际上受限于上下文窗口比如 8K、128K。窗口之外的词完全看不见这就是为什么长文本会丢失开头信息——因为注意力矩阵的计算量随窗口长度平方增长模型只能截断。写在最后说白了LLM 的推理过程可以浓缩成一句话把问题变成数字通过向量空间中的注意力计算找出最符合上下文的下一个数字再翻译回文字。它没有“思考”没有“理解”只有大规模统计模式匹配。但正是这种模式匹配的深度和广度让它看起来像有了智能。作为开发者了解这些底层细节至少能给你两个直接好处调试 Prompt 时更有方向知道模型“看”什么才能更精准地给提示估算成本更准确理解 Token 计数逻辑避免账单惊吓。下次你再调用大模型 API 时不妨想想那一串串向量在空间中跳舞的样子——你会发现它其实没那么神秘反而有点可爱。Token 是它的货币Embedding 是它的地图而注意力机制就是它在这张地图上寻找路径的罗盘。祝你代码无 BugToken 永不浪费。