赞
踩
本节将主要深入探讨GPT-3大语言模型,这个具有代表性的语言模型的能力。本节讨论主要基于GPT-3论文中的基准测试,包括:
对比每个任务的最新技术成果,我们发现GPT-3的结果参差不齐:
但事实上,GPT-3并未明确针对这些任务进行训练,而只是经过预训练实现对下一个词的预测。即便如此,GPT-3平均来看,仍然可以在广泛的NLP任务中做得不错。同时,这也意味着面向下游任务,GPT-3可以进一步精调,以达到更加出色的性能表现。
在自然语言处理的世界中,语言模型 p p p 是一种对token序列 x 1 : L x_{1:L} x1:L 的分布(一个序列中token的联合分布),记为:
p ( x 1 , x 2 , … , x L ) p(x_1, x_2, \dots, x_{L}) p(x1,x2,…,xL)
(关于语言模型的相关内容,可参见第一部分的内容)这样的模型能够用于评估序列,还能用于在给定提示的条件下补全序列,即以序列 x 1 : m x_{1:m} x1:m 作为输入(也就是作为Context),由模型给出后续序列 x m + 1 : L x_{m+1:L} xm+1:L。根据自回归语言模型预测后续词序列的方法,可以分别基于如下分布逐一采样得到后续词序列。
p ( x i ∣ x 1 : i − 1 ) , ∀ i ∈ { m + 1 , m + 2 , … , L } p(x_i|x_{1:i-1}), \quad \forall i\in \{m+1, m+2,\dots, L\} p(xi∣x1:i−1),∀i∈{m+1,m+2,…,L}
为了使预训练的语言模型能够完成具体任务,我们需要将语言模型的参数适配到具体任务上,也就是将语言模型转化为任务模型(如问答、补全、翻译等)。
我们使用“适应(Adaptation)”一词来指代将语言模型转化为任务模型的过程,也就是让预训练好的语言模型“适应”到具体任务上,并呈现良好的性能表现。为实现这一目的,通常我们需要准备
任务的自然语言描述
一组训练实例(输入-输出对)
基于上述这些准备,我们可以通过两种方式实现这种适应
(1)训练(标准的监督学习,training):训练的方法主要有以下几种:
创建一个新模型,利用语言模型作为特征(探针法,Probing);
从现有的语言模型出发,根据训练数据进行更新(亦即微调,fine-tuning);
在两者之间寻求平衡(轻量级的微调,lightweight fine-tuning)
(2)提示学习(上下文学习,in-context learning):根据对任务的描述建一个或一组提示/上下文信息(Context),将其输入到语言模型中以获取基于该任务的生成结果。根据提示/上下文信息的数量,我们还可以进一步细分为:
在上述两种方法中,提示学习方法的局限性在于我们只能利用少量的训练实例(或者说是示例更恰当)来做提示,将示例作为语言模型的上下文,使语言模型从这个上下文中获取到信息,以进一步完成任务。由于当前性能优越的语言模型基本都是基于Transformer架构的,而Transformer架构自身就有输入序列最大长度存在上限的局限(尽管随着SOTA的不断迭代,目前已有能够把Context做到上万token的模型,但其仍然有限。),因此,语言模型也存在这样的局限。受限于这样的局限,语言模型在做提示学习时便仅能将有限的示例放入到提示中作为上下文(通常最大限度地将所有示例放入到一个提示中)。
在GPT-3的论文[1]中,作者评估了GPT-3在大量任务上的表现。我们将选择其中的一部分,对于每个任务,我们会讨论以下几点:
模型的大小和训练样本的数量都很重要。在下面的多个任务中,对于GPT-3的默认实验设置为:
实验任务具体包括:
Language modeling任务属于基础任务,通过此类任务,我们可以了解大语言模型的各种功能以及如何优化的给出提示(即Prompting Engineering),这是语言模型研究的核心部分。完成上述研究最直观的方法就是验证语言模型是否能够有效地模仿和理解语言。
如果从验证语言模型是否能够有效地模仿和理解语言出发,我们采用什么指标来评价呢?我们知道一个语言模型实际上就是对词符序列概率分布的模型。而对于一个词符序列的概率分布通常采用联合概率分布表征,并基于概率的链式法则计算。
p ( x 1 : L ) = ∏ i = 1 L p ( x i ∣ x 1 : i ) p(x_{1:L}) = \prod_{i=1}^{L} p(x_i|x_{1:i}) p(x1:L)=i=1∏Lp(xi∣x1:i)
基于此概率分布模型定义的困惑度(Perplexity) 是自然语言处理和语言模型中的一个重要概念,它可以表征模型在预测下一个词时的不确定性,可用于衡量语言模型的性能,困惑度越低,语言模型对于下一个词预测得就更准确。困惑度(Perplexity)的定义如下。
P
(
X
)
=
p
(
x
1
,
x
2
,
…
,
x
N
)
(
−
1
/
N
)
其中, X = x 1 , x 2 , … , x N X=x_1, x_2, \dots, x_N X=x1,x2,…,xN 是测试集中的词序列, N N N 是测试集中的总词数。有了困惑度指标,我们便可以对语言模型的优劣进行评估。
注: 一个序列的联合概率取决于其长度,并且随着长度的增长,其值趋近于零,这使得困惑度变得难以追踪。直观上,我们我们希望对每个词符(token)的概率 p ( x i ∣ x 1 : i − 1 ) p(x_i∣x_{1:i−1}) p(xi∣x1:i−1) 进行平均。但如果选择算数平均,那么当某一个词符被分配了0的概率,由于算术平均并不会为此产生较大的惩罚,而只是简单地将所有词标记的概率加在一起后除以总数,因此一个非常低的概率(如0)可能会被其他较高的概率抵消。这就是困惑度使用了几何平均而没有采用算数平均(如下式)的原因。在几何平均中,每个词标记的概率都被同等看待,并且一个极低的概率(如0)将会导致整个几何平均大幅度下降。
P
(
X
)
=
p
(
x
1
,
x
2
,
…
,
x
N
)
(
−
1
/
N
)
=
exp
(
ln
(
p
(
x
1
,
x
2
,
…
,
x
N
)
(
−
1
/
N
)
)
)
=
exp
(
1
N
ln
(
1
p
(
x
1
,
x
2
,
…
,
x
N
)
)
)
=
exp
(
1
N
ln
(
∏
i
=
1
N
1
p
(
x
i
∣
x
1
:
i
)
)
)
=
exp
(
1
N
∑
i
=
1
N
ln
(
1
p
(
x
i
∣
x
1
:
i
)
)
)
基于第一部分中关于信息熵内容可知,上式中 ln ( 1 / p ( x i ∣ x 1 : i ) ) \ln(1/p(x_i|x_{1:i})) ln(1/p(xi∣x1:i))代表了编码长度。我们在计算的是平均编码长度,这个长度反映了给定当前词后,下一个词可能的选择数量。因此,通过对平均编码长度取指数,我们可以得到可能的选择数量。而这个值越高,则说明模型对于下一个词的选择越不确定。
两类错误:语言模型可能会犯两种类型的错误,而困惑度对这两种错误的处理方式并不对称:
召回错误:语言模型未能正确地为某个词符分配概率值。这种情况下,困惑度惩罚趋于无穷大。
精确度错误:语言模型为某些错误的词序列过度分配了概率值。在这种情况下,困惑度会进行适度的惩罚。基于这样的惩罚模式,少量的垃圾信息混入虽然也仅会导致困惑度小幅上升,但仍然会造成生成语言的结果很糟糕。例如,给定一个语言模型 p p p,假设我们将一些垃圾分布 r r r 按照概率 ϵ \epsilon ϵ 混入:
q ( x i ∣ x 1 : i − 1 ) = ( 1 − ϵ ) p ( x i ∣ x 1 : i − 1 ) + ϵ r ( x i ∣ x 1 : i − 1 ) q(x_i|x_{1:i-1}) = (1-\epsilon) p(x_i|x_{1:i-1}) + \epsilon r(x_i|x_{1:i-1}) q(xi∣x1:i−1)=(1−ϵ)p(xi∣x1:i−1)+ϵr(xi∣x1:i−1)
则按照上述定义计算的困惑度为
p e r p l e x i t y q ( x 1 : N ) ≤ 1 1 − ϵ p e r p l e x i t y p ( x 1 : N ) ≊ ( 1 + ϵ ) p e r p l e x i t y p ( x 1 : N ) perplexity_q(x_{1:N}) \leq \frac{1}{1 - \epsilon}\, perplexity_p(x_{1:N}) \approxeq (1+\epsilon)\, perplexity_p(x_{1:N}) perplexityq(x1:N)≤1−ϵ1perplexityp(x1:N)≊(1+ϵ)perplexityp(x1:N)
如果我们混入5%的垃圾信息,那么困惑度只增加 5%,但在文本生成中,平均每 20 个词符就会生成一个无意义的词符。
下面基于上述困惑度的定义,对如下多个任务中GPT-3的表现进行评估,并与SOTA对比。
任务 | 任务描述 | 动机 | GPT-3困惑度 | BERT-Large-CAs1困惑度 | SOTA困惑度 | GPT-3准确度 | SOTA准确度 |
---|---|---|---|---|---|---|---|
Penn Tree Bank | 将整个文本作为提示输入到GPT-3中,并评估其困惑度。 | 语言模型评估。 | 20.5 | 31.3 | |||
LAMBADA | 预测句子的最后一个词。 | 解决这个任务需要对较长的内容进行建模,并对较长的内容具有一定的依赖。 | 1.92 | 8.63 | |||
HellaSwag | 从一系列选择中选出最适合完成句子的选项。 | 评估模型进行常识推理的能力。 | 79.3 | 85.6 |
注:
对于任务Penn Tree Bank,是有可能存在训练/测试泄露问题的。作者没有在一些数据集上进行评估,例如WikiText-103。GPT-3是在维基百科上进行训练的,因此在这方面PTB是具有优势的。数据泄露是当前大型数据集的另一个复杂问题:很难检查你的测试数据是否出现在你的训练数据中,并被记忆下来。
对于任务HellaSwag,SOTA结果是在该数据集的训练集中微调得到的结果,而GPT-3则是在完全不在该数据集训练的情况下获得了接近的结果。
在这个实验中,语言模型的输入是一个问题,输出是一个答案。语言模型必须以某种方式“知道”答案,而无需在数据库或一组文档中查找信息。
任务 | 任务描述 | GPT-3(few-shot)准确度 | GPT-3(zero-shot)准确度 | SOTA准确度 | 备注 |
---|---|---|---|---|---|
TriviaQA | 给定一问题后生成答案 原始数据集是由业余爱好者收集的,并被用作开放式阅读理解的挑战 | 71.2 | 64.3 | 68.0 (RAG) | 增加模型大小和增加in-context training实例都有助于提高性能 |
WebQuestions | 问答任务,数据集从Google搜索查询中收集,最初用于对知识库的问题回答。 | 41.5 | 14.4 | 45.5(RAG) | |
NaturalQuestions | 回答问题,从Google搜索查询中收集的数据集(区别在于答案的长度较长) | 29.9 | 14.6 | 44.5(RAG) |
翻译任务是将源语言中的句子翻译成目标语言中的句子。标准的评估数据集比如是WMT’14和WMT’16数据集。由于存在多种可能的翻译,所以(自动)评估指标是BLEU(它捕获了n-gram重叠的概念)。
任务 | 任务描述 | GPT-3(few-shot)准确度 | GPT-3(zero-shot)准确度 | SOTA准确度 | 备注 |
---|---|---|---|---|---|
Translation | 德语到英语翻译 | 40.6 | 27.2 | 40.2 |
注:
即使没有监督训练数据,GPT-3也能达到全监督系统的最新技术水平!
从英语到外语的结果要差得多,这是可以预料的,因为GPT-3主要是一个英语模型。
GPT-3是一个语言模型(主要是英语),但我们可以在一系列更“抽象推理”的任务上评估它,以评估GPT-3作为更通用模型的性能。
可以看到,随着模型规模的上升,GPT-3还是表现出了较为优秀的能力的,而这些能力仅仅是在很少量样本条件下训练得到的。
[1] Brown T B , Mann B , Ryder N ,et al. Language Models are Few-Shot Learners[J]. 2020.DOI:10.48550/arXiv.2005.14165.
[2] 第2章 大模型的能力 (datawhalechina.github.io)
[3] Capabilities | CS324 (stanford-cs324.github.io)
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。