内容均来自[https://github.com/datawhalechina/so-large-lm]
Chapter 1 引言
1. 什么是语言模型
语言模型(LM)的经典定义是一种对词元序列(token)的概率分布。假设我们有一个词元集的词汇表 。语言模型p为每个词元序列 ∈ 分配一个概率(介于0和1之间的数字):
概率直观地告诉我们一个标记序列有多“好(good)”(具有语言能力和世界知识)
2.自回归语言模型
将序列 的联合分布 的常见写法是使用概率的链式法则:
这里有一个基于文本的例子:
3. n-gram
N-gram模型。在一个n-gram模型中,关于的预测只依赖于最后的 个字符 ,而不是整个历史:
例如,一个trigram(n=3)模型会定义:
这些概率是基于各种n-gram(例如,𝖺𝗍𝖾 𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾和𝖺𝗍𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾)在大量文本中出现的次数计算的,并且适当地平滑以避免过拟合
优点:
- n-gram模型拟合到数据上非常便宜且可扩展
缺点:
- n太小,那么模型将无法捕获长距离的依赖关系
- n太大,统计上将无法得到概率的好估计
应用场景:语音识别和机器翻译
声音信号或源文本提供了足够的信息,只捕获局部依赖关系(而无法捕获长距离依赖关系)并不是一个大问题
4. 神经语言模型
优点:
- 上下文长度仍然受到n的限制,但现在对更大的n值估计神经语言模型在统计上是可行的
缺点:
- 训练神经网络在计算上要昂贵得多
自2003年以来,神经语言建模的两个关键发展包括:
- Recurrent Neural Networks(RNNs),包括长短期记忆(LSTMs),使得一个词元的条件分布可以依赖于整个上下文 (有效地使 ),但这些模型难以训练。
- Transformers是一个较新的架构(于2017年为机器翻译开发),再次返回固定上下文长度n,但更易于训练(并利用了GPU的并行性)。此外,n可以对许多应用程序“足够大”(GPT-3使用的是n=2048)。
Chapter 2 大模型的能力
1. 语言模型的适应性:从语言模型到任务模型的转化
实现方式:
- 1 训练:
-- 训练新模型
-- 微调:根据训练实力进行更新 - 2 提示(上下文)学习:根据对任务的描述建一个或一组提示信息:
-- 零样本学习
-- 单样本学习
-- 少样本学习
2. 困惑度:衡量语言模型好坏的指标
困惑度(Perplexity)是一个重要的指标,是自然语言处理和语言模型中的一个重要概念,用于衡量语言模型的性能。它可以解释为模型在预测下一个词时的平均不确定性。
对于给定的语言模型和一个测试数据集,困惑度被定义为:
其中, 是测试集中的词序列, 是测试集中的总词数。困惑度与语言模型的质量紧密相关。一个优秀的语言模型应能准确预测测试数据中的词序列,因此它的困惑度应较低。相反,如果语言模型经常做出错误的预测,那么它的困惑度将较高。
困惑度(perplexity)采用几何平均,在几何平均中,每个词标记的概率都被同等看待,并且一个极低的概率(如0)将会导致整个几何平均大幅度下降。因此,通过计算几何平均,我们可以更好地衡量模型在处理所有可能的词标记时的性能,特别是在处理那些模型可能会出错的情况。
困惑度可以被理解为每个标记(token)的平均"分支因子(branching factor)"。这里的“分支因子”可以理解为在每个位置,模型认为有多少种可能的词会出现。例如,若困惑度为10,那意味着每次模型在预测下一个词时,平均上会考虑10个词作为可能的选择。
这个理解与公式中的 密切相关,这个表达式代表了编码长度。我们在计算的是平均编码长度,这个长度反映了给定当前词或标记后,下一个词或标记可能的选择数量。因此,通过对平均编码长度取指数,我们可以得到可能的选择数量,这也就是"分支因子"。
为了更好地理解,我们可以考虑一个均匀分布的例子:一个长度为3的二进制字符串可以编码 个可能的字符串。同样,困惑度反映了模型预测下一个词时,考虑的平均可能性数。如果困惑度为8,那么对于序列中的每个词,模型会考虑8个可能的词。这个例子类似于我们的语言模型:在给定特定词或标记后,模型需要从多个可能的选项中预测下一个词或标记。如果选择的可能性多,模型的预测任务就更为复杂,相应的困惑度就会更高。
两类错误:语言模型可能会犯两种类型的错误,而困惑度对这两种错误的处理方式并不对称:
- 召回错误:语言模型未能正确地为某个词符分配概率值。这种情况下,困惑度是毫不留情的。例如,如果模型为词组 '𝖺𝗍𝖾' 在 '𝗍𝗁𝖾,𝗆𝗈𝗎𝗌𝖾' 后出现的概率预测为接近0,那么对应的困惑度值将趋近于无穷大。
- 精确度错误:语言模型为某些错误的词序列过度分配了概率值。在这种情况下,困惑度会进行适度的惩罚。给定一个语言模型 p,假设我们将一些垃圾分布 按照概率 混入:
那么,我们可以计算在 下的 的困惑度:
其中,最后一个近似等式在 的值较小时成立。如果我们混入5%的垃圾信息,那么困惑度只增加 5%。需要注意的是,这样生成的语言结果会非常糟糕,因为平均每 20 个词符就会生成一个无意义的词符。