大型语言模型简介#
预计整个模块学习时长: 45 分钟
学习目标:
定义几种不同类型的语言模型,以及它们各自由哪些部件构成。
说明大语言模型是怎么造出来的,以及上下文与参数为什么重要。
指出大语言模型是怎么用上自注意力机制的。
指出大语言模型的三个关键问题。
解释微调和蒸馏如何改善模型的预测效果与运行效率。
先修要求:
本模块假设你已经熟悉以下模块中介绍的概念:
什么是语言模型?#
先用一句大白话说清楚:语言模型(language model)干的事,就是给“接下来该出现什么”这件事标上一个概率。
说得再具体一点:语言模型估计的是某个 token(或一串 token)出现在一段更长的 token 序列中的概率,这里的 token 可以是一个词、一个子词(词的子集),甚至只是一个单独的字符。
MLWM: 例如语言模型可以用来衡量一个句子或文本序列在语言中的合理性或流畅度,因此广泛应用于自动语音识别、机器翻译、文本生成和文本补全等自然语言处理任务中,例如常见的搜索引擎关键词联想功能,如下图所示。
搜索引擎关键词联想 相关内容可以参见文章 自然语言处理基础:NLP 任务、流程与建模对象 中的内容。
点击了解 token 到底是什么
大多数现代语言模型是按子词来切分的:把文本切成一段段带有语义的片段。这些片段的长短很不一样——短的可能只有一个标点符号,或者表示所有格的 s,长的则是一整个词;前缀和后缀也常常被单独切成子词。比如单词 unwatched(没在看的),可以拆成三个子词:
un(前缀)watch(词根)ed(后缀)
单词 cats 则可以拆成两个子词:
cat(词根)s(后缀)
再复杂一点的 “antidisestablishmentarianism”,可能被拆成六个子词:
antidisestablishmentarianism
切分方式跟语言有关,所以不同语言里,一个 token 对应多少字符是不一样的。就英语而言,一个 token 大约对应 4 个字符、约 3/4 个单词,换句话说,400 个 token ≈ 300 个英文单词。
token 是语言建模的基本单位,也是最小的单位。
现在,token 也已经被成功用到计算机视觉和音频生成上了。
来看这么一句话,以及可能填进那个空格的 token:
When I hear rain on my roof, I _______ in my kitchen.
语言模型要做的,就是给出各种 token(或 token 序列)填进这个空格的概率。比如,下面这张概率表就列出了几种可能的 token 及其概率:
| 概率 | Token |
|---|---|
| 9.4% | cook soup(煮一锅汤) |
| 5.2% | warm up a kettle(烧一壶热水) |
| 3.6% | cower(畏缩) |
| 2.5% | nap(打个盹) |
| 2.2% | relax(放松) |
在某些情况下,一串 token 可能是完整的一句话、一整段文字,甚至一整篇文章。
应用层拿到这张概率表就可以做预测:预测结果可能是概率最高的那个 token(比如 cook soup),也可能是在概率超过某个阈值的那些 token 里随机挑一个。
而把“估算文本序列中空缺处该填什么”这件事再往前推一步,就能覆盖更复杂的任务,包括:
生成文本。
把文本从一种语言翻译成另一种语言。
对文档做摘要。
通过对 token 的统计规律建模,现代语言模型可以学到极其强大的语言内部表示,并生成出通顺合理的语言。
N 元语法语言模型#
接下来是最古老、也是最容易上手的一类语言模型:N 元语法。
N 元语法是用来构建语言模型的有序词序列,其中 N 就是这个序列里词的个数。N = 2 时,它叫 2-gram,也就是二元语法(bigram);N = 5 时,就叫 5-gram。假设训练文档里出现过这么一句话:
you are very nice那么由它切出来的 2-gram 是:
you are
are very
very nice当 N = 3 时,N 元语法就叫 3-gram(三元语法,trigram)。还是上面那句话,切出来的 3-gram 是:
you are very
are very nice如果输入两个字词,基于 3-gram 的语言模型就能预测第三个词出现的可能性。比如,现在给它这两个词:orange is
语言模型会翻查训练语料里所有以 orange is 开头的 3-gram,看第三个词最可能是什么。以 orange is 这两个字开头的 3-gram 可能有几百个,但我们只关注下面两种可能:
orange is ripe
orange is cheerful第一种(orange is ripe)说的是橙子这种水果,第二种(orange is cheerful)说的却是橙色这种颜色。
上下文#
模型要预测的其实从来不只是“下一个词是什么”,而是“在这段上下文里,接下来最合理的词是什么”。这就引出了上下文(context)。
人类可以记住相当长的上下文。看一场戏的第三幕时,你还记得第一幕里登场的人物;一个长笑话的包袱之所以能把你逗笑,也因为你记得它的铺垫。
在语言模型里,上下文指的是目标 token 之前或之后那些有帮助的信息。上下文能帮模型判断 orange 指的是橙子这种水果,还是橙色这种颜色。
不过,上下文真的越多越好吗?3-gram 提供的上下文够不够用?很遗憾,3-gram 能给的上下文只有前面那两个词。就拿 orange is 来说,光这两个字眼根本不足以让模型判断出第三个词该是什么。上下文不够,基于 3-gram 的语言模型就会犯下大量错误。
更长的 N 元语法当然能给出更多上下文。但 N 一大起来,每个实例出现的相对次数就变少了。N 大到某个程度以后,模型里往往只剩下每个 N-token 组合孤零零的一次出现,对预测目标 token 并没什么帮助。
循环神经网络#
顺着“上下文”这条线再往前一步,就轮到循环神经网络了。
循环神经网络(recurrent neural network)能提供比 N 元语法更多的上下文。它是一种在 token 序列上训练的神经网络:它可以逐个词地、缓慢地学到(也学会忽略)句子中的部分上下文,就像你听别人说话时那样。规模足够大的循环神经网络,能从好几句话组成的段落里获取上下文。
MLWM: 循环神经网络是深度学习中一种典型的反馈神经网络,和前馈神经网络相比较反馈神经网络之所以具有一定的记忆功能,因为反馈神经网络在不同时刻的状态是根据历史所有时刻的信息及当前时刻的输入计算而来。在 RNN 中,神经元不仅可以接受到其他神经元的输出信息,也可以接受自己的输出信息从而形成一个具有环路的网络拓扑结构,因此RNN也成为了处理序列数据的重要工具之一。
RNN模型示意图 相关内容可以参见文章 RNN原理:循环神经网络结构与BPTT反向传播算法 中的内容。
不过,循环神经网络虽然比 N 元语法学到的上下文多,它能直觉把握到的有用上下文量其实仍然相当有限——它是一个 token 一个 token 地往前评估信息的。而下一节要讲的大语言模型,则可以一次性评估整段上下文。
这里要提醒一句:循环神经网络在长上下文上的训练,会受到梯度消失问题的制约。
练习:检查你的理解#
对于英文文本,哪种语言模型的预测做得更好?
基于 6-gram 的语言模型
基于 5-gram 的语言模型
关键术语:
- 二元语法(Bigram)
- 语言模型(Language model)
- N 元语法(N-gram)
- 神经网络(Neural network)
- 循环神经网络(Recurrent neural network)
- 词元(Token)
- 三元语法(Trigram)
- 梯度消失问题(Vanishing gradient problem)

