LLM如何预测下一个词?从Token到概率:一文看懂大模型推理内幕

时间:2026-07-03 08:50:47 来源:互联网

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

LLM如何预测下一个词?从Token到概率,一文看懂大模型推理内幕

接下来我们深入LLM内部,从Token起步,逐步拆解它预测下一个词的具体步骤。读完你将获得对文本生成能力的立体认知——不再是黑盒,而是有迹可循的数学魔法。

一、Token:LLM 的“最小货币单位”

人类看到“我爱人工智能”,但LLM不识别汉字,只认识数字。因此第一步是将自然语言切分成词元(Token)。

举例:英文词unhappiness不会被整体处理,而是切分为["un", "happi", "ness"]。中文类似:"我爱人工智能,自然语言处理很有趣"["我", "爱", "人工智能", ",", "自然语言处理", "很", "有趣"]

为何切得这么碎?

  1. 若只认完整词,英文有数十万单词,中文更达数百万,模型无法记忆。
  2. 切为子词后,模型仅需掌握数万个“基础积木”,组合效率极高。
  3. 更小的词表意味着更快运算和更低显存占用。

每个Token在模型内对应唯一编号(Token ID),例如“你”可能是57668。你输入Prompt后,模型接收到的是一组Token ID的数组。

这就是输入:一串数字。

二、Embedding:给数字赋予“灵魂”

Token ID是纯数字索引,不含语义。5766857669之间无数学关系,不能说“你”+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成为下一个词的概率。

以“中国的首都是”为例:

  1. “北京”概率:92%
  2. “北平”概率:4%
  3. “长安”概率:2%
  4. 其他所有词:共2%

模型选择概率最高的(或按温度采样),输出对应Token ID。然后该新Token被追加到输入序列末尾,模型继续预测下一个词。这就是自回归生成:每次生成一个词,将新词加入上下文,再生成下一个,直到遇到结束标记或达到最大长度。

六、串起全流程:一个完整的推理过程

现在将所有步骤串联,看一次完整生成经历什么:

  1. 输入:“中国的首都是”
  2. Tokenization:切分为["中国", "的", "首都", "是"],转成Token ID[123, 456, 789, 101]
  3. Embedding:每个ID查表得到对应语义向量(如1024维)
  4. 位置编码:给每个向量加上位置信息(位置0,1,2,3的编码)
  5. 多层自注意力:经过N层Transformer块,每层有QKV计算,使每个位置向量融合上下文
  6. 输出概率:取最后一个位置向量,线性变换+Softmax,得到词表大小的概率分布
  7. 采样:按概率选出“北京”(概率最高),输出Token ID
  8. 循环:将“北京”加入输入,继续预测下一个词……直至结束

整个过程计算量极大,但核心思路是不断重复步骤5~7。

七、一些你可能关心的“实战问题”

1. 为什么 Tokenization 会影响计费和效果?

计费按Token数算,不同模型的分词器(Tokenizer)切法不同。例如英文ChatGPT可能被切成一个Token,也可能切成Chat+G+PT。相同文本在不同模型上花费可能不同。切分越合理,模型理解越好——比如中文“人工智能”若被切成“人工”和“智能”会丢失整体语义,因此主流中文模型会保留常用词为完整Token。

2. 位置编码为什么重要?有没有更先进的做法?

早期用固定正弦编码,现在很多模型用可学习的位置编码,即把位置也当作参数训练。还有RoPE(旋转位置编码)等变体,本质都是给向量注入位置信息,仅实现方式不同。

3. 注意力机制真的能看到所有词吗?

理论上可以,但实际受限于上下文窗口(如8K、128K)。窗口外的词完全不可见,这就是长文本会丢失开头信息的原因——注意力矩阵计算量随窗口长度平方增长,模型只能截断。

写在最后

LLM的推理过程可浓缩为:它没有“思考”与“理解”,只有大规模统计模式匹配。但这种匹配的深度和广度使其看似拥有智能。作为开发者,了解底层细节能带来两个直接好处:调试Prompt时更有方向,知道模型“看”什么,从而精准提示;估算成本更准确,理解Token计数逻辑,避免账单惊吓。综合来看,LLM的运作本质上是一系列数学变换的组合,掌握这些原理能让AI应用更加可控和高效。