LLM 是怎么预测下一个词的?从 Token 到 Transformer 的内部流程
前言
我们平时和大模型聊天时,感觉它好像真的“理解”了我们说的话。
比如你输入:
中国的首都是
模型很可能会接着输出:
北京
但从底层来看,LLM 并不是像人一样先理解整句话,再思考答案。它最核心的工作其实很简单:
根据前面的内容,预测下一个最可能出现的 token。
这篇文章就从 Token、Embedding、位置编码和 Self-Attention 这几个关键环节,简单看看 LLM 拿到一段文字之后,内部到底经历了什么。
1. Token:大模型处理文本的最小单位
用户输入的 prompt 本质上是一段自然语言,比如:
你好
但是模型不能直接处理人类语言,它需要先把文字切分成一个个更小的单位,这个过程叫做 Tokenization。
切分出来的单位叫做 Token,中文里可以理解为“词元”。
大模型处理文本时,最小单元不一定是完整的“词”,也可能是:
- 子词
- 字符
- 标点符号
- 一小段常见组合
所以用“词元”来表达会更准确,因为它指的是模型真正用于计算和计费的最小单位,而不是语言学意义上的完整词语。
比如英文单词:
unhappiness
模型通常不会把它当成一个完整的词,而可能拆成:
un / happi / ness
再比如:
tokenization
也可能被拆成:
token / ization
如果模型只认识完整单词,就需要记住几十万个英文单词,甚至几百万个中文词汇,词表会非常庞大,效率也会降低。
所以 Tokenization 的作用就是:
把自然语言拆成模型更容易处理的小块。
2. Token ID:文字变成数字
Token 被切分出来之后,还不能直接进入模型计算。
模型会给每个 token 分配一个编号,也就是 Token ID。
比如:
你 → Token ID 57668
这个数字本身没有语义。
也就是说,57668 只是一个编号,不能通过加减乘除理解出“你”的意思。
它更像是字典里的页码:
Token ID 只是告诉模型去哪里查这个词元。
例如:
你 → Token ID → LLM → Token ID → 好
用户看到的是文字,但模型内部处理的是一串数字编号。
3. Embedding:把 Token ID 变成语义向量
Token ID 虽然方便索引,但它本身没有意义。
所以模型需要把 Token ID 转换成一个真正带有语义信息的向量,这一步就叫做 Embedding。
可以简单理解为:
Embedding 就是把一个词元变成高维空间里的一个坐标点。
模型内部有一个巨大的向量查找表,叫做:
Embedding Matrix
当模型看到 Token ID 57668,也就是“你”时,它会去 Embedding Matrix 里找到第 57668 个位置,把对应的向量取出来。
这个向量可能有很多维,比如 1024 维、4096 维,甚至更高。
这时候,“你”就不再只是一个编号,而是变成了一个带有语义信息的高维向量。
4. 为什么向量能表达语义?
Embedding 的神奇之处在于:
语义相近的词,在向量空间里的距离通常也比较近。
比如:
你
我
他
这些词在语义空间中可能比较接近。
而:
苹果
篮球
数据库
它们和“你”的距离可能就会更远。
这说明模型在训练过程中,会慢慢形成一个语义空间。
在这个空间里,每个词元都有自己的位置。语义越接近,位置就越接近;语义越不同,距离就越远。
经典例子是:
国王 - 男性 ≈ 王后 - 女性
这说明向量不仅能表示语义,还能在一定程度上表示语义之间的关系。
也可以理解为:
模型训练的过程,就是在构建一个复杂的语义几何空间。
5. 位置编码:告诉模型词的顺序
光有语义还不够。
因为同样几个词,顺序不同,意思可能完全不同。
比如:
我咬了狗
狗咬了我
这两句话用到的字几乎一样,但含义完全相反。
Embedding 本身只表示“这个 token 是什么”,并不天然知道“它在句子中的第几个位置”。
所以模型需要引入 位置编码,也就是 Position Encoding。
位置编码的作用是:
告诉模型每个 token 在句子中的位置。
最终,每个 token 输入模型时,会同时携带两类信息:
语义信息:它是什么
位置信息:它在哪里
也就是说,模型看到的不是单纯的“我”“狗”“咬”,而是:
第 1 个位置的“我”
第 2 个位置的“咬”
第 3 个位置的“狗”
这样模型才能理解上下文顺序。
6. Self-Attention:模型怎么理解上下文?
只知道单个词的意思还不够。
比如这句话:
The animal didn't cross the street because it was too tired.
这里的 it 指的是谁?
是 animal,还是 street?
人类一看就知道 it 更可能指 animal,因为“太累了”的通常是动物,而不是街道。
模型要解决这种上下文关系,就需要靠 Transformer 里的核心机制:
Self-Attention,自注意力机制。
Self-Attention 的作用可以简单理解为:
让每个 token 去观察句子里的其他 token,判断谁和自己关系更大。
7. Q、K、V:自注意力的三个角色
在 Self-Attention 里,每个 token 的 Embedding 会被转换成三种向量:
Q:Query
K:Key
V:Value
可以这样理解:
Q:我在找什么?
Query 是当前 token 发出的查询。
比如 it 这个词,它会问:
我到底指的是谁?
K:我能被怎么匹配?
Key 像是每个 token 的名片。
句子里的 animal、street、tired 都会提供自己的 Key,告诉其他 token:
我这里有什么信息,别人可以来匹配我。
V:我真正贡献什么信息?
Value 是真正被传递出去的信息内容。
如果 it 最终认为 animal 更相关,那么 animal 对应的 Value 就会更多地影响 it 的表示。
可以简单记成:
Q 是问题
K 是标签
V 是内容
8. Attention 分数:模型怎么判断谁更重要?
当 it 发出 Query 之后,它会拿自己的 Query 向量,和句子里每个 token 的 Key 向量做计算。
这个计算通常是点积。
点积结果越大,说明两个 token 越相关。
比如:
it 和 animal 的相关性分数高
it 和 street 的相关性分数低
那么模型就会更关注 animal。
最后,模型会根据这些注意力分数,对不同 token 的 Value 进行加权汇总。
也就是说,Self-Attention 不是只看一个词,而是让每个词都能根据上下文重新调整自己的语义。
所以 it 原本只是一个代词,但经过上下文计算后,它的表示会更偏向 animal。
9. LLM 的核心:预测下一个 Token
经过 Tokenization、Embedding、位置编码、Self-Attention 等一系列处理之后,模型最终要做的事情还是:
预测下一个 token 的概率分布。
比如输入:
中国的首都是
模型可能会给出这样的概率:
北京:92%
北平:4%
长安:2%
其他:2%
然后模型会根据概率选择一个 token 输出。
如果选择了“北京”,那么下一步它会把前面的内容变成:
中国的首都是北京
然后继续预测下一个 token。
这个过程会不断重复:
预测下一个词元
把词元接到上下文后面
再预测下一个词元
再继续生成
这就是 自回归生成。
简单说就是:
LLM 是一个不断根据前文预测下一个 token 的系统。
10. 总结
LLM 看起来像是在理解语言,但从底层流程来看,它大致经历了这些步骤:
- 用户输入自然语言 prompt
- Tokenizer 把文本切成 token
- 每个 token 被转换成 Token ID
- Token ID 通过 Embedding Matrix 查表,变成语义向量
- 加入位置编码,让模型知道词的顺序
- 通过 Self-Attention 理解上下文关系
- 输出下一个 token 的概率分布
- 选择 token 后继续生成
所以可以把 LLM 的工作理解成一句话:
大模型不是一次性写完整段答案,而是在上下文基础上,一步一步预测下一个最可能出现的词元。
Token 是模型处理语言的货币,Embedding 是把货币换成语义坐标,Self-Attention 则是让每个词元在上下文中重新理解自己。
最后,模型通过不断预测下一个 token,生成了我们看到的完整回答。