JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

语言建模:预测下一个词

一个看似简单的游戏——猜下一个词——竟成了几乎所有现代文本 AI 背后的引擎。本篇讲清这个游戏怎么玩、为何如此强大,以及它的力量在哪里悄悄见底。

万物背后的同一个游戏

你已经认识了这些零件:文本被切成词元,每个词元又能借助word2vecGloVe变成向量,让意义变成几何。现在我们让这些零件去做一件几乎像孩子游戏的事——语言建模:给定到目前为止的词,猜下一个是什么。「猫坐在___上。」还没读完,你脑中就浮现了「垫子」或「地板」。把这种条件反射机械化,就是整个领域。

更确切地说,语言模型在给定上文的情况下,为每一个可能的下一个词元赋予一个概率,再把这些概率串起来,得到整句话的概率。它输出的不是一个词,而是覆盖整个词表的一个分布——也许是 5 万个加起来等于 1 的数字。「垫子」可能得 0.4,「地板」0.2,「冰箱」0.0001。其余一切,都从「为下一个词打分」这个习惯里流淌出来。

靠数数:n-gram 时代

最古老也最老实的办法就是数数。n-gram 模型根据前面 n−1 个词来估计下一个词:在一大堆文本里数这种组合出现了多少次。二元模型往回看一个词,三元模型往回看两个词。想要 P(「垫子」|「在」,「上」)?数「在……上垫子」出现了几次,除以「在……上」出现了几次。就这么简单——没有神经元,只有记账。这就是最朴素形式的极大似然估计

P(w | context) = count(context + w) / count(context)

# trigram example
P("mat" | "on","the") = count("on the mat") / count("on the")
n-gram 模型不过是计数相除——这份简单既是它的魅力,也是它的天花板。

在短范围内,这套办法好用得惊人,几十年来一直驱动着手机键盘和早期语音识别。但很快就撞上两堵墙。第一是稀疏性:大多数合理的四词组合在你的数据里压根没出现过,于是计数为零,模型便宣称它们不可能(巧妙的「平滑」技巧能打补丁,但也只是打补丁)。第二是固定且很短的窗口:三元模型无法把「我今早落在厨房里的钥匙」与它真正的主语「钥匙」联系起来——它永远只看得到最后一两个词。横跨整句的意义,对它是隐形的。

从数数到理解:神经语言模型

神经网络的转向,靠的是拒绝把词当作不透明的符号,从而解决稀疏性。它不再把「狗」和「小狗」当成毫不相干的字符串,而是把它们的嵌入——那些稠密的意义向量——喂进网络。如今「小狗」可以借用模型关于「狗」学到的一切,因为它们在向量空间里彼此相邻。模型不去背诵短语,而是从特征里组合出一个预测。一个它从没见过的短语,照样能得到合理的概率。

为了按顺序读完整句话,早期的神经语言模型使用循环网络,从左到右地走,携带一份不断更新的摘要——隐藏状态——并在每个词处更新它。理论上这个状态能记住十二个词以前的主语;实践中朴素的 RNN 忘得很快,这正是 LSTM 加入「门」来更长久地留住信息的原因。最后一层用 softmax 把网络的输出变成覆盖词表的概率——所以整套东西回答的仍是同一个问题:下一个是什么?

我们怎么知道它在变好?我们衡量「惊讶」。一个能自信地给真正出现的词赋予高概率的模型,对真实文本「更不惊讶」。标准的分数是困惑度——粗略地说,就是模型在每一步实际上要在多少个词之间犹豫。困惑度为 20,意味着它的迷惑程度相当于在 20 个等可能选项里挑一个;越低越好。训练通过梯度下降推动网络,让这份惊讶在数十亿个词上持续下降。

一个猜词游戏如何变成一种能力

下面这个惊喜重塑了整个领域:要把下一个词预测得足够好,模型几乎被悄悄逼着去学会其他一切。要补全「法国的首都是___」,你需要一个事实。要补全「她不停倒水,直到杯子___」,你需要一点物理直觉。要收尾一段引号、配平一个括号,你需要句法。这些都没有被直接教过——它们是「擅长猜词游戏」的副产品,自己掉了出来。

一旦模型能为下一个词元打分,你也就能让它写作。给它一段提示,从它的分布里采样一个词元,接上去,再问一次——这个循环叫自回归解码。跑上几百次,你就得到一段话。关键在于:模型从没被训练去「写文章」;它被训练去预测,而写作不过是把预测向前跑。这个单一的目标,配上你先前认识的Transformer并加以放大,正是把语言模型变成今天聊天助手背后那些大语言模型的原因。

预测不是什么

现在是老实话的部分,因为炒作往往堆积在这里。语言模型预测的是「哪种文本更可能」,它并不核查那段文本是否为真。「澳大利亚的首都是悉尼」是一句流畅、高概率的句子——却是错的。当模型自信地说出假话时,它并不是在撒谎;它恰恰是在做本职工作——生成看似合理的续写。这就是幻觉的根源,再流畅也消除不了它。

再补几句温和的纠正。预测下一个词并不等于人类意义上的理解——模型学到的是词与词共现的统计规律,这很强大,却不同于有切身经验的理解。更低的困惑度并不保证模型更真实或更有用,只保证它对文本更不惊讶。而那些著名的「涌现」能力是真实存在的,但部分是我们衡量方式造成的假象;能力确实随规模增长,但不是靠魔法,也并非没有上限。把流畅只当作流畅的证据,仅此而已。

所以请同时握住两个真相。下一个词元的预测,是那个安静、简单到几乎令人难为情的目标;当它被放大到全世界的文本上,便催生出能翻译、能摘要、能对话的系统。而在底层,它依然是一台预测机器——自信、流畅、偶尔出错,并且对真相漠不关心,除非我们费很大力气让它在乎。下一篇我们将认识 BERT 及其同类,看掩码预测如何被导向深度理解,而非生成。