串讲:从 N-gram 到 Transformer
学了这么多细节,怎么把它们重新串成一条线?——每一代技术,都是来解上一代死结的
不学新东西,只把学过的串成一条线
到上一课为止,你已经亲手「逼出」了从 N-gram 到 Transformer 的每一块零件。但零件多了,细节难免忘—— N-gram 为什么不行?词向量到底神在哪?RNN 和 LSTM 差在哪一步?这一课不引入任何新概念, 只做一件事:把这些珠子重新串成一条项链。
串这条线,只需要记住一个叙事母题:语言难在哪,每一代技术就在补哪一刀。语言的难,可以归成三句话——
接下来六站,每一站都是一次「上一代留下一个死结 → 这一代用一个新想法解开它 → 但又冒出新的死结」。 顺着这条链走一遍,整套 NLP 技术史就立起来了。
N-gram:最朴素的起点——数数
最早的语言模型干脆不懂语法、不懂语义,只会数数。它赌的是一条朴素假设(马尔可夫假设): 下一个词只跟前面紧挨着的那几个词有关。只看前 1 个词叫 2-gram,看前 2 个叫 3-gram,以此类推。
怎么用?把语料里的搭配频率数出来就行。比如要接「今天天气很 ___」,就去数「很」后面都跟过些什么:
于是模型赌概率最高的那个:「好」。
这招在短搭配上意外地好用,撑起了手机输入法和早期语音识别几十年。可它有两道硬伤。头一道是稀疏: 词表动辄五万,3-gram 的组合就有 5 万³ ≈ 125 万亿种,再大的语料也只见过其中极小一撮—— 你随口说一句没人说过的话,它数出来的频率就是 0,于是整句话被判「不可能」。后人用各种「平滑」给零概率打补丁,终究治标不治本。
第二道是记性短:它只回头瞄两三个词。「他在法国长大……(中间隔了一长串)……所以他说一口流利的 ___」, 这种跨越几十个词的线索,N-gram 根本够不着。
词向量:先把「符号孤立」这一刀补上
N-gram 把每个词当成一个孤立编号,机器永远不知道「猫」和「小猫」有关系。词向量换了个思路:把每个词变成一组数字(几百维的向量),让意思相近的词,向量也相近——夹角小、余弦相似度高(第 2 课)。
这些数字怎么来?靠一条朴素得近乎废话的假设——近朱者赤:一个词的意思,由它常出现的上下文决定(第 15 课)。 训练时让模型反复做一道完形填空:拿一个词去预测它周围的词(或反过来)。「猫」和「小猫」总出现在相似语境里 (「___ 在睡觉」「喂 ___」),一来二去就被挤到了相邻的位置。
最惊艳的是,连词与词之间的关系都被编码成了向量空间里的方向,于是加加减减就能做类比:
北京 − 中国 + 法国 ≈ 巴黎
这些都不是人为设计,而是从语料里自然浮现的。语义第一次有了坐标,举一反三有了立足点。
神经网络语言模型:用词向量绕开「稀疏」
光有词向量还不算语言模型——它本身还不会「预测下一个词」。把词向量喂进一个神经网络来干这件事, 就是前馈神经网络语言模型(第 16 课):把前几个词的向量拼接起来,过几层网络, 最后用 Softmax(第 11 课)吐出「下一个词是谁」的概率分布。
关键的飞跃在泛化。N-gram 见过「我吃苹果」,碰到「我吃梨」却傻眼——因为「梨」是个它没数到的新符号。 而 NNLM 知道「苹果」和「梨」的向量很近,于是「我吃苹果」学到的本事,能自动迁移到「我吃梨」上。 稀疏的诅咒,就这样被词向量的相似性绕开了。这是 2003 年 Bengio 等人埋下的伏笔,也是日后一切神经语言模型的雏形。
但它身上还留着 N-gram 的一道旧疾:输入是固定长度的——一次只能吃前面 N 个词, 超出窗口的更早信息,照样看不见。要真正记住远处,还得换一种结构。
RNN:给网络装上「记忆」,砸开固定窗口
固定窗口的根子,在于网络一次只吃固定数量的词。RNN(第 17 课)换了个读法——逐词阅读、边读边记: 每读一个词,就把「这个词 + 上一刻的记忆」揉成一份新的记忆(隐藏状态),再传给下一步。
这就像你读小说:脑子里有一份不断更新的「剧情梗概」,读到新一句就往里揉一点。理论上,这份记忆能携带任意长的历史, 固定窗口的枷锁被打破了;而且整条序列共用同一套权重,参数不会随句子变长而膨胀。
可惜理论很丰满。记忆每走一步就被整个重写一次,早期信息一路被冲淡——这正是第 24 课那个老对手换了个方向又来了:梯度沿时间连乘,几十步后衰减到几乎为零(梯度消失),于是 RNN 的记性其实传不远。 更要命的是,它必须算完这一步才能算下一步,天生串行,GPU 上万个核心只能干瞪眼。
LSTM:给记忆装阀门,让它传得更远
RNN 记不远,是因为记忆每一步都被无差别地重写。LSTM(第 18 课)给记忆装上了三道阀门(取值 0~1 的开关):遗忘门决定旧记忆丢多少、输入门决定新信息写多少、输出门决定这一刻读出多少。
阀门之外,还有一条专门的「细胞状态」像传送带一样贯穿始终——信息可以几乎原封不动地从头滑到尾, 只在阀门处被有选择地增删。于是梯度不再被无脑连乘冲垮,重要信息能被守住几十步。 这条「记忆高速路」,和第 24 课残差连接的「梯度高速路」是同一个灵魂:给信息留一条少受干扰的直通道。
举个例子:「我在法国长大,从小耳濡目染……所以我能说一口流利的 法语。」 LSTM 能把「法国」这条线索一路守到句尾、接对「法语」——这是普通 RNN 很难做到的。
但最硬的那道墙纹丝不动:LSTM 依然要一个词接一个词地按顺序处理,无法并行。模型规模的天花板,仍卡在这里。
Transformer:扔掉循环,让所有词同时开口
串行这道墙,2017 年被注意力机制(第 19 课)一拳砸开。它的主张极简:扔掉循环,让每个词直接「查询」句中所有词——拿自己的 Query 去和所有词的 Key 比对,算出一组注意力权重, 再按权重把大家的 Value 汇总过来。「它太累了」里的「它」指谁?让「它」自己把注意力投到那个名词上就行。
这一下解决了两件大事。其一,任意两个词之间一步直达,再远的依赖也不衰减,LSTM 苦苦维持的长程记忆变得轻而易举。 其二,也是更致命的——这套计算可以完全并行:一句话里所有词的注意力同时算,本质就是几个大矩阵相乘, 正好喂饱 GPU 上万个核心。困住 RNN / LSTM 几十年的串行枷锁,就此解开。
并行解锁了规模,而规模本身就带来了能力——参数从亿级冲到千亿、万亿,模型涌现出推理、翻译、写代码等谁都没预设的本事。 把多头注意力、FFN、残差与层归一化(第 20~24 课)拼成一个块,叠几十上百层,配上分词器(第 22 课)和 「预训练 → 监督微调 → RLHF」三阶段训练(第 25 课),就长成了 ChatGPT。
当然,它也留下了自己的新麻烦:让每个词都看所有词,代价是 的开销(第 26 课)——序列一长就贵得吓人。 这道账单,正是下一课要讲的前沿仍在攻打的难题之一。
一张图看完这条接力
把六代技术摆成一条时间线,每一段连线上写着「逼出下一代的那个死结」——这就是整部 NLP 演变史的骨架:
退一步看这张图,会发现一个反复出现的螺旋:每一代解决了一个老问题,又亲手制造出一个新问题, 而下一代正是冲着这个新问题来的。技术从来不是一串孤立的发明,而是一条「问题 → 解药 → 新问题」不断咬合的链。 这也正是这套教程从第 1 课起反复示范的那条主线——没有人一开始就「想到了」注意力,是一个个具体的死结,把它一步步逼了出来。
更要紧的是:这条链到 Transformer 并没有停。 的开销、静态的知识、纯文本的局限…… 都是它留下的新死结,正被今天的研究者用各种新想法去解。下一课,我们就顺着这条还在延伸的链,走进「正在发生」的前沿。
语言难在序列、上下文、稀疏。N-gram 用数数起步,词向量补上语义, 神经语言模型补上泛化,RNN 补上记忆,LSTM 让记忆传得远, Transformer 用注意力换来并行与规模。每一代,都是来解上一代死结的。
这条链,请你记成一句话
- N-gram:数数 → 但稀疏、记性短、符号孤立。
- 词向量:给词义坐标 → 但静态、且只是零件。
- 神经语言模型:靠泛化绕开稀疏 → 但窗口固定。
- RNN:循环记忆破窗口 → 但梯度消失、必须串行。
- LSTM:门控让记忆传远 → 但仍然串行。
- Transformer:注意力换来并行与规模 → 但 O(n²) 仍待优化。
学习小测验
做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。
前沿与未来:下一程
历史讲完了,那「正在发生」和「即将发生」的呢?看看大模型的下一程。