论文:
《Prefix-Tuning: Optimizing Continuous Prompts for Generation》
微调是(finetuning
)使用大型 pretrained
语言模型执行下游任务(如摘要)的普遍范式,但它需要更新和存储语言模型的所有参数。因此,为了建立和部署依赖大型 pretrained
语言模型的 NLP
系统,目前需要为每个任务来存储语言模型参数的 modified copy
。考虑到当前语言模型的庞大规模,这可能是非常昂贵的,例如,GPT-2
有 774M
参数、GPT-3
有175B
参数。
解决这个问题的一个自然方法是lightweight fine-tuning
,它冻结了大部分 pretrained parameters
,并用小的可训练模块来 augment
模型。例如,adapter-tuning
在 pretrained
语言模型的层之间插入额外的 task-specific layers
。adapter-tuning
在自然语言理解和自然语言生成基准上有很好的表现,达到了与微调相当的性能,而只增加了大约 2-4%
的 task-specific parameters
。
在另一个方面,GPT-3
可以在没有任何 task-specific tuning
的情况下部署。相反,用户将自然语言的任务指令(例如,TL;DR
用于摘要任务)和一些样本添加到任务输入中,然后从语言模型中生成输出。这种方法被称为 in-context learning
或 prompting
。
在本文中,我们提出了 prefix-tuning
,这是一种轻量级的替代微调的方法用于自然语言生成任务,其灵感来自于 prompting
。考虑为数据表格生成文本描述的任务,如 Figure 1
所示,任务输入是一个线性化的表格(例如,"name: Starbucks | type: coffee shop"
),输出是一个文本描述(例如,"Starbucks serves coffee."
)。prefix-tuning
将 continuous task-specific vectors
序列(我们称之为prefix
,在 Figure 1(bottom)
中用红色块描述)前置到输入中。对于随后的 tokens
,Transformer
可以关注 prefix
,就像它是一串 "virtual tokens"
一样,但与 prompting
不同的是,prefix
完全由 free parameters
组成,不对应于 real tokens
。 Figure 1 (top)
中的微调会更新所有 Transformer parameters
,因此需要为每个任务存储模型的 tuned copy
。与微调相反,prefix-tuning
只优化 prefix
。因此,我们只需要存储大型Transformer
的一个副本、以及学到的一个 task-specific prefix
,为每个额外的任务产生一个非常小的开销(例如,250K
参数用于table-to-text
任务)。
实际上是在模型的每一层
Layer
(包括输入层)都添加了相同的一个prefix
,而不同任务的prefix
不同。
与微调相反,prefix-tuning
是模块化的:我们训练一个上游的prefix
,这个上游的 prefix
引导下游的语言模型,而下游的语言模型保持 unmodified
。因此,单个语言模型可以一次同时支持许多任务。在任务对应不同用户的 personalization
的背景下,我们可以为每个用户准备一个单独的prefix
,这个 prefix
只对该用户的数据进行训练从而避免数据交叉污染。此外,prefix-based
的架构使我们甚至可以在一个 batch
中处理来自多个 users/tasks
的样本,这是其他轻量级微调方法所不能做到的。
我们在使用 GPT-2
在 table-to-text generation
任务上、以及使用 BART
在抽象摘要任务上评估 prefix-tuning
。在存储方面,prefix-tuning
存储的参数比 fine-tuning
少 1000
倍。在对完整数据集进行训练时的性能方面,prefix-tuning
和 fine-tuning
在 table-to-text
任务上不相上下,而 prefix-tuning
在摘要任务上会有小幅下降。在 low-data setting
中,prefix-tuning
在这两项任务上的平均表现都优于微调。prefix-tuning
还能更好地推断出有 unseen
主题的表格(在 table-to-text
任务)和文章(在摘要任务)。
相关工作:
natural language generation: NLG
的微调:目前 SOTA
的自然语言生成系统是基于 fine-tuning pretrained LM
。
对于 table-to-text generation
,《Text-to-text pre-training for data-to-text tasks》
微调了一个 sequence-to-sequence
模型(T5
)。
对于抽取式摘要(extractive summarization
)和抽象式摘要(summarization
),研究人员分别微调 masked language model
(如 BERT
)和 encode-decoder model
(如BART
)。
对于其他的 conditional NLG
任务,如机器翻译和对话生成,微调也是普遍存在的范式。
在本文中,我们关注的是使用 GPT-2
的 table-to-text
任务、以及使用 BART
的摘要任务,但 prefix-tuning
也可以应用于其他 generation
任务、以及其他 pretrained
模型。
轻量级微调:轻量级微调冻结了大部分 pretrained parameters
,并用小的可训练模块来修改 pretrained model
。关键的挑战是如何确定高性能的模块结构、以及要调优的 pretrained parameters
的子集。
一条研究路线是考虑删除参数:通过在模型参数上训练一个 binary mask
从而消除一些模型权重(《Masking as an efficient alternative to finetuning for pretrained language models》
、《How fine can fine-tuning be? learning efficient language models》
)。
另一条研究路线考虑插入参数。例如:
《Side-tuning:A baseline for network adaptation via additive side networks》
训练了一个 "side"
网络,该网络通过 summation
与 pretrained model
进行融合。
adapter-tuning
在 pretrained LM
的每一层之间插入 task-specific layers
(adapters
)(《Parameter-efficient transfer learning for NLP》
、《Exploring versatile generative languagemodel via parameter-efficient transfer learning》
、《Learning multiple visual domains with residual adapters》
、《Adapter-fusion: Non-destructive task composition for transfer learning》
)。
这个研究方向调优了大约 3.6%
的语言模型参数。与之相比,我们的方法在 task-specific parameters
方面进一步减少了30
倍,只调优了 0.1%
的参数,同时保持了相当的性能。
Prompting
:prompting
是指在任务输入中前面添加指令和一些样本,并从语言模型中生成输出。
GPT-3
使用手动设计的 prompts
从而适配它的 generation
从而用于不同的任务,这个框架被称为 in-context learning
。然而,由于Transformers
只能对有界长度的上下文进行条件生成(例如,GPT-3
的 2048 tokens
),in-context learning
无法完全利用长于上下文窗口的训练集。
《Conditioned natural language generation using only unconditioned language model: An exploration》
也通过关键词来提示从而控制 generated sentence
的情感或主题。
在自然语言理解任务中,prompt engineering
已经在之前的工作中为 BERT
和 RoBERTa
等模型进行了探索。例如,AutoPrompt
(《Autoprompt: Eliciting knowledge from language model swith automatically generated prompts》
)搜索 discrete trigger words
的一个序列,并将其与每个输入拼接起来,从而引导被 masked LM
的情感或事实性知识。与 AutoPrompt
相比,我们的方法优化 continuous prefixes
,其表达能力更强。此外,我们专注于语言生成任务。
连续向量已经被用来引导语言模型;例如,《Can unconditional language models recover arbitrary sentences?》
表明,pretrained LSTM
语言模型可以通过优化一个连续向量来重建任意的句子,使向量成为 input-specific
。相比之下,prefix-tuning
优化了一个 task-specific prefix
,适用于该任务的所有实例。因此,与之前的工作(它的应用仅限于句子重建)不同的是,prefix-tuning
可以应用于自然语言生成任务。
可控的 generation
:可控生成的目的是引导 pretrained
语言模型与句子层面的属性(例如,positive
情感、或关于体育的话题)相匹配。
这种控制可以在训练时发生:《Ctrl: A conditional transformer language model for controllable generation》
对语言模型( CTRL
)进行预训练,从而对元数据(如关键词或 URL
)施加条件。
此外,控制可以发生在解码期间,通过加权解码(《GeDi: Generative Discriminator Guided Sequence Generation》
)或迭代式地更新过去的 activations
(PPLM
,《Plug and play language models: A simple approach to controlled text generation》
)。
然而,目前还没有直接的方法来应用这些可控的生成技术来对所生成的内容进行细粒度的控制,如 table-to-text
任务和摘要任务所要求的。
考虑一个 conditional generation
任务,输入是一个上下文 tokens
序列。我们关注两个任务,如 Figure 2(right)
所示:
在 table-to-text
任务中,
在摘要任务中,
这里展示了
decoder-only
模型、encoder-decoder
模型。实际上encoder-only
模型(如BERT
)也可以采用类似的思路。
自回归语言模型:假设我们有一个基于 Transformer
架构(如 GPT-2
)的自回归语言模型 Figure 2(top)
所示,令
令 Transformer layer
的激活;令时间步 activation
是 activation layers
的拼接。自回归 Transformer
模型将 past activations
的函数,如下所示:
其中,最后一层的 next token
的分布:
其中:pre-trained
参数矩阵。
表示拼接后的文本序列的第 个 token
。
Encoder-Decoder
架构:我们也可以使用 encoder-decoder
架构(例如 BART
)来建模 Figure 2(bottom)
所示。所有 Transformer encoder
计算,所有
微调:在微调框架中,我们用 pretrained parameters
Prefix-Tuning
的直觉:基于来自 prompting
的直觉,我们认为有一个适当的上下文可以引导语言模型而不改变其参数。例如,如果我们想让语言模型生成一个单词(如,“奥巴马”),我们可以在输入的签名添加它的常见搭配作为上下文(如,"巴拉克"),语言模型将为所需的单词分配更高的概率。
将这一直觉延伸到生成单个单词或单个句子之外,我们想找到一个引导语言模型解决 NLG
任务的上下文。直观地说,上下文可以通过指导从 encoding
;也可以通过指导 next token
的分布来影响 "summarize the following table in one sentence"
)可能会指导专家标注员解决该任务,但对大多数 pretrained LM
来说是失败的。对离散的指令进行数据驱动的优化可能会有帮助,但 discrete optimization
在计算上具有挑战性。
我们可以将指令作为 continuous word embeddings
来优化,而不是对 discrete tokens
进行优化,其效果将向上传播到所有Transformer activation layers
、并向右传播到后续的 tokens
。严格来说,这比 discrete prompt
更有表达能力,因为 discrete prompt
需要匹配一个真实的单词的 embedding
。同时,这比介入所有层的 activations
(即,微调)的表达能力要差,后者避免了长距离的依赖,并包括更多可调优的参数。因此,prefix-tuning
优化了 prefix
的所有层。
Prefix-Tuning
的方法:prefix-tuning
为自回归语言模型添加了一个前缀,得到 Figure 2
所示。这里,
我们遵循方程 prefix
是自由参数。prefix-tuning
初始化一个尺寸为 prefix parameters
:
训练目标为 prefix parameters
是唯一可训练的参数。
注意:这在每一层都添加了相同的
prefix
,包括输入层。是否可以对不同的层采用不同的
prefix
,使得表达能力更强?这就是P-Tuning V2
的思想。
这里,
当
当prefix activations
总是位于左侧的上下文中,因此会影响其右边的任何 activations
。
reparametrization parameters
可以被放弃,只有前缀(
这种重参数化为什么能提升效果?作者没有讲解原因。读者猜测是:原始的
的自由度太高,而重参数化限制了它的自由度。这相当于降低了模型的容量。 这种重参数化技巧相当于对
增加了先验知识,但是读者感觉:原理上没讲清楚,整体算法不太优雅。
我们在三个标准的数据集上评估了 table-to-text generation
任务:E2E, WebNLG, DART
。
E2E
只有 1
个领域(即,餐厅评论),包含大约 50K
个样本,有 8
个不同的字段。对于一个 source table
,它包含多个 test references
,平均输出长度为 22.9
。我们使用官方的评估脚本,其中报告了 BLEU, NIST, METEOR, ROOUGE-L, CIDEr
。
WebNLG
有 14
个领域,包含 22K
个样本,输入 (subject, property, object)
三元组的序列。平均输出长度为 22.5
。在训练集和验证集,输入描述了来自 9
个不同的 DBpedia
类别的实体(例如,Monument
)。测试集由两部分组成:前半部分包含训练数据中的 DB
类别,后半部分包含 5
个未见过的类别。这些未见过的类别被用来评估外推(extrapolation
)。我们使用官方评估脚本,它报告 BLEU, METEOR, TER
。
DART
是开放领域,使用来自维基百科的 open-domain tables
。它的输入格式 (entity-relation-entity)
三元组与WebNLG
相似。平均输出长度为 21.6
。它由来自 WikiSQL, WikiTableQuestions, E2E, WebNLG
的 82K
个样本组成,并应用了一些人工或自动转换。我们使用官方评估脚本并报告 BLEU, METEOR, TER, Mover-Score, BERTScore, BLEURT
。
对于摘要任务,我们使用 XSUM
数据集,它是一个关于新闻文章的抽象摘要数据集,有 225K
个样本。文章的平均长度为 431
个单词,摘要的平均长度为 23.3
。我们报告了 ROUGE-1, ROUGE-2, ROUGE-L
。
baseline
:
对于 table-to-text generation
,我们将 prefix-tuning
与其他三种方法进行了比较:微调(FINETUNE
)、仅对顶部 2
层进行微调(FT-TOP2
)、adapter-tuning
(ADAPTER
)。
我们还报告了目前在这些数据集上的SOTA
结果:
在 E2E
上,《Pragmatically informative text generation》
使用了一个没有预训练的 pragmatically informed model
。
在WebNLG
上, 《Text-to-text pre-training for data-to-text tasks》
对 T5-large
进行了微调。
在 DART
上,没有发布在这个数据集版本上训练的官方模型。
对于摘要,我们与微调 BART
进行比较。
实验配置:
对于 table-to-text
,我们使用 GPT-2_MEDIUM
和 GPT-2_LARGE
,source tables
被线性化。对于摘要,我们使用 BART_LARGE
,源文章被截断为 512
个 BPE tokens
。
我们的实现是基于 Hugging Face Transformer
模型。在训练时,我们使用 AdamW
优化器和一个线性学习率调度器,正如 Hugging Face
默认设置所建议的。我们调优的超参数包括 epoch
数量、batch size
、学习率、prefix
长度。超参数的细节如下表所示。默认设置是训练 10 epochs
,使用 batch size = 5
,学习率 prefix
长度为 10
。
table-to-text
模型在 TITAN Xp
或 GeForce GTX TITAN X
机器上训练。在 22K
样本上,prefix-tuning
每个 epoch
需要 0.2
小时,而微调则需要 0.3
小时。摘要模型在 Tesla V100
机器上训练,在 XSUM
数据集上每个 epoch
需要 1.25
小时。
在解码时,对于三个 table-to-text
数据集,我们使用 beam size = 5
的 beam search
。对于摘要,我们使用 beam size = 6
的 beam search
,以及 0.8
的长度归一化。对于 table-to-text
,每个句子的解码需要 1.2
秒(没有 batching
);对于摘要,每个 batch
的解码需要 2.6
秒(batch size = 10
)。
Table-to-text Generation
任务:我们发现,只添加 0.1%
的 task-specific parameters
,prefix-tuning
在 table-to-text generation
中是有效的,超过了其他轻量级 baseline
(ADAPTER
和 FT-TOP2
),并取得了与微调相当的性能。这一趋势在所有三个数据集上都是如此: E2E, WebNLG, DART
。
为了公平比较,我们将 prefix-tuning
和 adapter-tuning
的参数数量匹配为 0.1%
。Table 1
显示,prefix-tuning
明显优于ADAPTER
(0.1%
),平均每个数据集获得 4.1 BLEU
的改善。
即使我们与微调(100%
)和 adapter-tuning
( 3.0%
)相比(它们更新的参数数量要超过 prefix-tuning
),prefix-tuning
仍然取得了相当或更好的结果。这表明 prefix-tuning
比 adapter-tuning
更具有帕累托效率:在提高生成质量的同时大大减少了参数。
帕累托效率:效果好的同时参数量也少。
此外,在 DART
上取得良好的性能表明,prefix-tuning
可以泛化到具有不同领域和大量关系的 table
。我们将在后续实验深入研究外推性能(即泛化到对未见过的类别或主题)。
总的来说,prefix-tuning
是一种有效的、节省空间的方法,可以使 GPT-2
适用于 table-to-text generation
。学到的 prefix
有足够的表达能力来引导 GPT-2
,以便正确地从非自然语言的格式中提取内容并生成文本描述。prefix-tuning
也能很好地从 GPT-2_MEDIUM
扩展到 GPT-2_LARGE
,这表明它有可能扩展到具有类似架构的更大的模型,比如 GPT-3
。
摘要任务:如 Table 2
所示,在参数为 2%
的情况下,prefix-tuning
获得的性能略低于微调(在 ROUGE-L
中为 36.05 vs. 37.25
)。在只有 0.1%
的参数下,prefix-tuning
的性能低于 full fine-tuning
(35.05 vs. 37.25
)。
在 XSUM
和 table-to-text
数据集之间有几个不同之处,可以解释为什么prefix-tuning
在 table-to-text
中具有相对优势:
XSUM
包含的样本比三个 table-to-text
数据集平均多 4
倍。
XSUM
输入的文章比 table-to-text
数据集的线性化表格的输入平均长 17
倍。
摘要任务可能比 table-to-text
更复杂,因为它需要阅读理解、以及识别文章的关键内容。
Prefix(0.1%)
和Prefix(2%)
分别代表prefix length
等于多少?论文并未说明。根据读者猜测,Prefix(0.1%)
对应于prefix length = 5
、Prefix(2%)
对应于prefix = 100
。
Low-data Setting
:基于 table-to-text
任务和摘要任务的结果,我们观察到,当训练样本的数量较少时,prefix-tuning
具有相对的优势。为了构建 low-data settings
,我们对完整的数据集(table-to-text
的 E2E
、摘要任务的 XSUM
)进行降采样,得到大小为 {50, 100, 200, 500}
的小数据集。对于每个大小,我们采样五个不同的数据集,并训练两个 training random seeds
然后取平均。因此,我们对 10
个模型进行平均,以获得每个 low-data setting
的估计。
Figure 3(right)
显示,prefix-tuning
在 low-data setting
下平均比微调多出 2.9 BLEU
,此外所需的参数也更少;但随着数据集规模的增加,差距也在缩小。
从质量上看,Figure 3(left)
显示了由在不同数据量上训练的prefix-tuning model
和 fine-tuning model
所产生的 8
个样本。虽然两种方法在 low data
区域下都倾向于生成不足(缺失表格内容),但 prefix-tuning
往往比微调更忠实。例如,微调 (100, 200)
错误地声称顾客的评价很低,而真实的评价是平均的;而 prefix-tuning (100, 200)
所生成的描述是忠实于表格的。
prefix-tuning
和微调在 low-data setting
下的表现,更详细的曲线如 Figure 6
所示。
Extrapolation
:我们现在研究了针对 table-to-text
和摘要任务对未见过的主题的推断性能。为了构建一个外推环境,我们对现有的数据集进行了拆分,使训练集和测试集涵盖不同的主题。
对于 table-to-text
,WebNLG
数据集被 table topics
所标记。有 9
个类别在训练集和验证集中出现,表示为 SEEN
;5
个类别只在测试集中出现,表示为 UNSEEN
。所以我们通过对 SEEN
类别的训练和对 UNSEEN
类别的测试来评估外推法。
对于摘要,我们构建了两个外推数据子集:
在 news-to-sports
中,我们对新闻文章进行训练,对体育文章进行测试。
在 within-news
中,我们对 {world, UK, business}
新闻进行训练,并对其余新闻类别(如健康、科技)进行测试。
如 Table 3
和 Table 1
(中间)的 "U"
列所示,在 table-to-text
任务和摘要任务上,pre-fixtuning
在所有指标下都比微调有更好的外推能力。
我们还发现,adapter-tuning
取得了良好的外推性能,与 pre-fixtuning
相当,如 Table 1
所示。这种共同的趋势表明,保留语言模型参数确实对外推有积极影响。然而,这种收益的原因是一个开放的问题,我们将在后续章节进一步讨论。
Prefix
长度:较长的 prefix
意味着更多的可训练参数,因此有更强的表达能力。Figure 4
显示,性能会随着 prefix
长度的增加而增加,直到一个阈值(摘要任务为 200
、table-to-text
为 10
),然后性能会有轻微的下降。
根据经验,较长的 prefix
对推理速度的影响可以忽略不计,因为整个 prefix
的注意力计算在 GPU
上是并行的。
Full vs Embedding-only
:如前文所述,我们讨论了优化"virtual tokens"
的 continuous embeddings
。我们将这一想法实例化,并称之为 embedding-only
消融分析。word embeddings
是自由参数,上层 activation layers
由 Transformer
计算。Table 4 (top)
显示,性能明显下降,表明仅仅调优 embedding layer
并不具有足够的表达能力。
embedding-only
的消融分析给出了 discrete prompt optimization
的性能上限,因为 discrete prompt
限制了 embedding layer
要完全匹配真实单词的 embedding
。因此,我们有这样一个表达能力递增的链条:discrete prompting < embedding-only ablation < prefix-tuning
。
这里的结论是存疑的,因为
的参数化技巧导致的。这种参数化使得 embedding-only
的自由度降低。应该在采用embedding-only
的时候,去掉参数化技巧(这就是P-Tuning
的思想)。
Prefixing vs Infixing
:我们还研究了可训练的 activations
在序列中的位置如何影响表现。在 prefix-tuning
中,我们把它们放在开头 activations
放在 infix-tuning
。Table 4 (bottom)
显示,infix-tuning
的表现略逊于 pre-tuning
。我们认为这是因为 prefix-tuning
可以影响 activations
,而 infix-tuning
只能影响 activations
。
初始化:我们发现,prefix
的初始化方式在 low-data settings
下有很大的影响。随机初始化会导致高方差的低性能。如 Figure 5
所示,用真实单词的 activations
来初始化prefix
,可以明显改善 generation
。具体而言,用任务相关的单词如 "summarization"
和 "table-to-text"
来初始化所获得的性能,比用任务无关的单词如 "elephant"
和 "divide"
略好,但使用真实的单词仍然比随机要更好。
由于我们用语言模型计算的真实单词的 activations
来初始化前缀,这种初始化策略与尽可能地保留 pretrained LM
是一致的。
注意:这里描述的是参数的初始化,而参数的梯度更新是采用参数化技巧。
Figure 7
给出了更多的关于初始化的指标。
个性化(Personalization
):正如我们在前面章节中指出的,当有大量的任务需要独立训练时,prefix-tuning
是有利的。一个实际的 setting
是用户隐私。为了保护用户隐私,每个用户的数据需要被分开,并且需要为每个用户独立训练一个个性化的模型。因此,每个用户可以被看作是一个独立的任务。如果有数以百万计的用户,prefix-tuning
可以 scale
到这种 setting
,并保持模块化。通过增加或删除用户的 prefix
,可以灵活地增加或删除用户,而不会造成交叉污染。
跨用户的 Batching
:在 personalization setting
下,prefix-tuning
允许对不同用户的 query
进行 batching
,即使这些 query
采用不同的 prefix
。当多个用户用他们的inputs
来 query
云端 GPU
设备时,将这些用户放在同一 batch
是很有计算效率的。prefix-tuning
可以保持共享的语言模型不变;因此,batching
需要一个简单的步骤,即把 personalized prefix
添加到用户的输入之前,其余所有的计算都是不变的。相比之下,在 adapter-tuning
中,我们不能在不同的用户之间进行 batching
,因为 adapter-tuning
在共享的 Transformer layers
之间有 personalized adapters
。
batch
内不同样本的prefix
不同,可以类似于word embedding
的思路,认为每个用户一个id
,prefix vector
就是id embedding
。
Prefix-tuning
的归纳偏置(Prefix-tuning
):回顾一下,微调会更新所有的 pretrained parameters
,而 prefix-tuning
和 adapter-tuning
则会保留 pretrained parameters
。由于语言模型是在通用语料库上进行预训练的,保留语言模型参数可能有助于泛化到训练期间未见的领域。与这种直觉相一致的是,我们观察到 prefix-tuning
和 adapter-tuning
在 extrapolation settings
中都有明显的性能提升;然而,这种提升的原因是一个开放的问题。
虽然 prefix-tuning
和 adapter-tuning
都冻结了 pretrained parameters
,但它们调优不同的参数集合来影响 Transformer
的 activations
。回顾一下,prefix-tuning
保持语言模型的完整,并使用 prefix
和 pretrained attention blocks
来影响后续的 activations
;adapter-tuning
在语言模型的层之间插入可训练的模块,直接将 residual vectors
添加到 activations
中。此外,我们观察到,与 adapter-tuning
相比,prefix-tuning
需要的参数要少得多,同时又能保持相当的性能。我们认为参数效率的提高是因为 prefix-tuning
尽可能地保持了 pretrained LM
的完整性,因此比 adapter-tuning
更能利用语言模型。
《Intrinsic dimensionality explains the effectiveness of language model fine-tuning》
的同期工作使用 intrinsic dimension
表明,存在一个低维度的 reparameterization
,其微调效果与 full parameter space
一样。这解释了为什么只需更新少量的参数就能在下游任务上获得良好的准确率。我们的工作与这一发现相呼应,表明通过更新一个非常小的 prefix
就可以达到良好的 generation
性能。
论文:
《GPT Understands, Too》
语言模型预训练是许多自然语言处理任务的成功方法。有证据表明,在预训练过程中,语言模型不仅学习了 contextualized text representation
,还学习了语法、句法、常识、甚至世界知识。
根据训练目标,预训练的语言模型可以分为三类:
用于自然语言生成(natural language generation: NLG
)的单向语言模型,如GPT
。
用于自然语言理解(natural language understanding: NLU
)的双向语言模型,如BERT
。
结合前两种范式的混合语言模型,如 XLNet
、UniLM
。
长期以来,研究人员观察到 GPT
风格的模型在具有微调的 NLU
任务中表现不佳,因此认为它们天然地不适合语言理解。
新兴的 GPT-3
,以及它在具有手工制作的 prompts
的 few-shot learning
和 zero-shot learning
上的特殊表现,已经席卷机器学习界。它的成功表明,巨大的单向语言模型加上适当的 manual prompt
可能会对自然语言理解起作用。然而,手工制作一个表现最好的 prompt
就像在干草堆里找一根针,这往往需要不切实际的大型验证集。在许多情况下,prompt engineering
实际上意味着对测试集的过拟合。此外,很容易创建 adversarial prompts
,导致性能大幅下降。鉴于这些问题,最近的工作集中在自动搜索离散的 prompts
(LPAQA
、LM-BFF
、Metaprompt
),并证明其有效性。然而,由于神经网络本身是连续的,离散的 prompts
可能是次优的。
在这项工作中,我们提出了一种新的方法 P-tuning
,该方法在连续空间中自动搜索 prompts
,以弥补 GPT
和 NLU applications
之间的 gap
。P-tuning
利用少数连续的 free parameters
作为 prompts
输入到 pre-trained
的语言模型中。然后,我们使用梯度下降法对 continuous prompts
进行优化,从而作为 discrete prompt searching
的一种替代。
简单的 P-tuning
方法为 GPT
带来了实质性的改进。我们在两个 NLU
基准上检验了基于 P-tuning
的 GPT
: LAMA knowledge probing
和 SuperGLUE
。
在 LAMA knowledge probing
中,其中模型参数是 fixed
的,与原始手工的 prompts
相比,基于 P-tuning
的 GPT
在 Precision@1
中显示出 26.2%-41.1%
的绝对收益。最好的一个模型在 LAMA
中达到了 64.2%
,大大超过了 SOTA
的 45.2%
的 prompt searching
方法。
在 SuperGlue
中,我们在 few-shot
和完全监督的情况下联合应用 P-tuning
和微调。结果,GPT
的性能与具有相同规模的BERT
模型相比具有竞争力,对于某些数据集,GPT
的性能甚至超过了 BERT
。
进一步的实验表明,BERT
风格的模型也可以在一定程度上受益于 P-tuning
。我们表明,带有 P-tuning
的 ALBERT
大大超过了以前的方法,并在 few-shot SuperGLUE
基准上取得了新的 SOTA
。
我们的发现打破了GPT
只能 generate
而不能 understand
的刻板印象。它还表明,语言模型包含的世界知识、以及 prior-task
知识要比我们以前假设的多得多。P-tuning
也可以作为一种通用的方法来调优 pre-trained
的语言模型,以获得最佳的下游任务性能。总而言之,我们做出了以下贡献:
我们表明,在自然语言理解方面,GPT
可以和 BERT
一样具有竞争力(有时甚至更好),而 P-tuning
可以提高 pre-trained
语言模型的性能。这表明,GPT
风格的架构在自然语言理解方面的潜力被低估了。
我们表明,P-tuning
是一种通用的方法,可以在 few-shot setting
和 fully-supervised setting
下改善 GPT
和 BERT
。尤其地,通过 P-tuning
,我们的方法在 LAMA knowledge probing
和 few-shot SuperGlue
上的表现超过了 SOTA
的方法,这表明语言模型在预训练期间掌握了比我们之前想象的更多的世界知识和 prior-task
知识。
论文缺乏消融研究部分,一些关键设计只有结论没有实验的验证。
相关工作:
Pre-trained Language Model
:最近,自监督预训练语言模型的突破,推动了自然语言处理的发展。
GPT
首次利用 transformer
架构对大规模 web text
进行预训练。
BERT
提出了 masked language modeling
,并创建了 pre-train/finetuning
范式。
XLNet
创新性地提出了 permutation language modeling
。
RoBERTa
进行了详细的实验,展示了与预训练有关的有用技术。
BART, T5, UniLM
,它们试图统一语言理解和语言生成。
作为知识库的语言模型:自语言模型诞生以来,研究人员观察到,语言模型不仅学习了 contextualized text representation
,还学习了各种类型和数量的知识,包括语言知识和世界知识。
《A structural probe for finding syntax in word representations》
证明了语言模型产生的 contextualized representation
可以在 embedding
空间中形成解析树。
《A multiscale visualization of attention in the transformer model》
、《What does bert look at? an analysis of bert’s attention》
研究了 multi-head attention internal transformers
,发现某些 attention head
可能对应于一些语法功能,包括共指关系(co-reference
)和名词修饰。
另一个重要的方向是关于语言模型学习了多少世界知识或事实性知识。
LAMA
提出利用从知识库中的 fact
三元组转化而来的完形填空测试来考察语言模型在记住 fact
的能力,其中答案是以单个 token
的形式给出的。
在 《Language models are openk nowledge graphs》
中,作者研究了 attention
矩阵,发现 attention
也会表明上下文中包含的知识三元组,从而开发了一个开放的知识图谱构建框架。
《X-factr: Multilingual factual knowledge retrieval from pretrained language models》
基于 LAMA
开发了一个 multi-token
的 fact retrieval
数据集。
Language Model Prompting
:GPT-3
的诞生、以及 GPT-3
在多任务和 few-shot learning
中的出色表现让人们感到震撼。然而,GPT-3
并不是为微调而设计的,它在很大程度上依赖手工的 prompts
(或 in-context learning
)从而迁移到下游任务中。为了更好地将大型语言模型应用于自然语言理解,最近的工作集中在自动化搜索 discrete prompts
,通过挖掘训练语料(《How can we know what language models know?》
)、 token-based
的梯度搜索(《Autoprompt: Eliciting knowledge from language models with automatically generated prompts》
)、以及使用单独的模型(《Making pre-trained language models better few-shot learners》
)如 T5
来生成 prompts
。然而,由于神经网络的连续性的特点,在离散空间中的搜索是具有挑战性的和次优的。
最近, 《Prefix-tuning: Optimizing continuous prompts for generation》
提出了用于自然语言生成任务的 prefix-tuning
,它采用了与我们的 P-tuning
类似的策略来训练 continuous prompt
。然而,它们在几个方面是不同的。
首先,prefix-tuning
是为自然语言生成任务和 GPT
设计的,而 P-tuning
则针对自然语言理解任务和所有类型的语言模型。
事实上,
prefix-tuning
也可以用于所有类型的任务、所有类型的模型。
第二,prefix-tuning
只允许在输入序列的开头添加 prompt tokens
,而 P-tuning
可以在任何地方插入 tokens
。
第三,prefix-tuning
在 transformer
的每一层都侵入性地拼接了 continuous prompt tokens
,因为作者发现仅仅在输入中 prompting
并没有效果;相反,P-tuning
非侵入性地只在输入中添加 continuous prompts
从而工作良好。
最后,P-tuning
还介绍了如何使用 anchor prompts
来进一步改进。
即,添加类似于
"?"
这样的token
在prompts
中。
尽管存在差异,我们认为我们的 P-tuning
和 prefix-tuning
都指出,学习 continuous prompts
是有用的,并且优于 discrete prompt searching
。
动机:GPT-3
和 DALLE
的奇迹似乎表明,巨型模型总是不折不扣的提升机器智能的万能药。然而,在繁荣的背后,存在着不可忽视的挑战。一个致命的问题是,巨型模型的可迁移性很差。对于这些万亿规模的模型,在下游任务上的微调几乎很难进行。即使是对于 many-shot finetuning setting
,这些模型仍然太大,无法快速记忆 fine-tuning samples
(《Interventional few-shot learning》
)。
鉴于这一挑战,最近的工作集中在自动化搜索 discrete prompts
,通过挖掘训练语料、 token-based
的梯度搜索、以及使用单独的模型来生成 prompts
。然而,我们深入研究了寻找 continuous prompts
的问题,其中 continuous prompts
可以通过微分来优化。
接下来,我们介绍了 P-tuning
的实现。与 discrete prompts
类似,P-tuning
只对输入进行非侵入性的修改。尽管如此,P-tuning
用它的differential output embeddings
取代了 pre-trained
语言模型的 input embedding
。
给定一个 pre-trained
语言模型 input tokens
的序列 pre-trained embedding layer
input embeddings
target tokens
output embeddings
进行下游的处理。例如:
在预训练中,unmasked tokens
,而 [MASK] tokens
。
在句子分类中,sentence tokens
,而 [CLS]
。
prompt
target
LAMA-TREx P36
),一个模板可能是 "The capital of Britain is [MASK]."
(如下图所示),其中 "The capital of ... is ... ."
是 prompt
,"Britain"
是上下文,"[MASK]"
是 target
。prompts
可以非常灵活,我们甚至可以将其插入上下文或 target
中。
令 prompt token
。为了简单起见,给定一个模板 discrete prompts
满足
相反,P-tuning
将 pseudo tokens
,并将模板映射为:
其中:embedding
张量,continuous prompts
。最后,利用下游损失函数 continuous prompt
其中:
注意,这里的
prefix
不一定要位于输入的开始,也可以位于输入的X
和Y
之间、甚至位于Y
之后。关于
prefix
的长度、位置,论文没有进行消融研究。
虽然训练 continuous prompts
的想法很直接,但在实践中,它面临着两个优化挑战:
离散性:word embedding
《A convergence theory for deep learning via over-parameterization》
),优化器将很容易陷入局部最小值。
association
:另一个担忧是,从直觉上讲,我们认为 prompt embeddings
prompt embeddings
相互关联起来。
鉴于这些挑战,在 P-tuning
中,我们建议使用一个由非常简单的神经网络组成的 prompt encoder
将 long-short term memory network: LSTM
,具有 ReLU
激活的双层 multilayer perceptron: MLP
,从而鼓励离散性。正式地,语言模型 input embeddings
虽然 LSTM head
的使用确实给 continuous prompts
的训练增加了一些参数,但 LSTM head
比 pre-trained
模型要小几个数量级。而且,在推理中,我们只需要输出 embedding
LSTM head
。
Prefix-Tuning
直接采用简单的MLP
,那么它采用这里的LSTM + MLP
是否也能提升效果?这种优化
的方式也不太优雅,与 Prefix-Tuning
一样都是采用了参数化技巧。此外,为什么这里要用
LSTM
?论文没有进行消融研究。
此外,我们还发现,在 SuperGLUE
基准测试中,添加一些 anchor tokens
有助于一些自然语言理解任务。例如,对于 RTE
任务,在 prompt
模板 "[PRE][prompt tokens][HYP]?[prompt tokens][MASK]"
中特别添加一个 anchor token "?"
,对性能有很大的影响。通常情况下,这样的 anchor words
代表了每个组件的特性,在这个例子中,"?"
表示 "[HYP]"
作为一个询问部分。
缺乏消融研究。
知识探测,或被称为事实检索(fact retrieval
),评估语言模型从预训练中获得了多少现实世界的知识。LAMA
数据集通过从知识库中选择的三元组创建的完形填空测试来评估它。例如,我们将把三元组 (Dante, born-in, Florence)
转化为一个带有人工的 prompt
(即,"Dante was born in [MASK]."
)的完形填空句子,然后我们要求语言模型推断出 target
。因为我们要评估从预训练中获得的知识,所以 pre-trained
语言模型的参数是固定的(即不进行微调)。
数据集:LAMA
。
LAMA
强迫所有的答案都是 single-token
的格式。我们首先采用原始的 LAMA-TREx
数据集,其中包括 41
个 Wikidata
关系和总共 34,039
个测试三元组(即 LAMA-34k
,它涵盖了所有的 BERT
词表)。由于 GPT
和 BERT
的词表不同,我们建立了另一个版本的 LAMA
,它涵盖了 GPT
词表和 BERT
词表的交集。这个子集加起来大约有 29k
个测试三元组,我们把它命名为 LAMA-29k
。
至于训练,所有的 prompt searching
方法都需要一些额外的数据来训练或寻找 prompts
。我们遵循 AutoPrompt
(《Autoprompt: Eliciting knowledge from language models with automatically generated prompts》
) 中的设置,作者从原始 TRE-x
数据集中构建了一个训练集。这个训练集与测试集类似,但答案分布略有不同。
评估:最初,LAMA
为每个关系提供了如 Table 1
所示的人工 prompt
,这些 prompt
是有效的,但却是次优的。对于双向 masked language model
,我们只需要将 "[X]"
替换为主语实体、将 "[Y]"
替换为 [MASK] token
;对于 GPT
等单向语言模型,遵循LAMA
最初在 Transformer-XL
上的设置,我们使用 target position
之前的模型输出。在进行 P-tuning
方面 ,我们对双向模型使用 (3, sub, 3, obj, 3)
模板,对单向模型使用 (3, sub, 3, obj)
模板,其中数字表示 prompt tokens
的数量。在这个知识探测任务中,我们不使用任何 anchor tokens
。在训练过程中,我们将学习率设置为 1e-5
,并使用 Adam
优化器。
为什么要采用
(3, sub, 3, obj, 3)
模板、(3, sub, 3, obj)
模板?论文并未说明。
实验结果:结果如下表所示。可以看到:
P-tuning
极大地推动了知识探测的效果,在 LAMA-34k
中从 43.3%
提升到 50.6%
,在 LAMA-29k
中从 45.2%
提升到最高64.2%
。这一结果有力地表明,语言模型仅仅通过寻找更好的 prompt
,在没有微调的情况下捕获到的知识远比人们以前认为的要多。
当 P-tuning
与以前的 discrete prompt searching
方法如 AutoPrompt
、LPAQA
在相同大小的模型上进行比较时,P-tuning
仍然优于它们。
AutoPrompt
这一行代表什么含义?是AutoPrompt
结合P-tuning
,还是仅仅代表AutoPrompt
?论文未说明。读者猜测是仅仅代表AutoPrompt
。
P-tuning v.s. Fine-tuning
:在传统的知识探测中,不允许通过微调来改变 pre-trained
模型的参数。我们试图评估语言模型在预训练期间学到了多少知识。然而,这项工作的基本内容是比较 P-tuning
和 fine-tuning
,特别是在 GPT
这样的单向性语言模型上。我们对以下问题特别感兴趣: 单向和双向语言模型是否从 P-tuning
中获得了相似的改进?
为了对现有的 tuning
方法进行全面回顾,我们包括以下方法:
Manual Prompt: MP
:使用 LAMA
的原始的人工 prompts
。
Fine-tuning: FT
:只呈现 subject
并微调模型以预测 object
。
Manual Prompt with Fine-tuning: MP+FT
:用人工 prompts
对语言模型进行微调。
P-tuning
:使用 continuous prompts
,同时固定语言模型的参数。
我们在 LAMA-29k
中实现了这四种策略(见 Table 2
的右侧),我们发现 P-tuning
与 fine-tuning-based
方法相当或更好,这令人惊讶但也是合理的。
令人惊讶的是,微调应该是更有潜力的,因为它调优了所有语言模型的参数,而 P-tuning
则没有调优语言模型的参数。然而,这也是合理的,因为就知识探测而言,许多事实只能是 hard-coded
的,而不是由语言模型推断的。参数的微调可能会导致灾难性的遗忘。相反,P-tuning
并不改变 pre-trained
模型的参数,而是通过寻找更好的 continuous prompt
来唤起所存储的知识。
此外,有趣的是,看到 BERT
在 P-tuning
的改善、和 GPT
在 P-tuning
的改善之间存在明显的差距。带有高质量人工 prompts
的微调(MP+FT
)(PET-2
、LM-BFF
)已被证明是相当有效的,这在我们的实验中也被观察到。然而,令人惊讶的是,GPT
从 MP+FT
中受益的程度不如从 P-tuning
中受益的程度,而 BERT
从 MP+FP
中收益程度与从 P-tuning
中收益程度相当。换句话说,P-tuning
显示出与单向语言模型更好的亲和性。就更大的模型而言,如具有 11B
参数的 MegatronLM
,虽然微调几乎不工作,但 P-tuning
仍然适用,并在 LAMA
上达到了 SOTA
。
我们在 SuperGLUE
基准上进行了实验从而评估 P-tuning
。总共有 8
个自然语言理解任务,我们专注于其中的 7
个任务,因为另一个任务 ReCoRD
没有采用 prompts
,因此没有 P-tuning
。这七个任务包括:问答 (BoolQ
、MultiRC
)、文本蕴含( CB
、RTE
)、共指解析(WiC
)、因果推理(COPA
)、以及词义消歧( WSC
)。
对于实验设置,我们考虑了 fully-supervised setting
和 few-shot setting
。
在 fully-supervised setting
中,我们使用整个训练集(
对于 few-shot setting
,我们采用 SuperGLUE
的 few-shot
(也称为 FewGlue
)。FewGLUE
是 SuperGLUE
的一个子集,每个任务由 32
个训练数据(400
到 20000
)的未标记集(
以前的工作(PET finetuning
)假定没有任何验证集,并根据经验选择采用固定的超参数(这基本上是过拟合于测试集)。与它不同的是,我们构建了适当的few-shot
验证集(表示为 LM-BFF
),所以 few-shot
训练集
我们采用与PET-2
相同的评价指标。
我们将自然语言理解任务重新表述为完形填空任务。与PET finetuning
使用带有人类手工制作的 prompts
的模式不同,P-tuning
将 initial prompt embeddings
放在不同位置,然后与 pretrained
模型一起微调 prompt embeddings
。
对于 fully-supervised settings
,我们使用具有线性衰减学习率的 AdamW optimizer
。我们对超参数进行网格搜索,在{1e-5, 2e-5, 3e-5}
的学习率、以及 {16, 32}
的 batch size
。
对于小数据集(COPA, WSC, CB, RTE
),我们对 pretrained
模型微调 20
次。对于较大的数据集(WiC, BoolQ, MultiRC
),我们将 training epochs
的数量减少到 10
个,因为模型会更早收敛。我们评估每个 epoch
的性能。我们使用早停来避免对训练数据的过拟合。
对于 few-shot learning
,我们使用与PET-2
相同的超参数,只是将微调 steps
扩大到 3500
步(而不是该论文中的 250
步),因为 prompt embeddings
的微调需要更多步数。
P-tuning
可以用于所有的单向模型和双向模型。我们选择总计算量相似的模型进行公平的比较,其中我们选择 BERT-base
与GPT2-base
进行比较、BERT-large
与 GPT2-medium
进行比较。像 RoBERTa
这样的模型具有类似的模型规模,但是是用更大的计算量来训练的,应该与更大规模的 GPT
进行比较。这将留给未来的工作。
此外,对于 few-shot learning
,我们也用 albert-xxlarge-v2
进行了实验,它在 PET-2
中被证明是在 few-shot setting
中表现最好的 pretrained
模型。对于每个 pretrained
模型,我们报告了 standard finetuning
(即使用 [CLS] embedding
进行分类)、PET finetuning
、PET zero-shot
和 P-tuning
的性能。
Fully-supervised Learning
:主要结果见 Table 3
和 Table 4
。
首先,对于 bert-base-cased
模型 bert-large-cased
模型,P-tuning
在 7
个任务中的 5
个任务上优于所有其他 bert-based
模型。
例外的是 WiC
和 MultiRC
,P-tuning
的表现比 standard fine-tuning
差一点。由于 WiC
和 MultiRC
都有相对较大的训练集,我们猜测这可能是由于 standard fine-tuning
可以从较大的数据集中获得比 P-tuning
更多的优势。相反,P-tuning
在low-resource setting
下似乎更有利。类似的观察也在后面的实验中显示。
其次,对于 gpt2-base
和 gpt2-medium
模型,P-tuning
在所有 gpt2-base
模型中取得了最有前景的结果。
综上所述,我们可以得出结论,P-tuning
可以有效地提高 bert-based
模型和 gpt-based
模型的自然语言理解性能。
此外:
在 base
模型的规模下,带有 P-tuning
的 gpt2-base
在 7
个任务中的 6
个任务上超过了 BERT-based
模型的最佳结果,同时在 WiC
上取得了相差无几的结果。
在 large
模型的规模下,带有 P-tuning
的GPT2-medium
在 7
个任务中的 4
个任务上显示出优势,而在 RTE
和 WSC
任务上则具有可比性。唯一的例外是 WiC
任务。我们注意到,在 WiC
任务中,标准微调在不同 setting
的模型上显示出最佳结果。我们推测,这是因为词义消歧任务不适合 prompt-based MLM prediction
。
最重要的是,我们得出结论,通过 P-tuning
,GPT2
实现了与 BERT-based
模型相当的甚至更好的性能。这一发现颠覆了我们的普遍看法,即双向模型(如 BERT
)在自然语言理解任务中总是比单向模型(如 GPT2
)更好。
Few-shot learninng
:
次优的和敏感的 Manual Prompts
:最初,PET/iPET
在 SuperGLUE
的 few-shot learning
任务上,通过几个人工编写的prompts
实现了 SOTA
,这些 prompts
是有效的但却是次优的,而且是劳动密集型的。
为了全面了解 manual prompts
,我们首先进行了比较实验。Table 6
显示了使用不同 manual prompts
和 P-tuning
的结果。
首先,结果显示,few-shot
的表现与 prompts
的语义、格式、语法没有明显的关联。人类认为合理的prompts
对语言模型不一定有效。
第二,manual prompts
的细微变化会导致大幅度的性能差异。pretrained
语言模型对 prompts
的选择相当敏感。
我们可以得出结论,人工手写的 prompts
比我们想象的要复杂。此外,Table 6
还证明,使用 manual prompts
。这表明,在 few-shot setting
中挑选出最好的 manual prompts
也很有挑战性。相比之下,P-tuning
在自动寻找更好的 prompts
方面似乎很有希望,而手工制作的 prompts
的希望要少得多。
SuperGLUE Few-shot Learning
的新的 SOTA
:Table 5
列出了通过 P-tuning
实现的 Super-GLUE few-shot learning
的最新结果。我们将其与几个 baseline
进行了比较,包括 PET
、GPT-3
,其中 GPT-3
实现了以前的 SuperGLUE Few-shot SOTA
。
值得注意的是,除了 manual prompt finetuning
外,原始 PET
采用了多种额外的技术,包括数据增强、ensemble
、以及知识蒸馏,以提高性能。此外,它通过过拟合测试集来进行模型选择和超参数调优。为了确保公平的比较,PET
在我们的 setting
下进行了重新实验,去除所有的辅助技术(数据增强、ensemble
、知识蒸馏)。考虑到 PET
提供了多个 manual prompts
,这里报告了平均的 prompt
性能和最佳的 prompt
性能。
Table 5
说明,P-tuning
在所有任务上的表现一直优于具有manual prompts
的 PET
(PET-best
(7
个任务中的 5
个任务上,解决方案对 PET
(multiple patterns
的标准差,证明 P-tuning
可以搜索到远比 manual prompts
提示更好的 prompts
,并显著提高 few-shot
任务的性能。在包括 CB, WiC, RTE, WSC
的任务上,P-tuning
甚至优于 PET/iPET
(ensemble
、知识蒸馏)。与 GPT-3
相比,虽然 GPT-3
的规模比 P-tuning
大得多(albert-xxlargev2
),P-tuning
在7
个任务中的 6
个任务中表现优异。结果证明了 P-tuning
在few-shot
自然语言理解任务中的优势。
Finetuning v.s. MP finetuning v.s. P-tuning
:Table 3
和 Table 4
列出了三种 tuning-based
范式在提高自然语言理解的性能方面的结果。我们对这些 tuning-based
范式的不同表现特别感兴趣。
总的来说,P-tuning
在 BERT-based
模型上平均比fine-tuning
和 MP fine-tuning
高出 2
分左右,在 GPT2-based
模型上平均比fine-tuning
和 MP fine-tuning
高出 5
分左右。
具体来说,尽管 P-tuning
在大多数任务上取得了最好的结果,但fine-tuning
在那些难以制定成完形填空问题的任务(如WiC
)上可以胜出。
比较 P-tuning
和 MP fine-tuning
,P-tuning
一般比 MP fine-tuning
平均显示出更多的优势,因为 MP fine-tuning
要找到好的 manual prompts
是很困难的。相比之下,P-tuning
总是能够自动搜索到更好的 prompts
。
作为调优pretrained
模型的新范式,P-tuning
在调优 pretrained
模型的参数时,可以在广阔的 prompt space
中搜索。结果表明,它在 prompting
难以微调的 larger-scale pre-trained
模型方面具有竞争性的潜力。
论文:
《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》
pretrained
语言模型改善了各种自然语言理解任务的性能。一种广泛使用的方法,即微调,为 target
任务更新整个模型的参数集合。虽然微调获得了良好的性能,但它在训练过程中很耗费内存,因为必须存储所有参数的梯度和 optimizer states
。此外,在推理过程中为每个任务保留一份模型参数是不方便的,因为 pre-trained
模型通常很大。
另一方面,prompting
冻结了 pretrained
模型的所有参数,并使用自然语言 prompt
来 query
语言模型(GPT-3
)。例如,对于情感分析,我们可以将一个样本(例如,"Amazing movie!"
)与一个 prompt
"This movie is [MASK]"
拼接起来,并要求 pre-trained
语言模型预测 pre-trained
是 "good"
和 "bad"
的概率,以决定该样本的标签。prompting
完全不需要训练,只需存储一份模型参数。然而,与微调相比,discrete prompting
(Autoprompt
、LM-BFF
)在许多情况下会导致次优的性能。
prompt tuning
是一种只调优continuous prompts
的想法。具体来说,《Gpt understands, too》
、《The power of scale for parameter-efficient prompt tuning》
提出在 input word embeddings
的原始序列中添加可训练的 continuous embeddings
(也叫 continuous prompts
)。在训练期间,只有 continuous prompts
被更新。虽然在许多任务上,prompt tuning
比 prompting
有所改进,但当模型规模不大,特别是小于 10B
参数时,它仍然不如微调的表现(《The power of scale for parameter-efficient prompt tuning》
)。此外,正如我们的实验所显示的那样,与微调相比,prompt tuning
在几个难的序列标注任务上的表现很差,如 extractive
的问答。
我们在本文中的主要贡献是一个新的经验发现,即适当优化的 prompt tuning
可以在不同的模型规模和自然语言理解任务中与微调相媲美。与之前工作中的观察相反,我们的发现揭示了 prompt tuning
在自然语言理解中的普遍性和潜力。
从技术上讲,我们的方法 P-tuning v2
在概念上并不新颖。它可以被看作是 Deep Prompt Tuning
(《Prefix-tuning: Optimizing continuous prompts for generation》
、《Learning how to ask: Querying lms with mixtures of soft prompts》
)的优化的和适配的实现,旨在 generation
和 knowledge probing
。最显著的改进来自于对 pretrained
模型的每一层(而不仅仅是输入层)应用 continuous prompts
。deep prompt tuning
增加了 continuous prompts
的能力,并缩小了在各种 setting
下与微调的差距,特别是对于小模型和困难任务。此外,我们提出了一系列优化和实现的关键细节,以确保 finetuning-comparable
的性能。
实验结果表明,P-tuning v2
在不同的模型规模(从 300M
到 100B
参数)和各种困难的序列标注任务(如抽取式问答、命名实体识别)上的性能与微调相媲美。与微调相比,P-tuning v2
每个任务的可训练参数仅为微调时的 0.1%
到 3%
,这大大降低了训练时间成本、训练内存成本、以及每个任务的存储成本。
P-tuning v2
与P-tuning
的核心变化是:P-tuning v2
不仅在输入层插入continues prompts
,而且在每个layer
插入了continues prompts
。这似乎就是Prefix-Tuning
的思想?与
Prefix-Tuning
的区别在于实现细节不同:
P-Tuning v2
直接采用Classification Head
,这类似于BERT
。
P-Tuning v2
发现某些任务上,重参数化技巧导致效果下降。此外,论文实验部分聚焦于
fully-supervised setting
,即有大量的标记数据用于训练。这主要是因为P-Tuning v2
包含更多的trainable parameters
,包括:每一层的trainable continues prompts
、以及Linear Classification Head
。
自然语言理解任务:在这项工作中,我们将自然语言理解任务的挑战分为两个系列:简单的分类任务、困难的序列标注任务。
简单的分类任务涉及 label space
上的分类。GLUE
和 SuperGLUE
的大多数数据集都属于这个类别。
困难的序列标注任务涉及对tokens
序列的分类,如命名实体识别、抽取式问答。
Prompt Tuning
:令 embedding layer
。在 discrete prompting
(PET-2
)的案例中 ,prompt tokens
input embedding sequence
被表述为
《The power of scale for parameter-efficient prompt tuning》
和 《Gpt understands, too》
介绍了可训练的 ·continuous prompts
,作为自然语言理解任务的自然语言 prompts
的替代,其中 pretrained
语言模型的参数被冻结。给定可训练的 continuous embeddings
input embedding sequence
被写成 prompt tuning
与微调不相上下。
注意,下图和
P-Tuning
的原始论文有差异。在P-Tuning
原始论文中:
continues embeddings
仅应用于输入层,但是这里应用到了Layer 1 Prompts
。
continues embeddings
不仅仅在序列中间插入,而是可以在序列的头部插入一部分、在序列的中间插入一部分、甚至在序列的尾部插入一部分。
缺乏普遍性:《The power of scale for parameter-efficient prompt tuning》
、《Gpt understands, too》
在许多 NLP
应用中被证明相当有效,但由于缺乏普遍性,在取代微调方面仍有不足,如下所述。
缺少跨尺度的普遍性:《The power of scale for parameter-efficient prompt tuning》
表明,当模型规模超过 10B
参数时,prompt tuning
可以与微调相媲美。然而,对于被广泛使用的中型模型(从 100M
到 1B
),prompt tuning
的表现比微调差很多。
缺少跨任务的普遍性:尽管《The power of scale for parameter-efficient prompt tuning》
、《Gpt understands, too》
在一些自然语言理解基准上表现出了优越性,但 prompt tuning
在困难的序列标注任务上的有效性并没有得到验证。sequence tagging
为每个input token
来预测标签序列,这可能更难,而且与 verbalizers
不兼容(PET-2
)。在我们的实验中,我们表明《The power of scale for parameter-efficient prompt tuning》
、《Gpt understands, too》
在典型的序列标注任务上的表现比微调差。
考虑到这些挑战,我们提出了 P-tuning v2
,它将 deep prompt tuning
(《Prefix-tuning: Optimizing continuous prompts for generation》
、《Learning how to ask: Querying lms with mixtures of soft prompts》
)作为一个跨 scales
和跨自然语言理解任务的通用解决方案。
Deep Prompt Tuning
:在《The power of scale for parameter-efficient prompt tuning》
、《Gpt understands, too》
中,continuous prompts
只被插入到 input embedding sequence
中(参照 Figure 2(a)
)。这导致了两个挑战:
首先,由于序列长度的限制,可调优的参数的数量是有限的。
第二,input embeddings
对模型预测有相对间接的影响。
为了解决这些挑战,P-tuning v2
采用了 deep prompt tuning
。如 Figure 2
所示,在不同的层中,prompts
视为 prefix tokens
而被加入。
一方面,P-tuning v2
有更多可调优的 task-specific
参数(从 0.01%
到 0.1%-3%
),从而允许更多的 per-task
容量,同时具有parameter-efficient
。
另一方面,被添加到更深的层的prompts
对模型预测有更加直接的影响(见附录B
的分析)。
Optimization and Implementation
:为实现最佳性能,有一些有用的优化和实施细节。
Reparameterization
:之前的工作通常利用 reparameterization encoder
(如 MLP
)(《Prefix-tuning:Optimizing continuous prompts for generation》
、《Gpt understands, too.》
)来转换 trainable embeddings
。然而,对于自然语言理解,我们发现其有用性取决于任务和数据集。对于一些数据集(如 RTE, CoNLL04
),MLP
带来了持续的改进;对于其他数据集,MLP
导致的结果影响很小,甚至是负面的(如 BoolQ, CoNLL12
)。更多分析见附录 B
。
prompt
长度:prompt
长度在 P-Tuning v2
中起着关键作用。我们发现,不同的自然语言理解任务通常会在不同的 prompt
长度下达到最佳性能(参见附录 B
)。一般来说,简单的分类任务更喜欢较短的 prompt
(少于 20 tokens
);困难的序列标注任务更喜欢较长的 prompt
(大约 100
个)。
多任务学习:在对单个任务进行微调之前,多任务学习用共享的 continuous prompts
联合优化多个任务。多任务在 P-Tuning v2
中是可选的,但可以通过提供更好的初始化来进一步提高性能(《Ppt: Pre-trained prompt tuning for few-shot learning》
)。
Classification Head
:使用 language modeling head
作为 verbalizers
(《It’s not just size that matters: Small language models are also few-shot learners》
)一直是 prompt tuning
的核心(《Gpt understands, too》
),但我们发现它在 full-data setting
中没有必要,而且与序列标注任务不兼容。P-tuning v2
反而像 BERT
一样,在 tokens
之上应用了一个随机初始化的分类头(参考 Figure 2
)。
为了澄清 P-tuning v2
的主要贡献,我们在 Table 1
中提出了与现有 prompt tuning
方法的概念性比较。
我们在一组常用的 pre-trained
模型、以及自然语言理解任务上进行了广泛的实验,以验证 P-tuning v2
的有效性。在这项工作中,除了微调,所有的方法都是在冻结的语言模型骨架上进行的,这与 《The power of scale for parameter-efficient prompt tuning》
的设置一致,但与 《Gpt understands, too》
的 tuned setting
有所不同。task-specific
参数的比率(例如 0.1%
)是通过比较 continuous prompts
的参数和 transformers
的参数得出的。另外需要注意的是,我们的实验都是在 fully-supervised setting
下(而不是 few-shot setting
下)进行的。
自然语言理解任务:首先,我们包括来自 SuperGLUE
的数据集,以测试 P-tuning v2
的通用 NLU
能力。此外,我们还引入了一套序列标注任务,包括命名实体识别、抽取式问答、和语义角色标注。
pre-trained
模型:BERT-large, RoBERTa-large, DeBERTa-xlarge, GLMxlarge/xxlarge
。它们都是为自然语言理解任务设计的双向模型,涵盖了从约 300M
到 10B
的广泛规模。
多任务学习:对于多任务设置,我们结合每个任务类型的训练集(例如,结合语义角色标注任务的所有训练集)。我们对每个数据集使用单独的线性分类器,同时共享 continuous prompts
。
命名实体识别(Name entity recognition: NER
):给定一个句子,任务是预测某些类别的实体(如,地理名、人名、机构名)在句子中的 span
。
我们采用了 CoNLL03, OntoNotes 5.0, CoNLL04
数据集。所有的数据集都是以 IOB2
格式标记的。我们使用序列标注来解决NER
任务,通过分配标签来标记某些类别实体的开始以及内部。语言模型为每个 token
生成一个 representation
,我们使用一个线性分类器来预测标签。我们使用官方脚本来评估结果。
对于多任务设置,我们结合三个数据集的训练集进行预训练。我们对每个数据集使用不同的线性分类器,同时continuous prompts
。
抽取式问答(Extractive Question Answering
):任务是从给定的上下文和问题中提取答案。我们使用 SQuAD 1.1, SQuAD 2.0
。
遵循传统,我们将问题表述为序序列标注,为每个 token
分配两个标签之一: "start"
或 "end"
,最后选择最有把握的 (start, end) pair
的 span
作为被提取的答案。如果最有把握的 pair
的概率低于阈值,该模型将假定该问题是不可回答的。
对于multitask setting
,我们用于预训练的训练集结合了 SQuAD 1.1
和 2.0
的训练集。在预训练时,我们假设所有的问题,无论其来源如何,都可能是无法回答的。
语义角色标注(Semantic Role Labeling: SRL
):任务是为句子中的单词或短语分配标签,表明它们在句子中的语义作用。
我们在 CoNLL05, CoNLL12
上评估P-tuning v2
。由于一个句子可以有多个动词,我们在每个句子的末尾添加 target verb token
,从而帮助识别哪个动词用于预测。我们根据相应的语义角色 representation
,用线性分类器对每个词进行分类。
对于multitask setting
,预训练训练集是 CoNLL05
、CoNLL12
、propbank-release
(用于训练语义角色标注的常见扩展数据)的训练集的组合。多任务训练策略与NER
类似。
跨所有模型大小的结果:下表列出了 P-tuning v2
在不同模型规模上的表现。
在 SuperGLUE
中,《The power of scale for parameter-efficient prompt tuning》
和 P-tuning
在较小规模上的表现可能相当差。相反,P-tuning v2
在较小规模的所有任务中都与微调的性能相媲美。P-tuning v2
甚至在 RTE
上明显优于微调。
就较大尺度(2B
到 10B
)的 GLM
而言,《The power of scale for parameter-efficient prompt tuning》
、 P-tuning
与微调之间的差距逐渐缩小。在 10B
规模上,我们有一个与《The power of scale for parameter-efficient prompt tuning》
报告类似的观察,即 prompt tuning
变得与微调相媲美。
也就是说,P-tuning v2
在所有规模上都与微调相当,但与微调相比,只需要 0.1%
的 task-specific
参数。
跨所有任务的结果:从下表可以看出,P-tuning v2
在所有任务上都可以与微调相媲美。P-tuning
和《The power of scale for parameter-efficient prompt tuning》
的表现要差得多,特别是在 QA
上,这可能是三个任务中最具挑战性的。
我们还注意到,《The power of scale for parameter-efficient prompt tuning》
和 P-tuning
在 SQuAD 2.0
上有一些异常的结果。这可能是因为 SQuAD 2.0
包含不可回答的问题,这给 single-layer prompt tuning
带来了优化挑战。
除了 QA
之外,多任务学习一般会给 P-Tuning v2
的大多数任务带来明显的改进。
消融研究:
Verbalizer with LM head v.s. [CLS] label with linear head
:Verbalizer with LM head
一直是以前的 prompt tuning
方法的核心组成部分。然而,在 supervised setting
中,对于 P-tuning v2
,用大约几千个参数来调优一个 linear head
是可以承受的。
我们在 Table 4
中展示了我们的比较,其中我们保留了其他的超参数,只将 [CLS] label
的 linear head
改为 verbalizer with LM head
。在这里,为了简单起见,我们对 SST-2, RTE, BoolQ
使用 "true"
和 "false"
、对 CB
使用 "true", "false", "neutral"
。结果表明,verbalizer
和 [CLS]
的表现没有明显区别。
prompt depth
:《The power of scale for parameter-efficient prompt tuning》
、 P-tuning
和 P-tuning v2
的主要区别是 multi-layer continuous prompts
。为了验证它的确切影响,给定一定数量的 prompts
,我们按照升序和降序选择它们来添加 prompts
;对于其余的层,我们不作任何处理。
如 Figure 3
所示,在参数数量相同的情况下(即要添加 prompts
的 transformer layers
数量),按降序添加总是比按升序添加好。在 RTE
的情况下,只在第 17-24
层添加 prompts
可以产生与所有层添加 prompts
非常接近的性能。
Embedding v.s. MLP reparameterization
:在 prefix-tuning
和 P-tuning
中,作者发现 reparameterization
在提高训练速度、鲁棒性和性能方面很有用。然而,我们进行的实验表明,reparameterization
的效果在不同的 NLU
任务和数据集中是不一致的。
如 Figure 4
所示:
在 RTE
和 CoNLL04
中,MLP reparameterization
通常表明在几乎所有的 prompt
长度上都比 embedding
的性能好。
然而,在 BoolQ
中,MLP
和 embedding
的结果是相差无几的。
在 CoNLL12
中, embedding
的结果一直优于 MLP
。
Prompt
长度:prompt
长度是 P-tuning v2
的另一个有影响力的超参数,其最佳值因任务而异。从 Figure 4
中我们观察到:
对于简单的 NLU
任务,通常情况下,较短的 prompts
就能获得最佳性能。
对于困难的序列任务,通常情况下,长于 100
的 prompts
会有帮助。
我们还发现,reparameterization
与最佳 prompt
长度有着密切的联系。例如,在 RTE, CoNLL04, BoolQ
中,MLP
的 reparameterization
比 embedding
更早达到最佳结果。这一结论可能有助于对 P-tuning
的 optimization
属性进行一些思考。
论文:
《The Power of Scale for Parameter-Efficient Prompt Tuning》
随着 pre-trained
大型语言模型的广泛成功,出现了一系列的技术来适配这些通用模型的下游任务。ELMo
提出冻结 pre-trained
模型并学习其每层表征的 task-specific weighting
。然而,自 GPT
和 BERT
以来,主流的 adaptation
技术是 model tuning
(也叫做 "fine-tuning"
),其中所有的模型参数在 adaptation
期间被调优,正如 《Universal language model fine-tuning for text classification》
所提出的。
最近,GPT-3
表明,prompt design
(也叫做 "priming"
)在通过 text prompts
来调节 frozen GPT-3 model
的行为方面是惊人的有效。prompts
通常由一个任务描述和/或几个典型的示例组成。这种回到 "冻结" pre-trained
模型的做法很有吸引力,特别是在模型规模不断扩大的情况下。与其说每个下游任务都需要一个单独的模型副本,不如说一个通用模型可以同时为许多不同的任务服务。
不幸的是,prompt-based adaptation
有几个关键的缺点。任务描述容易出错并需要人的参与,而且 prompt
的有效性受限于模型输入中能容纳多少 conditioning text
。因此,下游的任务质量仍然远远落后于 tuned model
。例如,尽管使用了 16
倍的参数,GPT-3 175B
在 SuperGLUE
上的 few-shot
性能比 fine-tuned T5-XXL
低 17.5
分( 71.8 vs. 89.3
)。
人们最近提出了一些 automate prompt design
的努力。AutoPrompt
提出了一种在单词的离散空间中的搜索算法,该算法被下游应用的训练数据所指导。虽然这种技术优于 manual prompt design
,但相对于 model tuning
来说仍有差距。
《Prefix-tuning: Optimizing continuous prompts for generation》
提出了 "prefix tuning"
,并在生成式任务上显示了强大的结果。这种方法冻结了模型参数,并将tuning
过程中的误差反向传播到 prefix activations
,这些 prefix activations
被放置在 encoder stack
中每一层(包括输入层)之前。《WARP: Word-level Adversarial ReProgramming》
通过将可训练的参数限制在 masked language model
的输入子网和输出子网上,简化了这个配方,并在分类任务上显示了合理的结果。
在本文中,我们提出了 prompt tuning
作为适配语言模型的进一步简化。我们冻结了整个 pre-trained
模型,只允许每个下游任务有额外的 tunable tokens
被添加到 input text
之前。这种 "soft prompt"
是经过端到端训练的,可以浓缩来自完整的 labeled
数据集的信号,使我们的方法能够胜过 few-shot prompts
,并缩小与 model tuning
的质量差距(Figure 1
)。同时,由于单个 pre-trained
模型用于所有下游任务,我们保留了 frozen model
的高效 serving
的优势(Figure 2
)。
虽然我们与《Prefix-tuning: Optimizing continuous prompts for generation》
以及 《WARP: Word-level Adversarial ReProgramming》
同时开发了我们的方法,但我们是第一个表明单独的 prompt tuning
(没有中间层 prefix
或 task-specific
输出层)足以与 model tuning
竞争。通过详细实验,我们证明语言模型容量是这些方法成功的关键因素。如 Figure 1
所示,随着规模的扩大,prompt tuning
变得更具竞争力。
我们在实验中与类似的方法进行比较。明确地将 task-specific
参数与一般语言理解所需的 "通用" 参数分开,有一系列额外的好处。我们在实验中表明,通过捕获在 prompt
中的任务定义,同时保持通用参数的固定,我们能够实现对 domain shift
的更好的适应性。此外,我们表明"prompt ensembling"
,即为同一任务来学习多个prompts
,可以提高质量,并且比传统的 model ensembling
更有效率。最后,我们研究了我们学到的 soft prompts
的可解释性。
本论文的方法是
full-data training
的,而不是few-data training
。
总而言之,我们的主要贡献是:
提出了prompt tuning
,并展示了其在大型语言模型领域中与 model tuning
的竞争力。
消除了许多设计的选择,并表明质量和鲁棒性随着模型规模的扩大而提高。
显示在 domain shift
问题上,prompt tuning
优于 model tuning
。
提出 "prompt ensembling"
并显示其有效性。
Prefix-Tuning
和P-Tuning
、P-Tuning v2
都采用了重参数化技巧,这增加了训练的复杂性。
Prefix-Tuning
和P-Tuning v2
对每一层添加了continues prompts
,相比之下这里仅对输入层添加了continues prompts
。
P-Tuning
也是仅对输入层添加了continues prompts
,但是P-Tuning
允许在输入的不同位置插入continues prompts
。相比之下这里仅在输入的头部插入continues prompts
。
遵从 T5
的"text-to-text"
的方法,我们把所有的任务作为 text generation
。我们现在不是将分类任务建模为给定某个输入 tokens
的一个序列,class label
;而是将分类任务建模为 conditional generation
class label
的 tokens
序列 。 T5
建模分类任务为 transformer
来建模,
promptinng
是在生成 prompting
是通过在输入 tokens
序列 GPT-3
中,prompt tokens
representation
是模型的 embedding table
的一部分,通过被冻结的 prompt
需要选择 prompt tokens
,通过手动搜索、或非微分( non-differentiable
)的搜索方法(《How can we know what language models know?》
、《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》
)。
prompt tuning
消除了提示语 prompt
有自己的专用的、可以被更新的参数 prompt design
涉及从frozen embeddings
的 fixed vocabulary
中选择 prompt tokens
,而 prompt tuning
可以被认为是使用 special tokens
的 fixed prompt
,其中只有这些 prompt tokens
的 embedding
可以被更新。我们新的 conditional generation
现在是
具体而言,给定 tokens
组成的序列 T5
做的第一件事是嵌入 tokens
,形成一个矩阵 embedding
空间的尺寸。我们的 soft-prompts
被表示为一个参数 prompt
的长度。然后,我们的 prompt
被拼接到 embedded input
,形成单个矩阵 encoder-decoder
。我们的模型被训练成最大化 promp
参数
这是
Prefix-tuning
在仅有输入被添加prefix
的特殊情况,根据prefix-tuning
的论文,这种情况的效果不佳。猜测原因是:Prefix-tuning
中的模型规模不够大;Prefix-tuning
采用了重参数化技巧的影响。
有许多可能的方法来初始化 prompt representations
。
最简单的是从头开始训练,使用随机初始化。
一个更复杂的选择是将每个prompt token
初始化为一个从模型词表中提取的 embedding
。从概念上讲,我们的 soft-prompt
以与 text preceding the input
(即,普通的 prompt
)相同的方式来调节 frozen network
的行为,因此,word-like representation
可能会成为一个好的初始化点。
对于分类任务,第三个选择是用列举 output classes
的 embeddings
来初始化 prompt
,类似于 《Exploiting cloze-questions for few-shot text classification and natural language inference》
的"verbalizers"
。由于我们希望模型在输出中产生这些 tokens
,用 valid target tokens
的 embedding
来初始化 prompt
应该使模型将其输出限制在合法的输出类别中。
论文
《PPT: Pre-trained Prompt Tuning for Few-shot Learning》
表明:在full-data training
下更小模型上表现好的初始化方法,在few-shot training
下更大模型中不一定有效。
另一个设计考虑是 prompt
长度。我们方法的参数成本是 token embedding
维度,prompt
长度。prompt
越短,必须被调优的新参数就越少,所以我们的目标是找到一个仍然表现良好的最小长度。
与 GPT-3
等自回归语言模型不同,我们试验的 T5
模型使用 encoder-decoder
架构,并对 span corruption objective
进行预训练。具体来说,T5
的任务是 "重建" 输入文本中的 masked spans
,这些 spans
被标记为独特的哨兵 tokens
。target output text
由所有 masked text
组成,用哨兵 tokens
分开,再加上 final sentinel token
。例如,从文本"Thank you for inviting me to your party last week"
中,我们可以构建一个预训练样本,输入是 "Thank you <X> me to your party <Y> week"
,target
输出是 "<X> for inviting <Y> last <Z>"
。
虽然 《Exploring the limits of transfer learning with a unified text-to-text transformer》
发现这种架构和 pre-training objective
比传统的语言建模更有效,但我们假设这种 setting
并不适合产生一个 frozen model
,其中这个 frozen model
可以随时通过 prompt tuning
来控制。具体而言,一个专门针对 span corruption
进行预训练的 T5
模型(如 T5.1.1
),从未见过真正自然的输入文本(不含哨兵 tokens
),也从未被要求预测真正自然的 targets
。事实上,由于 T5
的 span corruption preprocessing
的细节,每一个 pre-training target
都会以一个哨兵 token
开始。虽然这种输出哨兵的 "非自然" 倾向很容易通过微调来克服,但我们怀疑,由于解码器的先验无法被调整,仅通过 prompt
就很难覆盖这种倾向。
考虑到这些问题,我们在三种情况下实验了 T5
模型:
"Span Corruption"
: 我们使用现成的 pre-trained T5
作为我们的 frozen
模型,并测试它为下游任务输出预期文本的能力。
"Span Corruption + Sentinel"
: 我们使用相同的模型,但在所有的下游targets
之前放置一个哨兵 token
,以便更接近于预训练中看到的 targets
。
"LM Adaptation"
: 我们继续以少量的额外 steps
进行 T5
的自监督训练,但使用 T5
原始论文中的 "LM" objective
:给定一个自然文本前缀作为输入,模型必须产生自然文本的延续作为输出。至关重要的是,这种 adaptation
只发生一次,产生单个 frozen
模型,我们可以在任何数量的下游任务中作为 prompt tuning
来重复使用。
通过 LM Adaptation
,我们希望将 T5
"快速" 转变为一个与 GPT-3
更相似的模型,其中 GPT-3
总是输出真实的文本,并且作为一个 "few-shot learner"
对 prompts
做出良好的响应。与从头开始的预训练相比,这种后期转换的成功率并不明显,而且据我们所知,以前也没有人研究过这种情况。因此,我们对各种训练 steps
的 adaptation
进行了实验,最高可达 100K
步。
实验配置:
模型:各种尺寸的 pre-trained T5 checkpoints
(Small, Base, Large, XL, XXL
)。我们利用公共的 T5.1.1 checkpoitn
,其中包括对原始 T5.1
的改进。
默认配置为绿色的 x
线,使用经过 LM-adapted
的 T5
版本(额外训练了 100k
步),使用 class labels
进行初始化,并使用 100 tokens
的 prompt
长度。虽然这比 Prefix-tuning
使用的默认的 10-token prefix
要长,但我们的方法仍然使用较少的 task-specific
参数,因为我们只调优了输入层,而不是覆盖所有网络层的激活。
数据集:SuperGLUE
。我们的每个 prompt
都在单个的 Super-GLUE
任务上进行训练,没有多任务设置或跨任务来混合训练数据。
我们使用 T5
的标准交叉熵损失训练我们的 prompts
达 30k
步,学习率恒定为 0.3
, batch size = 32
。checkpoint
是通过验证集上的早停来选择的,其中停止的指标是数据集的默认指标,或者是用多个指标评估的数据集的平均指标。所有实验都在JAX
中运行,使用 Adafactor
优化器,权重衰减 1e-5
,0.8
, parameter scaling off
。这些模型在 Flax
中实现。更多细节见附录 A
。
实验涉及到的数据的统计信息:
训练耗时:
可训练参数的占比:
为了将我们的方法与标准 model tuning
进行比较。我们考虑两个 baseline
:
"Model Tuning"
:为了进行一对一的比较,我们对每个任务分别进行调优,就像我们的 prompt tuning setup
一样。
"Model Tuning (Multitask)"
:我们使用 T5
的 multi-task tuning setup
来实现一个更具竞争力的 baseline
。在这种情况下,单个模型在所有的任务上被联合调优,用 text prefix
表示任务名称。
在下图中,我们看到,随着规模的增加,prompt tuning
与 model tuning
的竞争变得更加激烈。在 XXL
规模( 11B
参数)下,prompt tuning
甚至与更强大的 multi-task model tuning
基线相匹配,尽管其 task-specific
参数少了 20000
倍。
为了与 prompt design
进行比较,我们将 GPT-3 few-shot
在 SuperGLUE dev split
上性能包括在内。下图显示,prompt tuning
以很大的优势击败 GPT-3 prompt design
,prompt-tuned T5-Small
与 GPT-3 XL
(参数规模超过 16
倍)相匹配, prompt-tuned T5-Large
击败了 GPT-3 175B
(参数规模超过 220
倍)。
Prompt Length
(Figure 3(a)
):对于大多数模型规模,增加 prompt
长度超过一个 token
是实现良好性能的关键。值得注意的是,XXL
模型在 single-token prompt
下仍有很好的效果,这表明模型越大,实现目标行为所需的 conditioning signal
就越少。在所有的模型中,增加到 20 tokens
以上只能产生微弱的收益。
tokens
数量增加到150
的时候,效果反而下降。这说明发生了过拟合。
Prompt Initialization
(Figure 3(b)
):
对于随机初始化,我们从 [-0.5, 0.5]
范围内均匀采样。
对于 sampled vocabulary
初始化,我们从 在 T5
的 Sentence-Piece
词表中最 "常见" 的 5000 tokens
中随机采样,其中 tokens
按照在预训练语料库中的频次来排序。
对于 class label
初始化,我们采用下游任务每个类别的字符串对应的 embedding
来初始化 prompt
中的一个 token
。当一个 class label
是 multi-token
时,我们采用 token embeddings
的均值。
对于较长的 prompt
,通常在使用 class label
初始化之后,还剩下很多 prompt tokens
尚未初始化,此时我们采用 sampled vocabulary
初始化。
我们发现基于 class label
的初始化表现最好。在较小的模型尺寸下,不同的初始化之间有很大的差距,但是一旦模型被放大到 XXL
规模,这些差异就会消失。
Pre-training Objective
(Figure 3(c)
):pre-training objective
对 prompt tuning
质量有明显的影响。
T5
默认的 "span corruption" objective
并不适合于训练 frozen
的模型从而用于后续的 conditioned by prompts
。
即使是在下游目标中添加哨兵的 "变通方法" 也没有什么好处。
LM adaptation
在所有的模型规模中都增加了效果。
我们最大的 XXL
模型是最宽容的,即使是 span corruption objective
也能给出强有力的结果。
adaption
长度(Figure 3(d)
):较长的 adaption
(最高可达 100K
步)提供了额外的收益。这表明,从 span corruption
到语言建模目标的 "过渡" 不是一个微不足道的变化,有效的过渡需要投入训练资源(原始 T5
预训练的 10%
的 steps
)。
此外,我们观察到 XXL
模型对非理想的配置也很稳健。在这种规模下, adaption
的收益是相当小的。
对于 non-optimal "span corruption" setting
,我们观察到不同大小的模型的不稳定性:Small
模型的表现优于较大的 Base, Large, XL
模型。经检查,我们发现对于许多任务,这些中型模型从未学会输出一个合法的类别标签,因此得分为 0%
。此外,这种糟糕的表现并不是由于 "span corruption" setting
的随机方差造成的,因为我们观察到每个大小的模型在 3
次运行中的方差很低。这些结果表明,使用用 "sparn corruption" objective
预训练的模型可能是不可靠的,5
个模型中只有 2
个工作良好,而LM adapated
版本在所有模型大小上都工作可靠。
我们已经发布了 T5 1.1 checkpoint
,使用 LM objective
对所有模型大小进行了 100K
步的适配。
没有关于训练样本数量的消融研究?这方面的消融研究可以参考
PPT
的实验部分。总体而言,样本数量越少,Prompt Tuning
和Fine Tuning
的差异越大。
如下图所示,在具有可学习参数的方法中,prompt tuning
的参数效率最高,对于超过 1B
参数的模型,需要不到 0.01%
的 task-specific
参数。
prefix tuning
:学习 prefix
的一个序列,该序列添加到每个 transformer layer
的前面。相比之下,prompt tuning
使用单个 prompt representation
,该 prompt representation
被添加到 embedded input
之前。
prefix tuning
还需要 prefix
的重参数化来稳定学习,这在训练过程中增加了大量的参数;而我们的配置不需要这种重新参数化。
WARP
:prompt parameters
被添加到输入层。它限制模型产生单个输出,且限制为分类任务。prompt tuning
没有这些限制。
P-tuning
:可学习的 continuous prompts
在 embedded input
中交错出现,使用基于 human design
的模式。我们的方法通过简单地将 prompt
添加到输入的开头,消除了这种复杂情况。
为了达到强大的 SuperGLUE
结果,P-tuning
必须与 model tuning
结合使用,也就是说,模型联合更新 prompt
参数和 main model parameters
,而我们的方法保持原始语言模型是冻结的。
P-tuning
的原始论文中,原始语言模型也是冻结的。
《Learning how to ask: Querying LMs with mixtures of soft prompts》
:使用 "soft words"
来学习 prompts
,以便从 pre-trained
语言模型中提取知识。 prompt
与 input
的位置关系是基于手工设计的 prommtp prototypes
,每一层都包含一个学到的
《Few-shot sequence learning with transformers》
:使用一个可学习的 prepended token
来使 transformer
模型适应各种任务,但重点是小的合成数据集,旨在适应 compositional task representation
,而不是较大的真实世界数据集。
更广泛地说,关于 task prompts
的工作与关于 "adapters"
的工作密切相关,即在 frozen pre-trained network layers
之间插入小型 bottleneck layers
。adapters
提供了另一种减少task-specific
参数的手段。
《Parameter-efficient transfer learning for NLP》
在冻结 BERT-Large
并只增加 2-4%
的额外参数时,实现了接近 full model tuning
的 GLUE
性能。
《MAD-X: An Adapter-Based Framework for Multi-Task Cross-Lingual Transfer》
在多语言背景下使用多个 adapters
,明确地将语言理解与任务规范分开,与我们的方法类似。
adapters
和 prompt tuning
之间的一个核心区别是:这些方法如何改变模型行为。
adapters
通过允许重写任何给定层的 activations
来修改实际函数,该函数作用于 input representation
并由神经网络参数化。
prompt tuning
通过保持函数的固定、以及增加新的 input representation
来修改行为,这些 new input representation
会影响后续输入的处理方式。
通过冻结 core language model parameters
,prompt tuning
防止模型修改模型对语言的通用理解。相反,prompt representations
间接地调节了输入的 representation
。这减少了模型通过记忆特定的词汇线索、以及记忆虚假的相关关系来过拟合数据集的能力。这一限制表明,prompt tuning
可能会提高对 domain shift
的鲁棒性,即输入的分布在训练和评估之间有所不同。
我们在两个任务上研究 zero-shot domain transfer
:问答、paraphrase detection
。
问答任务:MRQA
数据集作为 in-domain
数据集,然后我们在下表中的数据集(作为 out-of-domain
)上评估。prompt tuning
大多数 out-of-domain
数据集上优于 model tuning
。在 domain shifts
较大的情况下(如 BioASQ
中的生物医学或 TextbookQA
中的数据集),prompt tuning
的收益更大。
paraphrase detection
:第一个任务是 QQP
,它询问社区问答网站 Quora
的两个问题是否是 "重复的"。第二个任务是 MRPC
,它询问的是来自新闻文章的两个句子是否是转述。和前面一样,我们在 "in-domain"
任务上进行训练,用 in-domain
验证集选择 checkpoint
,并在"out-of-domain"
任务上进行 out-of-domain
评估。
结果表明:在 QQP
数据上训练一个轻量级的 prompt
并在 MRPC
上进行评估,比调优整个模型的性能好得多。在另一个方向上,结果要接近得多,prompt tuning
显示了准确率的小幅提高和 F1
的小幅下降。
这些结果支持这样的观点:model tuning
可能是过度参数化的,更容易过拟合训练任务,对不同领域的类似任务不利。
在相同数据上从不同的初始化而训练出来的一组神经模型,对这组模型的 ensembles
被广泛观察到:改善了任务表现,并且对于估计模型的不确定性很有用。然而,随着模型规模的增加,ensembling
可能变得不切实际。除了存储 T5-XXL
的每个副本需要 42GiB
),运行
prompt tuning
提供了一种更有效的方式来ensemble
pre-trained
语言模型的多个 adaptations
。通过在同一任务上训练 prompts
,我们为一个任务创建了 core language modeling parameters
。除了大幅降低存储成本外,prompt ensemble
还使推断更有效率。为了处理一个样本,与其计算 batch size = N
的单次前向传播,在整个 batch
中复制该样本并改变 prompt
。这些节约反映了 Figure 2
中多任务处理的情况。
为了证明 prompt ensembling
的可行性,我们为每个 SuperGLUE
任务训练了五个 prompts
,使用一个 frozen T5-XXL
模型和我们默认的超参数。我们使用简单的多数投票来计算 ensemble
的预测结果。Table 3
显示,在所有的任务中,ensemble
都比单个 prompt
的均值要好,也比最好的单个 prompt
要好或与之匹配。
一个理想的可解释的 prompt
由自然语言组成,它清楚地描述了手头的任务,明确地要求模型做出一些结果或行动,并使人容易理解为什么 prompt
会从模型中引导这样的行为。
由于 prompt tuning
是在连续的 embedding space
而不是离散的 token space
中工作,解释 prompt
变得更加困难。为了测试我们学到的 soft prompts
的可解释性,我们从冻结的模型词表中计算出每个 prompt token
的最近邻(余弦相似度作为距离指标)。
我们观察到,对于一个给定的 learned prompt token
,top-5
最近邻居成了紧密的语义簇。例如,我们看到词汇上相似的簇,如 { Technology / technology / Technologies/ technological / technologies }
,以及更多样化但仍然强烈相关的簇,如 { entirely / completely / totally / altogether/ 100% }
。这些簇的性质表明,这些 prompts
实际上是在学习 "word-like" representation
。我们发现,从 embedding space
中抽取的随机向量并不显示这种语义聚类。
当使用 "class label"
策略初始化 prompts
时,我们经常发现 class labels
在训练中一直存在。具体来说,如果一个 prompt token
被初始化为一个给定的 label
,在调优之后,那么这个 label
往往是在 learned token
的近邻中。
当用 "Random Uniform"
或 "Sampled Vocab"
方法初始化时,class label
也可以在 prompts
的最近邻中找到;但是它们往往作为多个 prompt tokens
的邻居出现。
这表明,模型正在学习将预期的输出类别存储在 prompts
中作为参考,而将 prompt
初始化为输出类别使之更容易、更集中化。
这是否意味着:在
discrete prompts
的设计过程中,我们可以将候选答案也加入到prompts
中?比如:Options: postive, negative. Question: [X]. The sentiment is :
。
当检查较长的 prompts
(如长度为 100
)时,我们经常发现有几个 prompt
具有相同的近邻。这表明,要么prompt
中存在过剩的容量,要么prompt representation
中缺乏序列结构使得模型难以将信息定位到特定的位置。
正如
P-Tuning
所述:从直觉上讲,他们认为prompt embeddings
的值应该是相互依赖的,而不是相互独立的。如何很好地建模这种依赖性?这是一个挑战。
虽然作为序列的 learned prompts
显示出很少的可解释性,但我们确实观察到像 science, technology, engineering
这样的单词作为在 BoolQ
数据集上训练的 prompt
的最近邻的频率很高,大约 20%
的问题属于 "自然/科学" 类别。虽然还需要更多的调查,但这表明 prompt
的一个作用可能是引导模型解释特定领域或背景下的输入(例如 "科学")。
论文:
《Learning How to Ask: Querying LMs with Mixtures of Soft Prompts》
pretrained
语言模型(如 ELMo
、BERT
、和 BART
)已被证明在其他自然语言处理任务中提供有用的 representations
。最近, 《Language models as knowledge bases?》
和 《How can we know what language models know?》
证明语言模型还包含可以通过 prompt
引发的事实知识和常识知识。例如,要查询莫扎特的出生日期,我们可以使用 prompt
“ ___ was born in ___
”,其中我们将第一个空填入了 “莫扎特”,并要求一个完形填空语言模型(cloze language model
)填写第二个空。《Language models as knowledge bases?》
使用手动创建的 prompts
,而 《How can we know what language models know?》
使用基于挖掘(mining
)和释义(paraphrasing
)的方法来自动地扩充 prompt
集合。
了解幼儿知道什么知识是困难的,因为他们对问题的形式非常敏感(《Children’s Minds》
)。民意调查也对问题设计敏感(《The assumptions and theory of public opinion polling》
)。我们观察到,当我们查询一个语言模型而不是一个人时,我们有机会使用梯度下降来调优 prompts
,从而更好地引发所需类型的知识。
神经语言模型将 prompt
视为连续的单词向量的序列。我们在这个连续空间中进行调优,放宽了向量必须是实际英语单词的 embedding
的约束。允许使用 "soft prompts"
(由 "soft words"
组成)不仅方便优化,而且更加表达力强。soft prompts
可以强调特定单词(通过增加它们的向量长度)或这些单词的特定维度。它们还可以调整那些具有误导性、模糊性的或过于具体的单词。考虑以下用于 relation date-of-death
的 prompt
:
___x performed untile his death in __y
这个 prompt
可能适用于男歌手 Cab Calloway
,但如果我们希望它也适用于女画家 Mary Cassatt
,可能有助于软化 "performed"
和 "his"
,以避免强调错误的职业和性别,并且可以将 "until"
软化为一个较弱的介词(因为事实上 Cassatt
在她最后的几年里失明无法继续绘画)。
另一种将这些情况联系起来的方法是:一个 prompt
使用 "performed"
,另一个 prompt
使用 "painted"
。一般来说,可能有许多不同的词汇模式可以表明特定的 relation
,使用更多的模式将获得更好的覆盖率。因此,我们提出了学习 mixture of soft prompts
的方法。
我们在几个完形填空语言模型上测试了这个想法,训练了用于补全三个数据集中的事实关系和常识关系的 prompts
。通过对 held-out
样本进行比较,我们的方法显著优于先前的工作,即使是随机初始化的情况下也是如此。因此,当将其视为近似知识库时,语言模型知道的东西比我们意识到的要多。我们只是需要找到正确的提问方式。
相关工作:
大多数先前的工作都是手动创建 prompts
来从 trained
语言模型中提取答案。
LM Prompt And Query Archive: LPAQA
方法通过挖掘语料库、或 paraphrasing
现有 prompts
来搜索新的 prompts
。
AutoPrompt
通过使用梯度信号搜索 improved prompts
,然而其 prompts
仅限于实际(hard
)的英语单词的序列,与我们的方法不同。
我们将我们的新型 soft prompts
与所有这些系统进行比较。
在我们于 2020
年 11
月提交本文之后,arXiv
上出现了两篇尚未发表的论文,它们也研究了 soft prompts
。
《Prefix-tuning: Optimizing continuous prompts for generation》
考虑了从 pretrained
语言模型( GPT-2
或 BART
)以 prompt
为条件来生成文本。为了改进结果,他们在 prompt
之前添加了一些 task-specific "soft tokens"
,并仅仅微调了这些 tokens
的 embedding
(在所有 embedding layers
上)。
《GPT understands, too.》
采用了与我们类似的策略,通过在连续空间中调优 fill-in-the-blank prompts
来对 GPT-2
和BERT
模型进行测试,然而他们没有使用我们提出的增强方法。
与我们的工作类似,这两篇论文都取得了很大的进展。
在其他工作中:
《Inducing relational knowledge from BERT》
从语料库中挖掘 prompts
,然后对整个语言模型进行微调,以使其更准确地补全 prompts
。
PET
、PET-2
的方法类似,但是对于每个 prompts
,他们以不同的方式微调语言模型。
我们的方法通过调优 prompts
本身来补充这些方法。
询问语言模型对特定句子的了解程度的 probing system
通常使用前馈网络而不是进一步的自然语言 prompts
。然而, AutoPrompt
展示了如何使用自然语言 prompts
来询问特定句子。我们的方法可能适用于这些 prompts
,或者适用于包含 input-output examples
的 few-shot learning
(GPT-3
)。
给定一个固定的 pretrained
语言模型、一个 特定的关系 date-of-death
)、一个由关系 pairs
组成的训练数据集 held-out
pairs
上评估该系统。
prompt
query
,我们用
假设 word embedding
的维度为 soft prompt
,即 tokens
可以为任意的 embedding
。然而,我们可以连续地调优这些向量。
Deeply Perturbed Prompts
:对于 prompt
中的每个 token
representation
prompt
。我们通过添加一个小的扰动向量 prompt
,其中
仅仅调优 layer 0
等价于直接调优 early stopping
或其他形式的正则化技术从而保持很小。我们的直觉是:小的扰动将产生与 LM
所训练得到的 activation patterns
更加相似的 activation patterns
。
和
Prefix-tuning
的唯一区别在于:这里施加正则化技术使得每次的更新很小。 事实上,这可以在
Prefix-tuning
中采用较小的学习率、以及梯度范数截断来实现。
Mixture Modeling
:给定关系 soft prompts
ensemble predictive distribution
:
其中:
soft promtps
这就是
《How Can We Know What Language Models Know?》
中采用的Prompt Ensembling
策略。
Data-Dependent Mixture Modeling
:作为扩展,我们可以将 neural softmax model
来优化
其中
需要两次推断:一次预测
、另一次预测 。
Training Objective
:给定 soft promtps
mixture weights