LLM 是怎么预测下一个词的?从 Token 到 Transformer 的内部流程

0 阅读8分钟

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 看起来像是在理解语言,但从底层流程来看,它大致经历了这些步骤:

  1. 用户输入自然语言 prompt
  2. Tokenizer 把文本切成 token
  3. 每个 token 被转换成 Token ID
  4. Token ID 通过 Embedding Matrix 查表,变成语义向量
  5. 加入位置编码,让模型知道词的顺序
  6. 通过 Self-Attention 理解上下文关系
  7. 输出下一个 token 的概率分布
  8. 选择 token 后继续生成

所以可以把 LLM 的工作理解成一句话:

大模型不是一次性写完整段答案,而是在上下文基础上,一步一步预测下一个最可能出现的词元。

Token 是模型处理语言的货币,Embedding 是把货币换成语义坐标,Self-Attention 则是让每个词元在上下文中重新理解自己。

最后,模型通过不断预测下一个 token,生成了我们看到的完整回答。