赞
踩
原文:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
作者: Xiao Liu1,2 , Kaixuan Ji1
代码: https://github.com/THUDM/P-tuning-v2
一、简介
二、准备工作
---- 2.1 NLU的任务
---- 2.2 提示优化
三、P-Tuning v2
---- 3.1 缺少普遍性
---- 3.2 深度提示优化
---- 3.3 优化和实施
四、实验
---- 4.1 设置
---- 4.2 P-tuning v2: 不同规模
---- 4.3 P-tuning v2: 跨越任务
---- 4.4 消融研究
五、相关工作
六、总结
提示微调,只用一个冻结的语言模型来微调连续的提示,大大减少了训练时每个任务的存储和内存使用。然而,在NLU的背景下,先前的工作显示,提示微调对于正常大小的预训练模型来说表现并不理想。我们还发现,现有的提示微调方法不能处理困难的序列标注任务,表明缺乏普遍性。我们提出了一个新的经验发现,适当优化的提示微调可以在广泛的模型规模和NLU任务中普遍有效。它与微调的性能相匹配,而只有0.1%-3%的微调参数。我们的方法P-Tuning v2并不是一个新的方法,而是前缀微调(Li and Liang, 2021)的一个版本,为NLU优化和微调。给定P-Tuning v2的普遍性和简单性,我们认为它可以作为微调的替代方法,也是未来研究的一个强有力的基线。
预训练语言模型(Han等人,2021a)提高了一系列自然语言理解(NLU)任务的性能,如问答(Rajpurkar等人,2016年)和文本蕴含(Dagan等人,2005年)。一种广泛使用的方法,即微调,为目标任务更新整个模型参数集。虽然微调获得了良好的性能,但它在训练过程中很耗费内存,因为必须存储所有参数的梯度和优化器状态。此外,微调需要在推理过程中为每个任务保留一份模型参数,这很不方便,因为预训练的模型通常很大。
图1:SuperGLUE dev的RTE、BoolQ和CB上的平均得分。在0.1%的特定任务参数下,P-tuning v2可以在不同规模的预训练模型中与微调相媲美,而Lester等人(2021)&P-tuning只能在10B规模下做到这一点。
另一方面,提示法冻结了预训练模型的所有参数,并使用自然语言提示来查询语言模型(Brown等人,2020)。例如,对于情感分析,我们可以将样本与提示 "这部电影是[MASK]"串联起来,要求预训练语言模型预测被masked的标注。然后,我们可以使用 "好 "和 "坏 "是被masked标注的预测概率来预测样本的标签。提示法完全不需要训练,只需存储一份模型参数。然而,与微调相比,提示在许多情况下会导致次优的性能(Liu等人,2021b;Lester等人,2021)。
提示优化是一种只优化连续提示的想法。具体来说,Liu等人(2021b);Lester等人(2021)提出在输入词嵌入的原始序列中加入可训练的连续嵌入。这些连续嵌入(也称为连续提示)类似于提示中离散的手动设计的提示。在训练期间,只有连续提示被更新。虽然提示优化在许多任务上比提示法有改进(Liu等人,2021b;Lester等人,2021),但当模型规模较小,特别是小于100亿个参数时,它仍然不如微调法(Lester等人,2021)。此外,正如我们的实验所显示的那样,在几个难的序列任务上,如抽取式问答和序列标注,提示优化的表现比精细优化差(参见第4.3节)。
我们在本文中的主要贡献是一个新的经验性发现,即适当优化的提示优化可以在不同的模型规模和NLU任务中普遍地与微调相媲美。与之前工作中的观察相反,我们的发现揭示了提示优化在NLU中的普遍性和巨大潜力。
从技术上讲,我们的方法P-tuning v2可以被看作是前缀优化的优化版本(Li and Liang, 2021),这是一种为生成而设计的方法,适用于NLU。最显著的改进源于使用深度提示优化,即对预训练模型的每一层应用连续提示(Li and Liang, 2021; Qin and Eisner, 2021)。深度提示优化增加了连续提示的能力,并缩小了在各种设置中微调的差距,特别是对于小模型和困难任务。此外,我们提出了一些优化和实施的细节,以进一步提高结果。
实验结果表明,P-tuning v2在不同的模型规模(从300M到100B的参数)和各种困难的NLU任务(如问答和序列标注)上的表现与微调相匹配。与微调相比,P-tuning v2每个任务的可训练参数为0.1%到3%,这大大降低了训练时间的内存消耗和每个任务的存储成本。
在这项工作中,我们将NLU的挑战分为两个系列:简单任务和困难的序列任务。
- 简单的NLU任务涉及对单一标签的分类。GLUE(Wang等人,2018)和SuperGLUE(Wang等人,2019)的大多数数据集,包括文本分类(如SST-2)、自然语言推理(NLI,如MNLI-m、RTE)、多选题回答(如BoolQ)等,都属于这一类别。
- 困难序列NLU任务涉及对一连串标签的分类。它们大多是与信息提取有关的问题,如开放式信息提取、命名实体识别、提取式问答和语义角色标签。
Prompt tuning(Lester等人,2021),或Ptuning(Liu等人,2021b),引入了可训练的连续提示,作为主干模型的参数被冻结时对NLU的自然语言提示的替代。例如,V指的是语言模型M的单词表,e作为模型M的嵌入函数。
要把一篇电影评论x="了不起的电影!"分类为正面或负面,自然会想到在评论中附加一个提示 "它是[MASK]",并生成mask token被预测为 "好 "或 "坏 "的条件概率作为分类。在这种情况下,提示token{"它"、"是"、"[MASK]"}都属于模型的单词表V,而输入嵌入序列将为
然而,由于模型M本质上是连续的,从优化的角度来看,用离散的自然提示语永远不可能达到最优。相反,P-tuning建议用可训练的连续嵌入[h0,...,hi]代替提示token,并将输入序列变成
因此,可以进行不同的优化(参考图2(a))。在骨干预训练模型的参数被冻结的严格约束下,在简单的NLU任务(Lester等人,2021;Kim等人,2021)和知识探测(Liu等人,2021b)中,提示优化已被证明具有与100亿参数模型的微调相当的性能。
图2
图2:从Lester等人(2021)&P-tuning到P-tuning v2。 橙色token(包括h0,hi)是指我们添加的提示嵌入;蓝色token是由冻结的预训练语言模型存储或计算的嵌入。与Lester等人(2021)相比,P-tuning v2将可训练的连续提示独立添加到每个transformer层的输入中(正如前缀优化(Li and Liang, 2021)所做的那样)。此外,P-tuning v2删除了带有LM头的verbalizers,并返回到带有普通线性头的传统类别标签,以允许其任务的普遍性。
在许多NLP应用中,提示优化和P-tuning已经被证明是相当有效的(参见第5节)。然而,考虑到缺乏普遍性,P-tuning还不是微调的全面替代方法。
缺少跨尺度的普遍性。Lester等人(2021)表明,当模型规模超过100亿个参数时,提示优化可以与微调相媲美。但是对于那些较小的模型(从100M到1B),提示优化和微调的表现有很大差异,这大大限制了提示优化的适用性。
缺少跨任务的通用性。尽管Lester等人(2021年)和P-tuning在GLUE和SuperGLUE等NLU基准上显示出优越性,但它们在另一大类硬序列NLU任务(即序列标注)上的有效性却没有得到验证。首先,序列标注需要预测一连串的标签,而不是单一的标签。其次,序列标注通常预测的是无实际意义的标签,这对于将其转化为有效的verbalizers来说可能是个挑战(Schick和Schütze,2020)。在我们的实验中(参见第4.3节和表3),我们表明Lester等人(2021)&P-tuning在典型的序列标注任务中的表现比微调差。
表3: 问答的结果(提取式QA)。Prompt tuning & P-tuning在问答上的表现极差,而P-tuning v2的表现基本合理,可以比DeBERTa-xlarge的微调更好。(FT:微调;PT:P-tuning & Lester等人(2021);PT-2:P-tuning v2;MPT-2:多任务P-tuning v2)
考虑到这些挑战,我们提出了Ptuning v2,它将前缀微调作为一个跨规模和NLU任务的通用解决方案。
前缀微调(Li and Liang, 2021)最初是为自然语言生成(NLG)任务提出的,但我们发现它对NLU也非常有效。我们描述了一个适合NLU的前缀微调版本。
在(Lester等人,2021)和P-tuning中,连续提示只被插入transformer第一层的输入嵌入序列中(参照图2(a))。在接下来的transformer层中,插入连续提示的位置的嵌入是由之前的transformer层计算出来的,这可能导致两个可能的优化挑战。
1. 可调控的参数量有限。大多数语言模型目前只能支持512的最大序列长度(由于注意力的二次计算复杂性的成本)。如果我们另外扣除我们的上下文的长度(例如,要分类的句子),那么我们用连续的提示语来填充的长度是有限的。
2. 用很深的transformer进行微调时,稳定性有限。随着transformer的不断深入,由于许多中间层的计算(具有非线性激活函数),来自第一个transformer层的提示的影响可能是意想不到的,这使得我们的优化不是一个非常平稳的。
鉴于这些挑战,P-tuning v2利用多层提示(即深度提示优化),如同前缀优化(Li and Liang, 2021)(参考图2(b)),作为对P-tuning和Lester等人(2021)的重大改进。不同层中的提示作为前缀token加入到输入序列中,并独立于其他层间(而不是由之前的transformer层计算)。一方面,通过这种方式,P-tuning v2有更多的可优化的特定任务参数(从0.01%到0.1%-3%),以允许更多的每个任务容量,而它仍然比完整的预训练语言模型小得多;另一方面,添加到更深层的提示(例如图2中的LayerN Prompts)可以对输出预测产生更直接和重大的影响,而中间的transformer层则更少(参见第4.4节)。
还有一些有用的优化和实施细节。
优化。重新参数化。以前的方法利用重新参数化功能来提高训练速度、鲁棒性和性能(例如,MLP的前缀微调和LSTM的P-tuning)。然而,对于NLU任务,我们发现这种技术的好处取决于任务和数据集。对于一些数据集(如RTE和CoNLL04),MLP的重新参数化带来了比嵌入更稳定的改善;对于其他的数据集,重新参数化可能没有显示出任何效果(如BoolQ),有时甚至更糟(如CoNLL12)。见第4.4节中我们的消融研究。
优化。提示长度。提示长度在提示优化方法的超参数搜索中起着核心作用。在我们的实验中,我们发现不同的理解任务通常用不同的提示长度来实现其最佳性能,这与prefix-tuning(Li和Liang,2021)中的发现一致,不同的文本生成任务可能有不同的最佳提示长度。见第4.4节中的讨论。
优化。多任务学习。多任务学习对我们的方法来说是可选的,但可能是相当有帮助的。一方面,连续提示的随机惯性给优化带来了困难,这可以通过更多的训练数据或与任务相关的无监督预训练来缓解(Gu等人,2021);另一方面,连续提示是跨任务和数据集的特定任务知识的完美载体。我们的实验表明,在一些困难的序列任务中,多任务学习可以作为P-tuning v2的有益补充,表示为MPT-2(参考表2,3,4)。
表2: 命名实体识别(NER)测试集的结果(所有指标都是micro-f1得分)。P-tuning v2总体上与微调相当,而多任务P-tuning v2可以带来进一步的改进。(FT:微调;PT:P-tuning & Lester等人(2021);PT-2:P-tuning v2;MPT-2:多任务P-tuning v2)
实施。[CLS]和标注分类,而不是verbalizer。Verbalizer(Schick和Schütze,2020)一直是提示优化的核心组成部分,它将one-hot类标签变成有意义的词,以利用预训练语言模型头。尽管它在few-shot设置中具有潜在的必要性,但在全数据监督设置中,verbalizers并不是必须的。它阻碍了提示优化在我们需要无实际意义的标签和句子嵌入的场景中的应用。因此,P-tuning v2回到了传统的[CLS]标签分类(参照图2)范式,采用随机初始化的线性头。见第4.4节中的比较。
我们对不同的常用预训练模型和NLU任务进行了广泛的实验,以验证P-tuning v2的有效性。
评估设置。在这项工作中, “prompt tuning”, “P-tuning”, “P-tuning v2”, 和 "多任务 P-tuning v2"的所有结果都是通过冻结transformer的参数,只优化连续提示而得到的。特定任务参数的比率(如0.1%)是通过比较连续提示的参数和transformer的参数得出的。只有 "微调 "的结果是通过调整transformer的参数得到的(不使用连续提示)。
另一个需要注意的是,我们的实验都是在全数据监督学习的环境下进行的,而不是在few-shot学习的环境下进行的,这一点很重要,因为我们利用的一些特性(例如,使用具有线性头的类标签而不是具有LM头的言语者)只可能在监督的环境下发挥作用。
NLU任务。首先,我们包括GLUE(Wang等人,2018)和SuperGLUE(Wang等人,2019)基准的部分数据集来测试P-tuning v2的通用NLU能力,包括SST-2、MNLI-m、RTE、BoolQ和CB。更重要的是,我们以序列标注的形式引入了一套任务,要求语言模型预测输入序列中每个标注的类别,包括命名实体识别(CoNLL03(Sang和De Meulder,2003),OntoNotes 5.0(Weischedel等人。2013)和CoNLL04(Carreras和Màrquez,2004)),抽取式问答(SQuAD 1.1和SQuAD 2.0(Rajpurkar等人,2016))和语义角色标签(CoNLL05(Carreras和Màrquez,2005)和CoNLL12(Pradhan等人,2012))。
预训练的模型。我们包括BERT-large(Devlin等人,2018)、RoBERTa-large(Liu等人,2019)、DeBERTa-xlarge(He等人,2020)、GLMxlarge/xxlarge(Du等人,2021)进行评估。它们都是为NLU目的设计的双向模型,涵盖了从约300M到10B的广泛规模。
比较方法。我们将我们的P-tuning v2(PT-2)与vanilla fine-tuning(FT)、P-tuning & Lester等人(2021)(PT)进行比较。此外,对于有关序列标注的困难任务,我们提出了多任务P-tuning v2(MPT-2)的结果,更多细节见第4.3节。
表1展示了P-tuning v2在不同模型规模下的表现。对于简单的NLU任务,如SST-2(单句分类),Lester等人(2021)和P-tuning在较小的规模下没有显示出明显的劣势。但是当涉及到复杂的挑战时,如自然语言推理(RTE)和多选题回答(BoolQ),它们的性能会非常差。相反,P-tuning v2在较小规模的所有任务中都与微调的性能相匹配。令我们惊讶的是,P-tuning v2在RTE中的表现明显优于微调,特别是在BERT中。
表1: 部分GLUE和SuperGLUE开发集的结果(所有指标都是准确度)。在小于10B的模型上,P-tuning v2明显超过了P-tuning & Lester等人(2021),并与微调的性能相符。(FT:微调;PT:P-tuning & Lester等人(2021);PT-2:P-tuning v2)
就较大规模(2B到10B)的GLM(Du等人,2021)而言,P-tuning&Lester等人(2021)和微调之间的差距逐渐缩小了。在10B规模上,我们有一个类似于(Lester等人,2021)报告的观察结果,即提示优化变得与微调竞争。然而,P-tuning v2在所有尺度上都与微调相当,但与微调相比,只需要0.1%的特定任务参数。
此外,我们观察到,在一些数据集中,RoBERTa-large的性能比BERT-large差。部分原因是,我们根据经验发现提示优化对超参数相当敏感,有时优化就会被困住。P-tuning v2在优化过程中可以更加稳定和稳健。关于超参数的更多细节,请参考我们的代码库。
在第4.2节中,我们讨论了P-tuning v2的一贯性,无论何种规模都可以与微调相媲美。然而,GLUE和SuperGLUE的大多数任务都是相对简单的NLU问题。另一个重要的硬NLU挑战系列在于序列标注,它与一些更高级的NLP应用有关,包括开放信息提取、阅读理解等等。
为了评估P-tuning v2在这些困难的NLU挑战中的能力,我们选择了三个典型的序列标注任务。名称实体识别、抽取式问答(QA)和语义角色标签(SRL),共八个数据集。
表4: 关于语义角色标签(SRL)的结果。P-tuning v2比Lester等人(2021)和P-tuning在SRL上显示出一致的改进。(FT:微调;PT:P-调和Lester等人(2021);PT-2:P-调 v2;MPT-2:多任务P-调 v2)
名称实体识别(NER)。NER的目的是预测所有代表一些给定的实体类别的词的跨度与句子。我们采用了CoNLL03(Sang和De Meulder,2003)、OntoNotes 5.0(Weischedel等人,2013)和CoNLL04(Carreras和Màrquez,2004)。对于CoNLL03和CoNLL04,我们在标准的训练-开发-测试分割上训练我们的模型。对于OntoNotes 5.0,我们使用了与(Xu et al., 2021b)相同的训练、开发、测试划分。所有的数据集都是以IOB2格式标注的。我们使用序列标注来解决NER的任务,通过分配标签来标注实体的开始和内部的一些类别。语言模型为每个token生成一个表示,我们使用一个线性分类器来预测标签。我们使用官方脚本来评估结果。对于多任务设置,我们结合三个数据集的训练集进行预训练。我们对每个数据集使用不同的线性分类器,同时共享连续的提示信息。
(提取式)问答(QA)。提取式QA是为了从给定的上下文和问题中提取答案。我们使用SQuAD(Rajpurkar等人,2016)1.1和2.0,其中每个答案都在上下文的连续跨度内。遵循传统,我们将问题表述为序列标注,为其指定两个标签之一。开始 "或 "结束 "这两个标签中的一个给每个标注,最后选择最有把握的开始和结束对的跨度作为提取的答案。如果最有把握的一对的概率低于阈值,该模型将假定该问题是不可回答的。对于多任务设置,我们用于预训练的训练集结合了SQuAD 1.1和2.0的训练集。在预训练时,我们假设所有的问题,无论其来源如何,都可能是无法回答的。
语义角色标签(SRL)。SRL为句子中的单词或短语分配标签,表明它们在句子中的语义作用。我们在CoNLL05(Carreras和Màrquez,2005)和CoNLL12(Pradhan等人,2012)上评估P-tuning v2。由于一个句子可以有多个动词,我们在每个句子的末尾添加目标动词token,以帮助识别哪个动词用于预测。我们根据相应的语义角色表示,使用线性分类器对每个词进行分类。对于多任务设置,预训练训练集是CoNLL05(Carreras和Màrquez,2005)、CoNLL12(Pradhan等人,2012)和propbank-release(用于训练SRL的常见扩展数据)的训练集的组合。多任务训练策略与NER类似。
结果。从表2、3、4中,我们观察到Ptuning v2在所有任务上都能与fineetuning相媲美。P-tuning和Lester等人(2021)的表现要差得多,特别是在QA上,这可能是三个任务中最难的挑战。我们还注意到,SQuAD 2.0中出现了一些不正常的结果(BERT/RoBERTa/DeBERTa使用Lester等人(2021)和P-tuning显示了相同的性能)。这可能是因为与SQuAD 1.1相比,SQuAD 2.0包含无法回答的问题,而Lester等人(2021)和P-tuning可能会得到平凡解。
多任务P-tuning v2通常会带来整体任务的明显改善,但QA除外(这可能还是混合了所有可回答的SQuAD 1.1和不可回答的SQuAD 2.0的结果),这意味着随机初始化提示的潜力没有得到充分开发。
我们研究了一些重要的超参数和架构设计,它们可能在P-tuning v2中发挥核心作用。
提示深度。Lester等人(2021)&P-tuning和P-tuning v2的主要区别在于我们引入的多层连续提示。直观地说,由于中间transformer层的许多非线性激活函数,一个提示所处的transformer层越深,它对输出预测的影响就越直接。为了验证其确切的影响,给定一定数量的k来添加提示,我们按照升序和降序选择k层来添加提示作为前缀token;对于其余的层,我们改变它们的注意力mask,不允许其前缀提示参与计算。
如图4所示,在参数量相同的情况下(即添加提示语的transformer层数),按降序添加总是比按升序添加好。在RTE的情况下,只在第17-24层添加提示语可以产生与所有层非常接近的性能,进一步削减了我们可能需要调整的匹配微调的参数。
图4:使用BERTlarge对提示深度进行消融研究。"[x-y]"指的是我们添加连续提示的层间隔(例如,"21-24 "意味着我们将提示添加到21至24的transformer层)。同样数量的连续提示添加到较深的transformer层(即更接近输出层)可以产生比添加到开始层更好的性能。
嵌入与MLP再参数化。在前缀微调(Li and Liang, 2021)和Ptuning(Liu et al., 2021b)中,作者发现重新参数化对于提高训练速度、鲁棒性和性能都很有用。然而,我们进行的实验表明,重新参数化的效果在不同的NLU任务和数据集中是不一致的。
如图3所示,在RTE和CoNLL04中,MLP的重新参数化通常表明在几乎所有的提示长度上都比嵌入的性能好。然而,在BoolQ中,MLP和嵌入的结果具有竞争性;在CoNLL12中,嵌入的结果一直优于MLP。
图3: 使用RoBERTa-large对提示长度和reparamerization进行消融研究。给定某些NLU任务和数据集,结论可能非常不同。(MQA: 多选题QA)
提示长度。提示长度是P-tuning v2的另一个有影响力的超参数,其最佳值因任务而异。从图3中我们观察到,对于简单的NLU任务,通常情况下,较短的提示语就能获得最佳性能;对于困难的序列任务,通常情况下,比100长的提示语会有帮助。
我们还发现,重新参数化与最佳提示长度有着密切的联系。例如,在RTE、CoNLL04和BoolQ中,MLP的重参数化比嵌入更早达到其最佳结果。这一结论可能有助于对P-tuning的优化特性进行一些思考。
带LM头的Verbalizer与带线性头的[CLS]标签。带LM头的Verbalizer一直是以前的提示性微调方法的核心组成部分。然而,在有监督的情况下,对于P-tuning v2来说,用大约几千个参数来调整一个线性头是可以承受的。我们在表5中展示了我们的比较,其中我们保留了其他的超参数,只将[CLS]标签的线性头改为verbalizer的LM头。在这里,为了简单起见,我们对SST-2、RTE和BoolQ使用 "真 "和 "假";对CB使用 "真"、"假 "和 "中性"。结果表明,verbalizer和[CLS]的表现没有明显区别。
表5: 在RoBERTa-large上,带线性头的[CLS]标签和带LM头的口头语者之间的比较。
预训练语言模型。自监督(Liu等人,2020)预训练语言模型(Han等人,2021a)已经成为自然语言处理的主干。从早期的GPT(Radford等人,2019)、BERT(Devlin等人,2018)、XLNet(Yang等人,2019)、RoBERTa(Liu等人,2019)的参数量有限(小于350M),T5(Raffel等人,2019)和GPT-3(Brown等人,2020)的出现推动了拥有10亿甚至万亿参数的巨型语言模型的发展。
提示。提示(Liu等人,2021a)指的是利用输入语境中的特殊模板来帮助语言模型预测的理解和生成。最近,由于GPT-3(Brown等人,2020)的成功,出现了各种提示策略,包括离散自然语言提示(Shin等人,2020;Gao等人,2020),连续提示(Liu等人,2021b;Li和Liang,2021;Lester等人,2021;Qin和Eisner,2021;Zhong等人,2021),调整偏差(Logan IV等人,2021)以及其他许多提示策略。
提示法在广泛的NLP应用中的优势和有效性在最近的文献中得到了验证,包括文本分类(Hu等人,2021;Min等人,2021;Sun等人,2021;Li等人,2021;Zhang等人,2021b)、实体打字(Ding等人,2021)、few-shot人学习(Zheng等人,2021;Xu等人。2021a; Zhao et al., 2021; Gu et al., 2021; Zhang et al., 2021a),关系抽取(Chen et al., 2021a; Han et al., 2021b; Sainz et al., 2021),知识探测(Zhong et al, 2021),命名实体识别(Chen等人,2021b),机器翻译(Tan等人,2021;Wang等人,2021b)和对话系统(Wang等人,2021a)。
在这项工作中,我们特别关注将提示方法扩展到更小的模型和困难序列NLU任务。
我们提出了P-tuning v2,一种在不同规模和任务中都可与微调相媲美的提示方法。P-tuning v2不是一种概念上的新方法,而是一种优化和适应前缀优化和深度提示优化的NLU挑战。Ptuning v2对从330M到10B的模型显示出一致的改进,并在序列标注等困难的序列任务上以很大的幅度超过了Lester等人(2021)和P-tuning。Ptuning v2可以成为微调的综合替代方案和未来工作的强大基线。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。