大模型是怎么学会"接话"的?从 Token 到自注意力一次讲清楚
LLM 看起来无所不能,但本质上它只会做一件事——预测下一个词。
一、LLM 的核心工作:预测下一个词
不管你问 ChatGPT 什么,它的底层逻辑都只有一句话:根据前面的输入,预测下一个最可能的词。
你 -> tokenID -> LLM(...) -> tokenID -> 好
比如你输入"你好",模型做的事就是:
- 看到"你" → 预测下一个大概率是"好"
- 看到"你好" → 预测下一个可能是"吗"、"。"、"!"
- 以此类推,一个词一个词地往外蹦
这个过程叫自回归生成——用已经生成的内容,预测下一个内容,循环往复,直到输出完整的结果。
中国的首都是 → LLM 计算概率 → 北京 92%,北平 4%,长安 2% → 输出"北京"
模型不是在"理解"问题,而是在做概率计算。它训练过海量文本,知道"中国首都"后面跟着"北京"的概率最大。
二、Token:LLM 世界的货币
你输入的 prompt 是一段自然语言,但模型不认识文字,它只认识数字。中间需要一个翻译步骤。
第一步:把文本切成 Token(词元)
Token 不一定是完整的"词",可以是子词、字符,甚至是标点符号。
unhappiness → ["un", "happy", "ness"] // 拆成三个子词
我爱人工智能 → ["我", "爱", "人工智能"] // 中文按词切分
为什么要把词拆开?如果模型只认完整的词,它需要记住几十万个英文单词和几百万个中文词汇,计算量太大了。切成子词后,只需要掌握几万块基础"积木",就能拼出所有词汇。
每个 Token 会对应一个 Token ID(数字编号),这就是模型真正看到的输入。
"你" → Token ID: 57668
"好" → Token ID: 24793
把 Token 理解为 LLM 的货币。 你花的钱是按 Token 计费的,模型处理的每一个单元都是 Token。
三、Embedding:把数字变成语义
Token ID 只是一个编号——57668 不靠近 57667,也不靠近 57669,它们之间没有任何数学关系。
但"你"和"好"在语义上是有关系的。怎么把这种关系告诉模型?
答案是用 Embedding。
Token ID(数字索引)→ Embedding(高维语义向量)
模型内部有一张巨大的向量查找表(Embedding Matrix)。拿到 Token ID 57668,就去 57668 号柜子里,把对应的向量取出来。
这个向量是一个高维空间中的坐标点,比如 1024 维。语义相近的词,在向量空间里的距离也近。
国王 → [0.85, 0.23, -0.12, ...] // 1024 维向量
王后 → [0.82, 0.21, -0.10, ...] // 距离很近
苹果 → [0.05, 0.87, 0.33, ...] // 距离很远
甚至可以做向量运算:
国王 - 男性向量 + 女性向量 ≈ 王后
这就是语义迁移——模型通过海量训练,在向量空间里构建了一套几何结构。
四、位置编码:给 Token 加上顺序
光有语义还不够。一样的词,顺序不同意思完全不同。
我咬了狗 🆚 狗咬了我
Embedding 不携带位置信息,所以需要给每个向量叠加一个 位置编码(Positional Encoding),告诉模型这个词在句子里的第几个位置。
每个 Token 最终携带两类信息:
| 信息 | 作用 | 类比 |
|---|---|---|
| 语义信息(是什么) | 这个词的含义 | 一个人的长相 |
| 位置信息(在哪里) | 这个词在第几位 | 这个人站第几排 |
有了位置编码,模型才知道"我"在前、"狗"在后,顺序不一样含义不同。
五、自注意力:模型怎么理解上下文
位置编码解决的是顺序问题,但还有一个更复杂的问题——指代。
看这句话:
The animal didn't cross the street because it was too tired.
这里的 it 指的是 animal 还是 street?对人类来说一目了然——动物过马路,累了的是动物。但模型怎么知道的?
答案是 Self-Attention(自注意力机制)。
自注意力的核心思想是:让每个词去"看"句子里的其他词,找出跟自己最相关的那些。
实现上,每个 Token 的 Embedding 会分解为三个向量:
| 向量 | 含义 | 类比 |
|---|---|---|
| Q(Query) | 我在找什么 | 你要搜的关键词 |
| K(Key) | 我能提供什么 | 网页的标题标签 |
| V(Value) | 我能贡献什么 | 网页的实际内容 |
计算过程:
it 的 Query → 和句子每个词的 Key 做点积运算 → 得到注意力分数
animal 的 Key 分数最高 → it 指代 animal
token1: animal → (Q₁, K₁, V₁)
token2: it → (Q₂, K₂, V₂)
score = Q₂ · K₁ ← it 和 animal 的相关性
分数越高,说明两个词的相关性越强。这样模型就知道:it 从 animal 那里"借"来了语义,指代的是动物。
这就是 Transformer 架构最核心的机制——靠自注意力,模型能理解长距离的依赖关系,不再局限于相邻的几个词。
总结一张图
输入文本 → Tokenization → Token IDs → Embedding → 语义向量 + 位置编码
↓
自注意力(QKV)
↓
预测下一个词
↓
重复直到结束
几个核心概念速记:
| 概念 | 一句话 |
|---|---|
| Token | LLM 的最小处理单元,不一定是完整的词 |
| Embedding | 把 Token ID 映射成高维语义向量 |
| 位置编码 | 给向量加上位置信息,区分顺序 |
| 自注意力 | QKV 机制,让词之间互相"关注",理解上下文 |
LLM 看起来复杂,拆开来看其实就是这几步——切词、向量化、加位置、算注意力、预测下一个词。循环往复,就生成了你能读懂的文本。