datawhale组队学习9月-Day1
写在前面
自从上次在datawhale拿到了优秀学习奖就有点一发不可收拾……
于是在群里问还有没有新的活动,被推荐了新的组队活动~
想着我最近也正好在学习多模态相关的东西,就顺便了解一下大模型~~
(虽然代码什么的都大同小异啦
如果说到语言模型,我其实最开始就是想做nlp的说……当时因为看《数学之美》所以对nlp有了很深的印象。
然后不管是AR模型还是香农都是我很喜欢的课程,通信人真的很喜欢……
本日学习内容
1.1定义
语言模型(LM)的经典定义是一种对令牌序列(token)的概率分布。
假设我们有一个令牌集的词汇表
V
V
V 。
语言模型p为每个令牌序列
x
1
,
.
.
.
,
x
L
x_{1},...,x_{L}
x1,...,xL ∈
V
V
V 分配一个概率(介于0和1之间的数字):
p
(
x
1
,
…
,
x
L
)
p(x_1, \dots, x_L)
p(x1,…,xL)
概率直观地告诉我们一个标记序列有多“好(good)”。
赋予所有序列以(有意义的)概率的能力,该能力要求语言模型具有非凡的(但是隐含的)语言能力和世界知识。
例如,语言模型应该隐含地赋予"𝗆𝗈𝗎𝗌𝖾 𝗍𝗁𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾 𝖺𝗍𝖾"一个非常低的概率,因为它在语法上是不正确的(句法知识)。由于世界知识的存在,语言模型应该隐含地赋予"𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾 𝖺𝗍𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾"比"𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾 𝖺𝗍𝖾 𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾"更高的概率。
这是因为两个句子在句法上是相同的,但在语义上却存在差异,而语言模型需要具备卓越的语言能力和世界知识,才能准确评估序列的概率。
语言模型生成任务
语言模型也可以做生成任务。(生成语言)
如定义所示,语言模型p接受一个序列并返回一个概率来评估其好坏。
我们也可以根据语言模型生成一个序列。最纯粹的方法是从语言模型
p
p
p中以概率
p
(
x
1
:
L
)
p(x_{1:L})
p(x1:L)进行采样 ,表示为:
x
1
:
L
∼
p
.
x_{1:L}∼p.
x1:L∼p.
如何在计算上高效地实现这一点取决于语言模型p的形式。实际上,我们通常不直接从语言模型中进行采样,这既因为真实语言模型的限制,也因为我们有时希望获得的不是一个“平均”的序列,而是更接近“最佳”序列的结果。
自回归语言模型(Autoregressive language models)
自回归预测法(Autoregression,AR)是指,利用预测目标的历史时间数列在不同时期取值之间存在的依存关系(即自身相关),建立起回归方程进行预测。
AR模型是一种线性预测,利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型。NLP中的 sequence2sequence 和 Transformer 都是AR模型。
将序列
x
1
:
L
x_{1:L}
x1:L 的联合分布
p
(
x
1
:
L
)
p(x_{1:L})
p(x1:L) 的常见写法是使用概率的链式法则:
p
(
x
1
:
L
)
=
p
(
x
1
)
p
(
x
2
∣
x
1
)
p
(
x
3
∣
x
1
,
x
2
)
⋯
p
(
x
L
∣
x
1
:
L
−
1
)
=
∏
i
=
1
L
p
(
x
i
∣
x
1
:
i
−
1
)
.
p(x_{1:L}) = p(x_1) p(x_2 \mid x_1) p(x_3 \mid x_1, x_2) \cdots p(x_L \mid x_{1:L-1}) = \prod_{i=1}^L p(x_i \mid x_{1:i-1}).
p(x1:L)=p(x1)p(x2∣x1)p(x3∣x1,x2)⋯p(xL∣x1:L−1)=i=1∏Lp(xi∣x1:i−1).
p
(
t
h
e
,
m
o
u
s
e
,
a
t
e
,
t
h
e
,
c
h
e
e
s
e
)
=
p
(
t
h
e
)
p
(
m
o
u
s
e
∣
t
h
e
)
p
(
a
t
e
∣
t
h
e
,
m
o
u
s
e
)
p
(
t
h
e
∣
t
h
e
,
m
o
u
s
e
,
a
t
e
)
p
(
c
h
e
e
s
e
∣
t
h
e
,
m
o
u
s
e
,
a
t
e
,
t
h
e
)
.
\begin{align*} p({the}, {mouse}, {ate}, {the}, {cheese}) = \, & p({the}) \\ & p({mouse} \mid {the}) \\ & p({ate} \mid {the}, {mouse}) \\ & p({the} \mid {the}, {mouse}, {ate}) \\ & p({cheese} \mid {the}, {mouse}, {ate}, {the}). \end{align*}
p(the,mouse,ate,the,cheese)=p(the)p(mouse∣the)p(ate∣the,mouse)p(the∣the,mouse,ate)p(cheese∣the,mouse,ate,the).
特别地,我们需要理解
p
(
x
i
∣
x
1
:
i
−
1
)
p(x_{i}∣x_{1:i−1})
p(xi∣x1:i−1) 是一个给定前面的记号
x
1
:
i
−
1
x_{1:i−1}
x1:i−1 后,下一个记号
x
i
x_{i}
xi 的条件概率分布。 在数学上,任何联合概率分布都可以通过这种方式表示。
然而,自回归语言模型的特点是它可以利用例如前馈神经网络等方法有效计算出每个条件概率分布
p
(
x
i
∣
x
1
:
i
−
1
)
p(x_{i}∣x_{1:i−1})
p(xi∣x1:i−1) 。
在机器翻译中,不同于自回归(Autoregressive Translation , ART)模型需要用已生成的词来预测下一个位置的词,非自回归 (Non-Autoregressive Translation, NART)模型打破了生成时的串行顺序,希望一次能够解码出整个目标句子,从而解决AT模型所带来的问题。
在非自回归的生成任务中,要从自回归语言模型 p p p 中生成整个序列 x 1 : L x_{1:L} x1:L ,我们需要一次生成一个令牌(token),该令牌基于之前以生成的令牌进行计算获得:
for
i
=
1
,
…
,
L
:
x
i
∼
p
(
x
i
∣
x
1
:
i
−
1
)
1
/
T
,
\begin{aligned} \text { for } i & =1, \ldots, L: \\ x_i & \sim p\left(x_i \mid x_{1: i-1}\right)^{1 / T}, \end{aligned}
for ixi=1,…,L:∼p(xi∣x1:i−1)1/T,
其中
T
≥
0
T≥0
T≥0 是一个控制我们希望从语言模型中得到多少随机性的温度参数:
- T=0:确定性地在每个位置 i 选择最可能的令牌 x i x_{i} xi
- T=1:从纯语言模型“正常(normally)”采样
- T=∞:从整个词汇表上的均匀分布中采样
然而,如果我们仅将概率提高到 1 / T 1/T 1/T 的次方,概率分布可能不会加和到 1。
我们可以通过重新标准化分布来解决这个问题。
我们将标准化版本 p T ( x i ∣ x 1 : i − 1 ) ∝ p ( x i ∣ x 1 : i − 1 ) 1 / T p_{T}(x_{i}∣x_{1:i−1})∝p(x_{i}∣x_{1:i−1})^{1/T} pT(xi∣x1:i−1)∝p(xi∣x1:i−1)1/T 称为退火条件概率分布。
例如:
p ( cheese ) = 0.4 , p ( mouse ) = 0.6 p T = 0.5 ( cheese ) = 0.31 , p T = 0.5 (mouse ) = 0.69 p T = 0.2 (cheese ) = 0.12 , p T = 0.2 (mouse) = 0.88 p T = 0 (cheese ) = 0 , p T = 0 (mouse ) = 1 \begin{array}{cl} p(\text { cheese })=0.4, & p(\text { mouse })=0.6 \\ p_{T=0.5}(\text { cheese })=0.31, & \left.p_{T=0.5} \text { (mouse }\right)=0.69 \\ \left.p_{T=0.2} \text { (cheese }\right)=0.12, & p_{T=0.2} \text { (mouse) }=0.88 \\ \left.p_{T=0} \text { (cheese }\right)=0, & \left.p_{T=0} \text { (mouse }\right)=1 \end{array} p( cheese )=0.4,pT=0.5( cheese )=0.31,pT=0.2 (cheese )=0.12,pT=0 (cheese )=0,p( mouse )=0.6pT=0.5 (mouse )=0.69pT=0.2 (mouse) =0.88pT=0 (mouse )=1
具体来说,这个温度参数会应用于每一步的条件概率分布 p ( x i ∣ x 1 : i − 1 ) p(x_{i}∣x_{1:i−1}) p(xi∣x1:i−1) ,将其幂变为 1 / T 1/T 1/T 。这意味着当 T T T 值较高时,我们会获得更平均的概率分布,生成的结果更具随机性;反之,当 T T T 值较低时,模型会更倾向于生成概率较高的令牌。
退火分布
然而,有一个重要的注意事项:对于每一步的条件概率分布应用温度参数
T
T
T ,并进行迭代采样,这种方法并不等同于(除非
T
=
1
T=1
T=1 )从整个长度为 L 的序列的"退火"分布中一次性采样。 换句话说,这两种方法在
T
≠
1
T≠1
T=1 时会产生不同的结果。
"退火"这个术语来源于冶金学,其中热的金属会逐渐冷却以改变其物理性质。在这里,它类比的是对概率分布进行调整的过程。
"退火"分布是通过将原始概率分布的每个元素都取幂
1
/
T
1/T
1/T ,然后重新标准化得到的新分布。
当
T
≠
1
T ≠ 1
T=1 时,这个过程会改变原始概率分布,因此从"退火"分布中采样得到的结果可能与对每一步的条件分布应用 T 并进行迭代采样的结果不同。
对于非自回归的条件生成,更一般地,我们可以通过**指定某个前缀序列
x
1
:
i
x_{1:i}
x1:i (称为prompt)并采样其余的
x
i
+
1
:
L
x_{i+1:L}
xi+1:L (称为completion)来进行条件生成。
总结
- 语言模型是序列 x 1 : L x_{1:L} x1:L 的概率分布 p。
- 直观上,一个好的语言模型应具有语言能力和世界知识。
- 自回归语言模型允许有效地生成给定提示 x 1 : i x_{1:i} x1:i 的补全 x i + 1 : L x_{i+1:L} xi+1:L。
- 温度可以用来控制生成中的变异量。
1.2大模型相关历史回顾
1.2.1信息理论、英语的熵、n-gram模型
用于度量概率分布的熵(Entropy):
H
(
p
)
=
∑
x
p
(
x
)
log
1
p
(
x
)
.
H(p) = \sum_x p(x) \log \frac{1}{p(x)}.
H(p)=x∑p(x)logp(x)1.
熵实际上是一个衡量将样本 x ∼ p x∼p x∼p 编码(即压缩)成比特串所需要的预期比特数的度量
熵的值越小,表明序列的结构性越强,编码的长度就越短。
直观地理解,
log
1
p
(
x
)
\log \frac{1}{p(x)}
logp(x)1 可以视为用于表示出现概率为
p
(
x
)
p(x)
p(x) 的元素
x
x
x 的编码的长度。
例如,如果 p ( x ) = 1 / 8 p(x)=1/8 p(x)=1/8 ,我们就需要分配 l o g 2 ( 8 ) = 3 log_{2}(8)=3 log2(8)=3 个比特(或等价地, l o g ( 8 ) = 2.08 log(8)=2.08 log(8)=2.08 个自然单位)。
需要注意的是,实际上达到香农极限(Shannon limit)是非常具有挑战性的(例如,低密度奇偶校验码),这也是编码理论研究的主题之一。
1.2.1.1英语的熵
香农特别对测量英语的熵感兴趣,将其表示为一系列的字母。这意味着我们想象存在一个“真实”的分布p(这种存在是有问题的,但它仍然是一个有用的数学抽象),它能产生英语文本样本x∼p。
香农还定义了交叉熵:
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
H(p, q)=-\sum_x p(x) \log q(x)
H(p,q)=−x∑p(x)logq(x)
这测量了需要多少比特(nats)来编码样本x∼p,使用由模型q给出的压缩方案(用长度为1/q(x)的代码表示x)。
通过语言模型估计熵。一个关键的属性是,交叉熵H(p,q)上界是熵 H ( p ) H ( p ) H(p)
H ( p , q ) = ∑ x p ( x ) log 1 q ( x ) . H(p,q) = \sum_x p(x) \log \frac{1}{q(x)}. H(p,q)=x∑p(x)logq(x)1.
这意味着我们可以通过构建一个只有来自真实数据分布 p p p的样本的(语言)模型 q q q来估计 H ( p , q ) H(p,q) H(p,q),而 H ( p ) H(p) H(p)通常无法访问,如果 p p p是英语的话。
如果我们想要估计一个语言模型(例如英语),我们通常无法直接访问到真实数据分布的信息,也就是
p
p
p。因此,我们可以通过构建一个模型
q
q
q,该模型只能生成来自真实数据分布
p
p
p的样本,来进行
p
p
p和
q
q
q之间的交叉熵估计
H
(
p
,
q
)
H(p,q)
H(p,q)。
通过比较模型
q
q
q生成的样本与真实数据分布
p
p
p的样本,我们可以评估模型
q
q
q的性能和拟合程度。如果模型
q
q
q能够生成与真实数据分布
p
p
p相似的样本,那么它的交叉熵
H
(
p
,
q
)
H(p,q)
H(p,q)将会较低,表明模型
q
q
q对真实数据分布的拟合程度较好。
所以我们可以通过构建更好的模型q来得到熵 H ( p ) H(p) H(p) 的更好的估计,由H(p,q)衡量。
香农游戏(人类语言模型)。香农首先在1948年使用n-gram模型作为q.
一个词的出现只与前面n个词相关,即n阶马尔可夫链。当n=1,n=2,n=3时,我们将其分别称作一元语法(unigram)、二元语法(bigram)和三元语法(trigram)。
1.2.1.2用于下游应用的N-gram模型
语言模型首先被用于需要生成文本的实践应用:
- 1970年代的语音识别(输入:声音信号,输出:文本)
- 1990年代的机器翻译(输入:源语言的文本,输出:目标语言的文本)
噪声信道模型。当时解决这些任务的主要模型是噪声信道模型。以语音识别为例:
- 我们假设有一些从某个分布p中抽取的文本
- 这些文本被转换为语音(声音信号)
- 然后给定语音,我们希望恢复(最有可能的)文本。
这可以通过贝叶斯定理实现:
p ( text ∣ speech ) ∝ p ( text ) ⏟ language model p ( speech ∣ text ) ⏟ acoustic model . p(\text{text} \mid \text{speech}) \propto \underbrace{p(\text{text})}_\text{language model} \underbrace{p(\text{speech} \mid \text{text})}_\text{acoustic model}. p(text∣speech)∝language model p(text)acoustic model p(speech∣text).
语音识别和机器翻译系统使用了基于词的n-gram语言模型(最早由香农引入,但针对的是字符)。
N-gram模型。在一个n-gram模型中,关于 x i x_{i} xi的预测只依赖于最后的 n − 1 n-1 n−1 个字符 x i − ( n − 1 ) : i − 1 x_{i−(n−1):i−1} xi−(n−1):i−1 ,而不是整个历史:
p ( x i ∣ x 1 : i − 1 ) = p ( x i ∣ x i − ( n − 1 ) : i − 1 ) . p(x_i \mid x_{1:i-1}) = p(x_i \mid x_{i-(n-1):i-1}). p(xi∣x1:i−1)=p(xi∣xi−(n−1):i−1).
例如,一个trigram(n=3)模型会定义:
这些概率是基于各种n-gram(例如,𝖺𝗍𝖾 𝗍𝗁𝖾 𝗆𝗈𝗎𝗌𝖾和𝖺𝗍𝖾 𝗍𝗁𝖾 𝖼𝗁𝖾𝖾𝗌𝖾)在大量文本中出现的次数计算的,并且适当地平滑以避免过拟合(例如,Kneser-Ney平滑)。
为了解决零概率问题,需要给“未出现的n-gram条件概率分布一个非零估计值,相应得需要降低已出现n-gram条件概率分布,且经数据平滑后一定保证概率和为1”。这就是平滑技术的基本思想。有拉普拉斯平滑,古德图灵平滑技术,组合估计算法有线性差值法和Katz回退法。
将n-gram模型拟合到数据上非常便宜且可扩展。因此,n-gram模型被训练在大量的文本上。例如,Brants等人(2007)在2万亿个tokens上训练了一个5-gram模型用于机器翻译。相比之下,GPT-3只在3000亿个tokens上进行了训练。然而,n-gram模型有其根本的限制。想象以下的前缀:
𝖲𝗍𝖺𝗇𝖿𝗈𝗋𝖽 𝗁𝖺𝗌 𝖺 𝗇𝖾𝗐 𝖼𝗈𝗎𝗋𝗌𝖾 𝗈𝗇 𝗅𝖺𝗋𝗀𝖾 𝗅𝖺𝗇𝗀𝗎𝖺𝗀𝖾 𝗆𝗈𝖽𝖾𝗅𝗌. 𝖨𝗍 𝗐𝗂𝗅𝗅 𝖻𝖾 𝗍𝖺𝗎𝗀𝗁𝗍 𝖻𝗒 ___
如果n太小,那么模型将无法捕获长距离的依赖关系,下一个词将无法依赖于𝖲𝗍𝖺𝗇𝖿𝗈𝗋𝖽。然而,如果n太大,统计上将无法得到概率的好估计(即使在“大”语料库中,几乎所有合理的长序列都出现0次):
因此,语言模型被限制在如语音识别和机器翻译等任务中,其中声音信号或源文本提供了足够的信息,只捕获局部依赖关系(而无法捕获长距离依赖关系)并不是一个大问题。
1.2.1.3神经语言模型
语言模型的一个重要进步是神经网络的引入。Bengio等人在2003年首次提出了神经语言模型,其中 p ( x i ∣ x i − ( n − 1 ) : i − 1 ) p(x_{i}∣x_{i−(n−1):i−1}) p(xi∣xi−(n−1):i−1) 由神经网络给出:
p ( c h e e s e ∣ a t e , t h e ) = s o m e − n e u r a l − n e t w o r k ( a t e , t h e , c h e e s e ) 。 p(cheese∣ate,the)=some-neural-network(ate,the,cheese)。 p(cheese∣ate,the)=some−neural−network(ate,the,cheese)。
注意,上下文长度仍然受到n的限制,但现在对更大的n值估计神经语言模型在统计上是可行的。
然而,主要的挑战是训练神经网络在计算上要昂贵得多。n-gram模型的扩展性更好,且数据并非瓶颈,所以n-gram模型在至少接下来的十年中仍然占主导地位。
自2003年以来,神经语言建模的两个关键发展包括:
- Recurrent Neural Networks(RNNs),包括长短期记忆(LSTMs),使得一个token x i x_{i} xi的条件分布可以依赖于整个上下文 x 1 : i − 1 x_{1:i−1} x1:i−1 (有效地使 n = ∞ n=∞ n=∞ ),但这些模型难以训练。
- Transformers是一个较新的架构(于2017年为机器翻译开发),再次返回固定上下文长度n,但更易于训练(并利用了GPU的并行性)。此外,n可以对许多应用程序“足够大”(GPT-3使用的是n=2048)。
我们将在课程的后续部分深入探讨这些架构和训练方式。
总结
- 语言模型最初是在信息理论的背景下研究的,可以用来估计英语的熵。
- N-gram模型在计算上极其高效,但在统计上效率低下。
- N-gram模型在短上下文长度中与另一个模型(用于语音识别的声学模型或用于机器翻译的翻译模型)联合使用是有用的。
- 神经语言模型在统计上是高效的,但在计算上是低效的。
- 随着时间的推移,训练大型神经网络已经变得足够可行,神经语言模型已经成为主导的模型范式。
1.3这门课的意义
在技术层面上,我们专注于自回归语言模型,但许多思想也适用于掩码语言模型,如BERT和RoBERTa。
迄2018年为止,语言模型主要作为较大系统的组成部分使用(例如语音识别或机器翻译),但如今语言模型越来越具备作为独立系统的能力,这在过去是难以想象的。
回顾一下,语言模型具备条件生成的能力:在给定提示的情况下生成完成的文本:
p r o m p t ⇝ c o m p l e t i o n prompt⇝completion prompt⇝completion
能力的示例:这种简单的接口为语言模型通过改变提示来解决各种各样的任务打开了可能性。例如,可以通过提示填空的方式进行问答(示例):
Frederic, Chopin, was, born, in
⇝
T
=
0
1810
, in, Poland
\text { Frederic, Chopin, was, born, in } \stackrel{T=0}{\leadsto} 1810 \text {, in, Poland }
Frederic, Chopin, was, born, in ⇝T=01810, in, Poland
也可以通过提示解决词汇类比的问题
还可以通过提示生成新闻文章的标题
与监督学习的关系:**在正常的监督学习中,我们指定了一组输入-输出对的数据集,并训练一个模型(例如通过梯度下降的神经网络)以拟合这些示例。每次训练运行都会产生一个不同的模型。**然而,通过上下文学习,只有一个语言模型可以通过提示来完成各种不同的任务。上下文学习显然超出了研究人员预期的可能性,是新出现行为的一个例子。
注:神经语言模型还可以生成句子的向量表示,这些表示可以用作下游任务的特征或直接进行优化性能微调。
我们专注于通过条件生成使用语言模型,这仅仅依赖于黑匣子访问,以简化问题。
1.4 课程架构
本课程的结构如同一个洋葱:
- 大型语言模型的行为:我们从外层开始,这里我们只能通过黑匣子API访问模型(就像我们迄今为止所做的)。
- 我们的目标是理解这些被称为大型语言模型的对象的行为,就像我们是研究生物体的生物学家一样。
- 构建大型语言模型:然后我们进入洋葱的核心,研究如何构建大型语言模型(模型架构、训练算法等)。
- 超越大型语言模型:最后,我们以超越语言模型的视角结束课程。语言模型只是对令牌序列的分布。这些令牌可以表示自然语言、编程语言或音频或视觉词典中的元素。语言模型也属于更一般的基础模型类别,这些模型与语言模型具有许多相似的属性。