LLM如何预测下一个词?从Token到概率:一文看懂大模型推理内幕
很多人好奇为何给ChatGPT发送“中国的首都是”时,它总能准确接上“北京”。这并非神秘直觉,而是基于严谨的数学与统计机制。以下从Token切入,逐步解析大模型推理的全过程。

接下来我们深入LLM内部,从Token起步,逐步拆解它预测下一个词的具体步骤。读完你将获得对文本生成能力的立体认知——不再是黑盒,而是有迹可循的数学魔法。
一、Token:LLM 的“最小货币单位”
人类看到“我爱人工智能”,但LLM不识别汉字,只认识数字。因此第一步是将自然语言切分成词元(Token)。
举例:英文词unhappiness不会被整体处理,而是切分为["un", "happi", "ness"]。中文类似:"我爱人工智能,自然语言处理很有趣"→["我", "爱", "人工智能", ",", "自然语言处理", "很", "有趣"]。
为何切得这么碎?
- 若只认完整词,英文有数十万单词,中文更达数百万,模型无法记忆。
- 切为子词后,模型仅需掌握数万个“基础积木”,组合效率极高。
- 更小的词表意味着更快运算和更低显存占用。
每个Token在模型内对应唯一编号(Token ID),例如“你”可能是57668。你输入Prompt后,模型接收到的是一组Token ID的数组。
这就是输入:一串数字。
二、Embedding:给数字赋予“灵魂”
Token ID是纯数字索引,不含语义。57668与57669之间无数学关系,不能说“你”+1=“好”。
LLM的第一步是将ID映射为高维向量,此过程称为Embedding。
每个Token ID对应一个向量(如1024维或4096维),可理解为该Token在高维空间中的坐标。语义相近的词,其向量在空间中距离近。例如“国王”与“王后”的向量距离很近,而“苹果”远离它们。
更有趣的是向量间可进行运算:国王 - 男性 + 女性 ≈ 王后,表明模型不仅学到词义,还习得语义关系。
LLM内部有一个巨大Embedding Matrix(嵌入矩阵),相当于“向量查找表”。当拿到Token ID57668,它直接去该表第57668行抽取对应向量。
但至此每个Token仍孤立——它们只知道自己是什么,不知在句子中的位置。
三、位置编码:让每个词知道“我在哪”
考虑这两句话:“我咬了狗”与“狗咬了我”。Token完全一样,但顺序不同,意思天差地别。Embedding本身不携带顺序信息,所以必须给每个向量叠加位置编码(Position Encoding)。
常见做法是用正弦余弦函数为每个位置生成固定向量,直接加在Embedding上。最终每个Token携带两类信息:语义信息(它是什么)和位置信息(它在哪)。
此时模型拥有带坐标和顺序的向量,但仍不知词间依赖关系——例如“它”指代谁?这需要自注意力机制。
四、自注意力:让模型“读懂上下文”
英文句子:The animal didn't cross the street because it was too tired. 这里的it指代animal还是street?人类一眼可知是动物,因为“tired”常修饰动物,但模型如何得知?答案在于Self-Attention(自注意力)。
Q、K、V 三部曲
对每个Token的向量,模型通过三个不同线性变换生成三个新向量:Q(Query)查询向量代表“我在找什么?”——例如代词it要找个先行词;K(Key)键向量代表“我能提供什么?”相当于名片告知属性;V(Value)值向量代表“我能提供什么实际内容?”即具体特征细节。
以上述句子为例,假设关注it与animal、street的关系:
token1:animal-> (Q1, K1, V1)token2:it-> (Q2, K2, V2)token3:street -> (Q3, K3, V3)模型用it的Query向量与句子中每个词的Key向量做点积,得到注意力分数:
score_it_animal = Q2 · K1score_it_street = Q2 · K3若score_it_animal远大于score_it_street,说明it与animal相关性更强,模型将更多注意力放在animal上。这些分数经Softmax归一化为权重,再乘以对应词的Value向量,加权求和后得到it位置的新表示——该表示融合了animal的语义细节(如“疲倦”属性),从而正确指代动物而非街道。
同理可用于歧义场景:“苹果手机”中模型通过注意力分数发现“苹果”与“手机”强相关,向量偏向电子设备;“我吃了苹果”中“吃了”拉高“苹果”作为水果的注意力分数,语义转向食物。这就是上下文消歧的核心——通过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,也可能切成Chat+G+PT。相同文本在不同模型上花费可能不同。切分越合理,模型理解越好——比如中文“人工智能”若被切成“人工”和“智能”会丢失整体语义,因此主流中文模型会保留常用词为完整Token。
2. 位置编码为什么重要?有没有更先进的做法?
早期用固定正弦编码,现在很多模型用可学习的位置编码,即把位置也当作参数训练。还有RoPE(旋转位置编码)等变体,本质都是给向量注入位置信息,仅实现方式不同。
3. 注意力机制真的能看到所有词吗?
理论上可以,但实际受限于上下文窗口(如8K、128K)。窗口外的词完全不可见,这就是长文本会丢失开头信息的原因——注意力矩阵计算量随窗口长度平方增长,模型只能截断。
写在最后
LLM的推理过程可浓缩为:它没有“思考”与“理解”,只有大规模统计模式匹配。但这种匹配的深度和广度使其看似拥有智能。作为开发者,了解底层细节能带来两个直接好处:调试Prompt时更有方向,知道模型“看”什么,从而精准提示;估算成本更准确,理解Token计数逻辑,避免账单惊吓。综合来看,LLM的运作本质上是一系列数学变换的组合,掌握这些原理能让AI应用更加可控和高效。