P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks

Prompt tuning 只用冻结的语言模型来调整连续的prompts,大大减少了训练时每个任务的存储和内存使用。但

  • prompt tuning 对于正常大小的预训练模型来说表现并不理想。

  • 现有的 prompt tuning 方法不能处理困难的序列标记任务,缺乏普适性。

P-Tuning-v2 与微调的性能相匹配,并且只有0.1%-3%的调整参数。

Introduction

微调,为目标任务更新整个模型参数集。虽然微调能获得良好的性能,但在训练过程中却很耗费内存,因为必须存储所有参数的梯度和优化器状态。

此外,微调需要在推理过程中为每个任务保留一份模型参数,这很不方便,因为预训练的模型通常很大。

Prompting 另一方面,冻结PLMs的所有参数并使用自然语言 prompts 来查询语言模型。例如,对于情感分析,我们可以将一个样本与一个 prompts 串联起来 “这部电影是[MASK]”,并要求预训练的语言模型预测被mask的 token。然后,我们可以使用 “好 “和 “坏 “是被 MASK 的标记的预测概率来预测样本的标签。Prompting 完全不需要训练,只需存储一份模型参数。然而,与微调相比,提示 在许多情况下会导致次优的性能(Liu等人,2021b;Lester等人,2021)。

Prompt tuning 是一种只调谐连续 prompts 的想法。具体来说,Liu等人(2021b);Lester等人(2021)提出在输入词嵌入的原始序列中加入可训练的连续嵌入。这些连续嵌入(也称为连续 prompts )类似于 prompting 中离散的手动签名 prompts。在训练过程中,只有连续的 prompts 被更新。虽然 prompt tuning 在许多任务上比 prompting 有提高 (Liu等人,2021b;Lester等人,2021),但当模型规模较小,特别是小于100亿个参数时,它仍然不如 fine-tuning(Lester等人,2021)。

从技术上讲,P-tuning v2可以被看作是 prefix-tuning 的优化版本,适用于NLU。最显著的改进来自于使用深度 prompt tuning,即对预训练模型的每一层应用连续的 prompt。深度 prompt tuning 增加了连续 prompt 的能力,并缩小了在各种设置中进行微调的差距,特别是对于小模型和困难任务。此外,还提出了一些优化和实施的细节,以进一步提高结果。

Preliminaries

NLU Tasks

在这项工作中,将NLU的挑战分为两个系列:

  • Simple NLU tasks :涉及单一标签的分类。GLUE(Wang等人,2018)和Super- GLUE(Wang等人,2019)的大多数数据集,包括文本分类(如SST-2)、自然语言推理(NLI,如MNLI-m,RTE)、多选题回答(如BoolQ)等,都属于这一类。
  • Hard sequence NLU tasks :涉及对一连串标签的分类。它们大多是与信息提取有关的问题,如开放式信息提取、命名实体识别、提取式问题回答和语义角色标签。

Prompt Tuning

Prompt tuning(Lester等人,2021),或P-tuning(Liu等人,2021b),引入了可训练的连续prompts,作为骨干语言模型的参数被冻结时对NLU的自然语言 prompts 的替代。例如,让 $V$ 指的是语言模型 $M$ 的词汇表,$e$ 作为 $M$ 的嵌入函数。

要把一篇电影评论 x=”Amazing movie!” 分类为正面或负面,很自然地就会想到在评论中加入一个 prompts “It is [MASK]”,并生成MASK token被预测为 “好 “或 “坏 “的条件概率作为分类。在这种情况下,prompt tokens {“It”、”is”、”[MASK]”} 都属于模型的词汇表 $V$,而输入嵌入序列将是:

然而,由于模型 $M$ 在本质上是连续的,从优化的角度来看,人们永远不可能用离散的自然 prompts 来达到最佳效果。相反,P-tuning建议用可训练的连续 embeddings $[h_0, …, h_i]$ 代替 prompt tokens ,并将输入序列变成:

并因此可以进行不同的优化(参考图2(a))。在骨干预训练模型的参数被冻结的严格约束下,在简单的NLU任务和知识探测中,prompt tuning 已被证明具有与100亿参数模型的 fine-tuning 相当的性能。

P-Tuning v2

Lack of Universality

在许多NLP应用中,Prompt tuning 和 P-tuning 已经被证明是相当有效的。然而,考虑到缺乏普遍性, P-tuning 还不是微调的全面替代方法。

Lack of universality across scales

Lester等人(2021)表明,当模型规模超过100亿个参数时,prompt tuning 可以与微调相媲美。但是对于那些较小的模型(从100M到1B),prompt tuning和微调的表现有很大差异,这大大限制了prompt tuning的适用性。

Lack of universality across tasks.

尽管Lester等人(2021年)和 P-tuning 在GLUE和SuperGLUE等NLU基准上显示出优越性,但它们在另一大类序列NLU任务(即序列标签)上的有效性却没有得到验证。

首先,序列标签需要预测一连串的标签,而不是单一的标签。其次,序列标签通常预测的是无实际意义的标签,这对变成有效的言语者来说可能是个挑战。

Deep Prompt Tuning

Prefix-tuning(Li and Liang, 2021)最初是为自然语言生成(NLG)任务提出的,但我们发现它对NLU也非常有效。我们描述了一个适合NLU的 Prefix-tuning 版本。

在(Lester et al., 2021)和P-tuning中,连续 prompts 只被插入到输入嵌入序列中(参考图2(a)),用于 transformer’s 第一层。在接下来的 transformer 中,插入连续 prompts 的位置的嵌入是由之前的transformer 层计算出来的,这可能导致两个可能的优化挑战。

  • 可调整的参数数量有限。大多数语言模型目前只能支持512的最大序列长度(由于注意力的二次计算复杂性的成本)。如果我们另外扣除我们的上下文的长度(例如,要分类的句子),那么我们用连续提示来填充的长度是有限的。
  • 在用非常深的 transformers 进行调整时,稳定性有限。随着 transformers 的不断深入,由于许多中间层的计算(具有非线性激活函数),来自第一个transformers 层的提示的影响可能是意想不到的,这使得我们的优化不是一个非常平稳的优化。

鉴于这些挑战,P-tuning v2利用多层 prompts(即深度prompt tuning)作为 prefix-tuning(Li and Liang, 2021)中的提示(参见图2(b)),作为对P-tuning和Lester等人(2021)的重大改进。不同层的 prompt 作为前缀 tokens 添加到输入序列中,并独立于其他层(而不是由之前的 transformers 层计算)。一方面,通过这种方式,P-tuning v2 有更多的可调整的特定任务参数(从0.01%到0.1%-3%),以允许更多的每个任务容量,而它仍然比完整的预训练语言模型小得多;另一方面,添加到更深层的 prompt(例如图2中的LayerN Prompts)可以对输出预测产生更直接和显著的影响,而中间的transformers层更少。

Optimization and Implementation

Optimization:Reparameterization。以前的方法利用重新参数化功能来提高训练速度、鲁棒性和性能(例如,MLP的 prefix-tuning 和 LSTM的P调整)。然而,对于NLU任务,我们发现这种技术的好处取决于任务和数据集。对于一些数据集(如RTE和CoNLL04),MLP的重新参数化带来了比嵌入更稳定的改进;对于其他的数据集,重新参数化可能没有任何效果(如BoolQ),有时甚至更糟(如CoNLL12)。

Optimization: Prompt length Prompt length在 prompt tuning 方法的超参数搜索中起着核心作用。在我们的实验中,我们发现不同的理解任务通常以不同的 Prompt length 达到最佳性能,这与 prefix- tuning 的发现一致,不同的文本生成任务可能有不同的最佳 Prompt length。

从图3中,我们观察到,对于简单的NLU任务,通常,较短的prompts 就能获得最佳性能;对于困难的序列任务,通常,比100长的 prompts 语会有帮助。
我们还发现,重新参数化与 Prompt length 长度有着密切的联系。例如,在RTE、CoNLL04和BoolQ中,MLP的重新参数化比嵌入更早达到最佳结果。这一结论可能有助于对P-tuning的优化特性进行一些思考。

Optimization: Multi-task learning. 多任务学习对我们的方法来说是可选的,但可能是相当有帮助的。一方面,连续prompts 的随机惯性给优化带来了困难,这可以通过更多的训练数据或与任务相关的无监督预训练来缓解(Gu等人,2021);另一方面,连续 prompts 是跨任务和数据集的特定任务知识的完美载体。 我们的实验表明,在一些困难的序列任务中,多任务学习可以作为P-tuning v2的有益补充,表示为MPT-2。

Implementation: [CLS] and token classification, rather than verbalizers. Verbalizer 一直是 Prompt tuning 的核心组成部分,它将一类的labels变成有意义的词,以利用预训练语言模型head 。尽管它在少数情况下有潜在的必要性,但在全数据监督的情况下,verbalizer 不是必须的。它阻碍了 Prompt tuning 在我们需要无实际意义的标签和语义嵌入的场景中的应用。因此,P-tuning v2回到了传统的[CLS]标签分类(参照图2)范式,采用随机初始化的线性头。见第4.4节中的比较。

Experiments

在这项工作中,”prompt tuning”、”P-tuning”、”P-tuning v2 “和 “多任务P-tuning v2 “的所有结果都是通过冻结transformer的参数,只调整连续prompts。特定任务参数的比率(例如0.1%)是通过比较连续prompts 的参数和transformer的参数得出的。只有 “微调 “的结果是通过调整transformer的参数(不使用连续提示)得到的。

另外需要注意的是,我们的实验都是在全数据监督下的学习环境下进行的,而不是在少量的学习环境下进行的,这一点很重要,因为我们利用的一些特性(例如,使用具有线性head 的类标签而不是具有LM头的言语者)只可能在监督下进行。

P-tuning v2: Across Scales

表1展示了P-tuning v2在不同模型规模下的表现。对于简单的NLU任务,如SST-2(单句分类),Lester等人(2021)和P-tuning在较小的规模下没有显示出明显的劣势。但是,当涉及到复杂的挑战,如自然语言推理(RTE)和多选题回答(BoolQ)时,它们的性能会非常差。相反,P-tuning v2在所有任务中以较小的规模与微调性能相匹配。令我们惊讶的是,P-tuning v2在RTE中的表现明显优于微调,特别是在BERT中。

就较大尺度(2B到10B)的GLM(Du等人,2021)而言,P-调谐&Lester等人(2021)与精细调谐之间的差距逐渐缩小了。在10B尺度上,我们有一个类似于(Lester等人,2021)报告的观察结果,即及时调谐变得与精细调谐竞争。然而,P-tuning v2在所有尺度上都与微调相当,但与微调相比,只需要0.1%的任务特定参数。
此外,我们观察到,在一些数据集中,RoBERTa-large的性能比BERT-large差。部分原因是,我们根据经验发现及时调谐对超参数相当敏感,有时调谐会被困住。P-tuning v2在调谐过程中可以更加稳定和稳健。关于超参数的更多细节,请参考我们的代码库。

P-tuning v2: Across Tasks

在第4.2节中,我们讨论了P-tuning v2的一贯性,无论何种尺度,其性能都与微调相当。然而,GLUE和SuperGLUE的大多数任务都是相对简单的NLU问题。另一个重要的硬NLU挑战系列是序列标签,它与一些更高级的NLP应用有关,包括开放信息提取、阅读理解等。

为了评估P-tuning v2在这些硬NLU挑战上的能力,我们选择了三个典型的序列标签任务。名称实体识别、外部问题回答(QA)和语义角色标签(SRL),共八个数据集。