你手机输入法在你打完「今天天气」之后会建议几个候选词。你有没有想过,它是怎么知道接下来该推荐什么的?
答案是:它看过大量真实的文本,发现「今天天气」后面最常跟着的词,然后把这些词按可能性排序推荐给你。
这就是语言模型在做的事情——预测下一个词。Sophia、ChatGPT、Claude,所有语言模型的核心能力,都建立在这一件事上。
概率分布
更准确地说,语言模型不是预测一个词,而是给所有可能的下一个词各分配一个概率。
假设模型看到了「今天天气」这四个字,它可能给出这样的概率分布:
不错 → 15%
很好 → 12%
真热 → 8%
预报 → 5%
怎么 → 4%
很冷 → 3%
......(剩下几万个词各分到很小的概率)
所有概率加起来 = 100%
每一个词都有一个概率,所有概率加起来恰好等于 100%。概率最高的词最有可能被选中,但不是一定——这就是为什么语言模型每次生成的回答不一定完全一样。
如果用数学符号写,就是:
P(下一个词 | 已经出现的所有词)
竖线 | 读作「在……的条件下」。这整个表达式的意思是:在已经看到「今天天气」的前提下,下一个词是某个特定词的概率。
自回归生成:一个词一个词地写
语言模型生成文本时,不是一次性输出一整段话。它每次只预测一个词,把选出来的词接到末尾,然后基于更长的上下文再预测下一个词。这个过程一步一步地往前走:
第 1 步
已有文本:「从前有座山」
模型看到这五个字,预测下一个词
概率最高的是「,」
选中「,」,接到末尾
第 2 步
已有文本:「从前有座山,」
模型看到这六个字,预测下一个词
概率最高的是「山」
选中「山」,接到末尾
第 3 步
已有文本:「从前有座山,山」
模型看到这七个字,预测下一个词
概率最高的是「里」
选中「里」,接到末尾
第 4 步
已有文本:「从前有座山,山里」
……继续
注意一个关键的细节:每一步预测时,模型看到的是到目前为止的全部文本,不只是最后一个词。第三步预测「里」的时候,模型看到的是「从前有座山,山」这整个序列,而不只是「山」。正是因为能看到完整的上下文,它才知道在「从前有座山,山」后面应该接「里」而不是别的东西。
这种方式有一个名字:自回归生成。「自回归」的意思是:上一步的输出成为下一步的输入。模型的输出反馈回了自身,像滚雪球一样越写越长。
Sophia 回复你的时候就是这样工作的。她看到你说的全部话加上她自己已经写的部分,预测下一个词,写下来;再看到包括这个新词在内的全部文本,预测再下一个词,写下来——直到她预测出一个特殊的「结束」标记,表示这段话说完了。
训练:200 亿次练习
语言模型的训练逻辑非常直接。你有一大段真实的文本:
古希腊人把求知的最高形态称作智慧
训练的过程是这样的:
位置 1:模型看到「古」,预测第二个字。训练刚开始时参数全是随机的,所以模型可能给出这样的概率分布:
的 → 8% 啊 → 5% 希 → 0.1% …
正确答案是「希」,但模型只给了 0.1% 的概率——几乎没猜到。这个「猜得多差」会被计算成一个数字(下一章节会详细讲这个数字怎么算),然后根据这个数字调整参数,让模型下次给「希」更高的概率。
位置 2:模型看到「古希」,预测第三个字。正确答案是「腊」。同样的流程——计算差多远,调整参数。
位置 3:「古希腊」→ 正确答案「人」。计算,调整。
位置 4:「古希腊人」→ 正确答案「把」。计算,调整。
……以此类推。这段 14 个字的文本提供了 13 次学习机会——每一个位置都是一次「预测→对答案→调参数」的练习。
Sophia 的预训练数据有 200 亿个 token。每一个 token 都是一次练习。200 亿次之后,她的十亿个参数从随机噪声变成了能够生成通顺中文的状态。
想象一下这个过程:一开始,她看到「古」之后预测的下一个字完全是随机的——等概率地猜几万个候选字中的任何一个。经过无数次练习之后,她学会了「古」后面大概率是「希」「代」「老」「典」这几个字,而不是「桌」或「猫」。她学会了这种模式——不是因为有人告诉她规则,而是因为她在 200 亿个 token 中见过无数次这样的搭配。
Token 不是字
这里要澄清一个容易混淆的概念。上面为了好懂,说的都是「字」和「词」,但模型实际处理的最小单位不是字也不是词,而是 token。
Token 是 tokenizer(分词器)切出来的片段。一个汉字通常被切成 1 到 2 个 token,一个常见英文词通常是 1 个 token,一个不常见的英文词可能被切成 2 到 3 个 token。比如:
「你好」 → 可能是 1 个 token,也可能是 2 个
「transformer」→ 可能是 1 个 token
「unforgettable」→ 可能是 「un」「forget」「table」三个 token
为什么不直接按字切?为什么不直接按词切?Tokenizer 到底是怎么工作的?这些问题是下一个单元的主题。现在只需要记住:当你看到「200 亿个 token」时,它指的不是 200 亿个汉字,而是 200 亿个由 tokenizer 切出来的文本片段。
语言模型 ≠ 对话模型
最后一个需要在这里说清楚的事。
预训练结束之后的语言模型,只会做一件事:续写。它学到的能力是「给定前面的文本,预测后面是什么」。
如果你给它一段对话格式的文本:
用户:你好
助手:
它不一定会扮演「助手」来回答你。它可能会继续往下写:
用户:你好
助手:你好,有什么可以帮你的吗?
用户:帮我查一下明天的天气
助手:好的,明天……
——它把整段对话接着编了下去,替用户和助手两方都写了台词。这不是我们想要的行为。我们想要的是它只扮演「助手」那一方,针对用户说的话给出回应。
Sophia 预训练之后也是这样一台续写机器。让她从续写器变成对话者,需要额外的训练——叫做 SFT(监督微调)和 DPO(偏好优化),分别是第十一和第十二单元的内容。
预训练只负责教她一件事:语言本身是怎么运作的——哪些词跟在哪些词后面,什么样的句子是通顺的,什么样的段落是连贯的。这是一切后续能力的地基。
下一章节要解决一个紧接着的问题:上面说到「计算模型的预测有多差」,这个「多差」到底怎么变成一个精确的数字?