游乐游手机版
首页/AI教程/文章详情

大模型预测下一个词:从Token到概率的推理内幕

时间:2026-07-03 15:44
LLM预测下一个词的过程从分词开始,将文本切分为词元并映射为数字编号,再通过嵌入矩阵转为高维语义向量,叠加位置编码后进入多层自注意力机制,利用查询、键、值向量动态计算词语间关联,最后对序列末位向量进行线性变换与Softmax,输出词表概率分布,按概率采样生成新词并循环直至结束。

你有没有过这样的好奇——当你对着 ChatGPT 敲下“中国的首都是”,它为什么会毫不犹豫地接“北京”,而不是“上海”或者“南京”?明明它只是一个吞进文本、吐出文本的程序,里面到底发生了什么?

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

今天就顺着这条线,从 Token 这个最小单元开始,一步步拆解大模型预测下一个词的全过程。读完之后,你会发现“凭空生成”文本的能力不再是神秘黑盒,而是一套有迹可循的数学机制。

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

我们读到的“我爱人工智能”是一串汉字,但 LLM 不认汉字,它只认数字。所以第一步,就是把自然语言切碎成一个个词元(Token)。

举个例子:英文词 unhappiness,LLM 不会整体处理,而是切成 ["un", "happi", "ness"]。中文也一样:"我爱人工智能,自然语言处理很有趣"["我", "爱", "人工智能", ",", "自然语言处理", "很", "有趣"]

为什么要切这么碎?

  • 如果只认完整词,英文几十万单词,中文几百万,模型根本记不过来;
  • 切成子词后,模型只需要掌握几万个“基础积木”,组合效率高得多;
  • 更小的词表意味着更快的运算和更低的显存开销。

每个 Token 在模型内部都有一个唯一的编号(Token ID),比如“你”可能对应 57668。你把 Prompt 发过去,模型收到的就是一堆 Token ID 数组。

输入,说到底就是一串数字。

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

Token ID 只是纯粹的索引,没有语义。5766857669 之间不存在任何数学关系——你不能说“你”+1=“好”。

LLM 的第一步操作,就是把 ID 映射成一个高维向量,这个过程叫做 Embedding。

每个 Token ID 都对应一个向量(比如 1024 维或 4096 维),这个向量可以理解为该 Token 在高维空间中的坐标。语义相近的词,它们的向量在空间里距离就近。比如“国王”和“王后”的向量距离很近,而“苹果”离它们很远。

更有意思的是,向量之间还能做运算:
国王 - 男性 + 女性 ≈ 王后
这说明模型在训练中不仅学到了词义,还学到了语义关系。

LLM 内部有一张巨大的 Embedding Matrix(嵌入矩阵),相当于一张“向量查找表”。当拿到 Token ID 57668,它直接去这张表的第 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):值向量,代表“我能提供什么实际内容?”——具体特征细节。

还是上面那个句子。假设我们只关注 itanimalstreet 的关系:

token1:animal -> (Q1, K1, V1)
token2:it -> (Q2, K2, V2)
token3:street -> (Q3, K3, V3)

模型要做的是:用 it 的 Query 向量去和句子中每个词的 Key 向量做点积,得到一组注意力分数:

score_it_animal = Q2 · K1
score_it_street = Q2 · K3

如果 score_it_animal 远大于 score_it_street,就说明 itanimal 的相关性更强,模型会把更多注意力放到 animal 上。这些分数经 Softmax 归一化变成权重,再分别乘以对应词的 Value 向量,最后加权求和,得到 it 位置的新表示——这个新表示里融合了 animal 的语义细节(比如“疲倦”),从而正确地让 it 指代动物而非街道。

同样的道理可以解释歧义消解:

  • “苹果手机” → 注意力分数会让“苹果”和“手机”强相关,向量偏向电子设备;
  • “我吃了苹果” → 上下文中的“吃了”会拉高“苹果”作为水果的分数,语义转向食物。

这就是上下文消歧的核心——不是靠词典硬查,而是靠 QKV 的动态加权。

你可能会问:Q、K、V 是怎么来的?它们都是通过训练学出来的权重矩阵,直接对原始向量做线性变换。模型会自己调整这些矩阵,让注意力分数最有利于预测下一个词。

五、从注意力到预测:概率分布和自回归

经过多层自注意力(Transformer 的 Decoder 部分),模型已经为当前序列中每个位置生成了富含上下文信息的向量。接下来要做的事,就是预测下一个词。

对于最后一个位置(当前输入序列的末尾),模型取它的向量,通过线性层 + Softmax,映射成词表大小的概率分布。比如词表有 5 万个 Token,输出就是一个 5 万维的向量,每个维度代表对应 Token 成为下一个词的概率。

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

  • “北京” 的概率:92%
  • “北平” 的概率:4%
  • “长安” 的概率:2%
  • 其他所有词:共 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 计数逻辑,避免账单惊吓。

下次再调用大模型 API 时,不妨想想那一串串向量在空间中跳舞的样子——你会发现,它其实没那么神秘,反而有点可爱。

祝你代码无 Bug,Token 永不浪费。

来源:https://juejin.cn/post/7657419529417637894
上一篇最新Xshell安装远程连接零门槛图文教程 下一篇企业AI连接器:工具层而非接口层
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
批处理BAT入门教程第一篇
AI教程 · 2026-07-03

批处理BAT入门教程第一篇

提供13个批处理实战技巧,覆盖全盘查找并删除文件夹或文件、拷贝移动文件、创建畸形文件夹及设置隐藏属性等场景,可一键完成系统维护与文件管理工作,极大提升自动化操作效率和便捷性。

从零开始批处理命令For循环详解与实战案例
AI教程 · 2026-07-03

从零开始批处理命令For循环详解与实战案例

批处理For命令支持 d、 l、 r、 f四个参数。 d仅列出当前目录下的目录名; r递归搜索指定路径及其子目录中的文件; l生成数值序列; f可解析文件、字符串或命令输出,通过delims、tokens、skip、eol等选项灵活处理内容。

批评你的人是你生命中的贵人
AI教程 · 2026-07-03

批评你的人是你生命中的贵人

批评你的人往往最值得珍惜,因为他们关注你、助你成长。面对批评应包容反思,用行动改进而非辩解。接受批评是自我完善的过程,能让人少走弯路,避免重复犯错。这样的人正是生命中的贵人,值得感恩与珍惜。

测试人员角色定位与职责详解
AI教程 · 2026-07-03

测试人员角色定位与职责详解

测试人员角色经历了从找问题、保证质量到分析风险的转变,最终核心职责是提供关键信息,协助团队创造优秀产品。这包括识别问题、评估风险及帮助团队了解项目状态,而非单纯把关或追求完美。

经营成功测试生涯的实用方法与策略
AI教程 · 2026-07-03

经营成功测试生涯的实用方法与策略

一、测试生涯的起点 1989年,我在田纳西大学攻读研究生时,意外地从软件开发人员转行成为一名软件测试工程师。这并非我主动选择,说起来还有些戏剧性——某个早晨,教授质问我为何缺席那么多开发会议,我解释说这些会议总是安排在周末早上,对我这个第一次离家、刚入学的学生来说实在不便。结果呢?等待我的不是解聘通