一、先看一个你每天都在做的动作
把这句话盖住最后一个字,自己试着填一下:
今天天气很 ___
你脑子里冒出来的大概率是"好"“热"“冷"“糟糕"这几个词之一。你不会填"香蕉”,也不会填"的”。
没有人教过你一张"天气后面能接什么词"的表。你只是读过足够多带"天气很"的句子,然后这个动作变得毫不费力——甚至你都没意识到自己在做预测,你以为自己是在"理解"这句话。
语言模型要做的,就是把你刚才那个下意识的动作,变成一个可以计算的函数:
给定前面的文字,输出"接下来最可能是什么"的一个概率排序。
这就是这门课要讲的全部东西的起点。它朴素到有点可疑——“猜下一个词"凭什么能变成"理解语言”?这个问题的答案没有你想的那么玄,但也不是一句话能说完的,这正是这门课存在的理由。
二、打个比方:完形填空,但是给它打分
你在学校做过完形填空。老师给的答案是唯一的,答对答错很分明。
语言模型做的是一个没有唯一答案、但有排序的版本:
输入: 今天天气很 ___
模型输出(不是一个词,是一整个概率排序):
好 35%
热 18%
冷 12%
糟糕 9%
舒服 6%
...
香蕉 0.0001%
的 0.0002%
关键的转变在这里:语言模型从不"回答”,它只是把它见过的语言规律,翻译成一个数字排序。 “好"排第一,不是因为模型"觉得天气好”,是因为在它读过的海量文本里,“今天天气很"后面接"好"字的比例最高。
⭐ 这个排序动作,就是语言模型唯一在做的事情。 后面 30 讲要讲的所有东西——怎么让这个排序更准、怎么让它算得动、怎么让它听指令、怎么让它多想一会儿——全部是在这一个动作外面加东西,动作本身从没变过。
语言模型(Language Model):一个函数,输入一段文字(术语叫 上下文,context),输出词表中每一个候选词作为"下一个词"的概率分布。
三、把"猜词"写成一个明确的任务
要让"猜下一个词"变成一件可以计算、可以训练的事情,需要把它钉死成一个明确的数学任务。这一节只讲任务是什么,不讲模型内部怎么算(那是第 5、9 讲的事)——这里我们只关心:输入是什么,输出是什么,好坏怎么打分。
把文字切成一个个的单元,叫 token(第 7 讲会讲这一步到底怎么切,这里先假设"一个 token 约等于一个词”)。一段文字就是一串 token:
x₁, x₂, x₃, ..., xₜ
语言模型要算的是:
P(xₜ₊₁ | x₁, x₂, ..., xₜ)
读作:“已知前面 t 个 token,第 t+1 个 token 是词表里每一个候选词的概率分别是多少。”
这不是输出一个词,是输出一整个概率分布——词表里有多少个候选 token(现代模型的词表通常几万到十几万),这个分布就有多少个数字,加起来等于 1。
要检验模型猜得准不准,最直接的办法就是:看它有没有把最高的概率,分配给语料里真实出现的那个词。 训练的过程(第 6、13 讲会展开)本质上就是不断调整模型内部的参数,让这个概率尽可能地往"真实答案"那个词上靠。
⚠️ 这里有一个经常被跳过的重点:这个任务的"标准答案"不需要任何人去标注。给模型一段已经存在的文本,前面的字就是输入,后面紧跟的那个字天然就是"正确答案"。这种不需要人工标注、答案就藏在数据本身里的训练方式,叫自监督学习(self-supervised learning),第 13 讲会正式定义它。它是这整个领域能够用到互联网规模数据的根本原因——如果每一条训练样本都要人工标注,今天的规模是不可能做到的。
四、为什么"猜词"会逼出"理解"
朴素的疑问来了:这么简单的一个任务——不断猜下一个字——为什么最后会表现得像是"看懂了"文字?
看一个例子:
句子 A: 苹果公司今天发布了新款 ___
句子 B: 他咬了一口 ___
两句话都在"苹果"这个词之后,但接下来最可能出现的词完全不同:A 后面大概率是"手机"“芯片"“系统”,B 后面大概率是"苹果"“三明治”。
要把这两种情况的概率排序都猜准,模型没有别的办法,只能在内部区分出"苹果"在这句话里指的是公司还是水果——尽管从来没有人明确告诉过它"苹果有两个词义"这件事。
⭐ 这就是"猜词"逼出"理解"的机制:语法、常识、事实、语境消歧,没有一样是被直接教给模型的规则(不像传统专家系统那样写一堆 if-else)。它们全部是为了把"下一个词"猜准,模型被迫在内部学会的副产品。你可以把这想象成一场极端的压缩游戏:
⭐ 猜下一个词猜得越准,说明你越懂这段文字背后的规律——而"用一套规律去解释大量具体现象”,换一个说法,就是压缩。预测和压缩在数学上是同一件事的两种说法:能把一段文字压缩得越小,就等价于能把它的下一个字猜得越准。这条"预测 = 压缩"的洞察不属于哪一代模型,它是这个任务本身的数学性质,不会因为模型换代而过时。
五、这门课后面 30 讲,都在赌同一件事
“猜下一个词"这个任务,其实不是新东西——上世纪就有统计语言模型在做同一件事(用计数的方式估算"某个词后面接某个词"的频率,叫 n-gram 模型)。它们也能做出还算合理的猜测,但从来没有表现出接近"理解"的能力。
那为什么今天的模型可以?
答案不是"任务变了”,任务从头到尾就是"猜下一个词"。变的是规模——数据的规模、模型的规模、算力的规模。
这门课接下来的大部分篇幅,其实都在回答同一个问题的不同侧面:
如果把"猜下一个词"这件事,用一个远比计数更强的函数(神经网络)、在远比过去更大的数据和算力上去做,会发生什么?
第 2 讲会先说明,为什么早期的神经网络方案(RNN/LSTM)在这条路上很快撞到了墙——这个铺垫是必要的,因为 Transformer(第 9 讲开始)正是为了绕开这堵墙而设计出来的。第 15 讲的 Scaling Laws 会回答"规模变大,效果是不是必然变好"这个问题的精确版本。
六、这个目标函数,从一开始就没承诺什么
在往下讲之前,有一件事必须现在就说清楚,因为它会决定你怎么理解后面几乎所有单元。
“猜下一个词"这个目标函数,优化的是统计上下一个词最可能是什么,不是事实上正确的答案是什么。
这两件事在训练数据里大部分时候恰好一致——因为人类写下的文字大体符合事实、符合逻辑——但"大部分时候一致"和"必然一致"是两回事:
| 目标函数实际在做的事 | 我们容易误以为它在做的事 |
|---|---|
| 输出统计上最可能的下一个 token | 输出事实正确的下一个 token |
| 从训练数据的分布里插值 | 从对世界的直接观察中推理 |
| 续写一段看起来合理的文字 | 理解你在问什么、想不想回答 |
⚠️ 这一节要立的规矩贯穿全课:模型没有被赋予"这句话是不是真的"这个概念,也没有被赋予"意图”——它没有"想不想回答你"这件事,从目标函数的角度看,它永远只是在续写一段最可能的文字。第 29 讲会证明,幻觉不是模型"坏了",是这个目标函数从一开始就没有承诺"真实"这个东西,只承诺了"看起来合理"。 第 16–20 讲要讲的对齐与微调,很大一部分工作,就是在这个只管"合理"的目标函数外面,想办法再叠加"真实"“有帮助"“听指令"这些目标——但叠加的方式和代价,才是那几讲真正的重点。
七、这一讲和后面课程的关系
这一讲定义的"猜下一个词”,是贯穿全课 31 讲唯一没有变过的主线,后面每个单元都是在这条主线上加东西:
Unit 1(本讲) 定义任务:猜下一个词
Unit 2 补数学基础:这个"猜"到底是怎么用数字算出来的
Unit 3 Transformer:用一个更强的函数去猜
Unit 4(预训练) 把"猜"这件事在海量数据上真正跑起来
Unit 5(对齐) 在"猜得准"之外,叠加"猜得对""听指令"
Unit 6(推理) 猜的时候怎么算得快、算得省
Unit 7(Agent) 把"猜一个词"串成"做一件事"
Unit 8(安全) 这套目标函数在结构上做不到什么
八、本讲小结
- 语言模型只做一件事:给定前面的文字,输出词表中每个候选 token 作为"下一个"的概率分布。这个动作贯穿全课,后面所有机制都是加在它外面的。
- 形式化写法是
P(xₜ₊₁ | x₁...xₜ),输出是一整个概率分布,不是单个词。 - ⭐ 训练不需要人工标注:任何已有文本里,前面的字是输入,紧跟着的字天然就是答案,这叫自监督学习——是这个领域能吃下互联网规模数据的根本原因。
- ⭐ “理解"是"猜准"的副产品:要把不同语境下同一个词的下一个词猜对,模型被迫在内部学会消歧、语法、常识,没有一条是被直接教的规则。
- 预测和压缩是同一件事的两种说法:猜得越准,等价于对语言背后的规律掌握得越好。这条洞察不属于哪一代具体模型,不会过时。
- 今天效果好靠的是规模,不是任务变了:n-gram 模型几十年前就在做同一个任务,规模不够,表现不出"理解”。
- ⚠️ 目标函数只管"看起来合理”,不管"是不是真的"——这是全课最重要的伏笔,第 29 讲的幻觉、第 16–20 讲的对齐,都是这一节的直接后果。
思考题
- 为什么"今天天气很___“和"苹果公司今天发布了新款___“这两个例子,能说明模型必须在内部做语境消歧,而不是简单地查一张"某词后面接某词"的表?
- n-gram 模型(用计数估算词频)也是在做"猜下一个词”,为什么它做不到接近"理解"的效果?如果只凭本讲的内容,你能猜出可能的原因吗(不要求答对,第 2 讲会正式回答)?
- “预测 = 压缩"这个说法里,“压缩"具体指的是什么?如果一个模型能把某段文字的下一个词全部猜对,这段文字理论上可以被压缩到多小?
- 为什么说这个目标函数"没有承诺真实性”?试着造一个例子:一句话在统计上是"最可能的下一个词”,但事实上是错的。
- 自监督学习不需要人工标注答案,这件事对"数据规模能做多大"有什么影响?如果反过来,每条数据都要人标注,会限制在什么量级?