P-tuning v1 一文小结
这篇文章介绍了一种名为P-Tuning的新方法,用于改善预训练语言模型(PLMs)在自然语言理解(NLU)任务中的性能和稳定性。P-Tuning通过将可训练的连续提示嵌入(continuous prompt embeddings)与离散提示(discrete prompts)结合使用,通过反向传播进行更新,以优化任务目标。文章通过实验表明,P-Tuning不仅通过减少不同离散提示之间的性能差距来稳定训练,而且在包括LAMA和SuperGLUE在内的一系列NLU任务上显著提高了性能。P-Tuning对冻结和微调的语言模型都普遍有效,并且在全监督和少样本(few-shot)设置下均表现出色。
文章的主要贡献包括:
-
提出P-Tuning方法,使用连续提示嵌入来增强离散提示,以提高语言模型的稳定性和性能。
-
通过实验验证P-Tuning在知识探测(LAMA)和一般自然语言理解(SuperGLUE)基准测试中的有效性。
-
展示了P-Tuning在不同任务和设置下减少不同离散提示之间性能差异的能力,从而提高了语言模型适应性的稳定性。
-
探讨了连续提示编码器(prompt encoder)的不同实现方式,包括LSTM网络、多层感知器(MLP)等。
此外,文章还进行了一些探索性实验和分析,比如连续提示的最佳位置、数量对少样本学习性能的影响,以及P-Tuning与自动搜索离散提示方法的比较。最后,文章讨论了P-Tuning与现有工作的关系,并得出结论,P-Tuning是一个有效的方法,可以提高预训练语言模型在NLU任务上的性能和稳定性。
===
0 Abstract
使用自然语言模式对预训练语言模型进行提示已被证明对自然语言理解(NLU)是有效的。然而,我们的初步研究表明,手动离散提示常常导致不稳定的性能——例如,提示中改变一个词可能会导致显著的性能下降。我们提出了一种名为P-Tuning的新方法,它采用可训练的连续提示嵌入与离散提示相结合。从实证角度来看,P-Tuning不仅通过最小化不同离散提示之间的差距来稳定训练,而且在包括LAMA和SuperGLUE在内的广泛NLU任务上显著提高了性能。P-Tuning对冻结和微调的语言模型都普遍有效,在全监督和少样本设置下均表现出色。
什么是连续提示,什么是离散提示?
连续提示(Continuous Prompts)和离散提示(Discrete Prompts)是在使用预训练语言模型(PLMs)进行自然语言理解(NLU)任务时,用来改善模型性能的两种不同的提示方法。
离散提示(Discrete Prompts):
离散提示通常是由人类专家手动编写的一系列自然语言词汇或模板,它们作为输入的一部分,用来引导语言模型更好地完成特定的NLU任务。这些提示是静态的,即它们在模型训练或推理过程中不会改变。例如,在一个问答任务中,离散提示可能是:
- “What is the capital of [X]? The capital is [Y].”
在这个例子中,“[X]” 和 “[Y]” 是占位符,分别代表问题中询问的国家和预期的答案。
连续提示(Continuous Prompts):
与离散提示不同,连续提示是一组可训练的向量,它们与离散提示结合使用,并且在模型训练过程中会通过反向传播算法更新。连续提示提供了一种将学习性融入输入的方式,能够适应性地调整模型的行为以优化特定任务的性能。例如,在上述相同的问答任务中,连续提示可能被嵌入到离散提示中,形成如下结构:
- “What is the [continuous prompt vector] capital of [X]? The [continuous prompt vector] capital is [Y].”
在这里,“[continuous prompt vector]” 是一个可学习的向量,它在模型训练过程中会被调整,以帮助模型更好地预测首都。
举例说明:
假设我们有一个简单的NLU任务,即确定一个句子中的主题和评论对象。我们可以使用以下两种提示方法:
离散提示:“The [MASK] is a great [MASK].” 这里的两个"[MASK]"是离散的占位符,分别代表句子中的主题和评论的属性。在实际应用中,它们将被具体词汇替换,例如:“The movie is a great masterpiece.”
连续提示:如果我们在这个任务中使用P-Tuning,我们可能会在句子的某些部分添加连续提示,如:“The [continuous prompt vector] movie is a [continuous prompt vector] great [continuous prompt vector] masterpiece.” 这些连续提示向量会在训练过程中学习到最优的表示,以帮助模型更好地理解句子结构和语义。
总的来说,离散提示是固定的语言模式,而连续提示是动态的、可训练的向量,它们可以适应性地优化模型对特定任务的理解和输出。
1 Introduction
预训练语言模型(PLMs;Brown等人,2020年)显著提升了自然语言理解(NLU)的性能。PLMs接受不同的预训练目标训练,例如掩码语言建模(Masked Language Modeling;Devlin等人,2018年)、自回归语言建模(Autoregressive Language Modeling;Radford等人,2019年)、序列到序列(Seq2Seq;Raffel等人,2019年)以及排列语言建模(Permutation Language Modeling;Yang等人,2019年)。PLMs可以通过提示(Prompting;Brown等人,2020年;Schick和Schütze,2020年)进一步增强,提示使用人工编写的提示模式作为语言模型的额外输入。在PLMs进行微调时,可以在一个小的标记数据集上进行微调,或者冻结它们以直接用于下游任务的推理。提示显著提高了许多NLU任务的性能(Brown等人,2020年;Schick和Schütze,2020年)。
然而,我们观察到手动离散提示存在相当大的不稳定性。正如表1所示,使用冻结的语言模型时,提示中改变一个词可能会导致性能大幅下降。正如我们将在第3节中展示的,当语言模型被微调时,不稳定性问题有所缓解,但不同提示之间的性能差异仍然很大,特别是在少样本(few-shot)设置中。这种离散提示的不稳定性问题在实践中构成了一个关键挑战。最近自动提示的方法尝试为给定任务搜索表现更好的提示(Shin等人,2020年;Gao等人,2020年;Jiang等人,2020b),但这些方法并没有改变离散提示不稳定的本质。
为了减少离散提示的不稳定性,我们提出了一种名为P-Tuning的新方法,该方法使用可训练的连续提示嵌入与离散提示进行连接。具体来说,给定一个离散提示作为输入,P-Tuning将连续提示嵌入与离散提示标记连接起来,并将它们作为输入提供给语言模型。连续提示通过反向传播进行更新,以优化任务目标。这种直觉是,连续提示将一定程度的可学习能力纳入输入中,这可能学会抵消离散提示中的微小变化,以提高训练稳定性。为了进一步提高性能,我们采用了使用LSTM或MLP的提示编码器来模拟连续提示嵌入之间的依赖性。
我们在两个NLU基准测试中进行了实验:LAMA(Petroni等人,2019年)知识探测和SuperGLUE(Wang等人,2019a)。在LAMA中,使用冻结的语言模型,P-Tuning在相同的预训练模型上分别比手动离散提示和搜索到的提示高出20多分和9分。在SuperGLUE中,使用微调后的语言模型,P-Tuning在全监督和少样本设置下都优于PET(Schick和Schütze,2020年)的最佳离散提示。除了提高性能外,我们的结果显示,在广泛的任务和设置中,P-Tuning大大减少了不同离散提示之间的性能差距,这提高了语言模型适应性的稳定性。
2 Method
2.1 Issues with Discrete Prompts
提示技术采用自然语言模式作为额外的输入,以使预训练语言模型适应下游任务(Brown等人,2020年;Schick和Schütze,2020年)。先前的工作(Zheng等人,2021年)已经指出,提示技术在许多自然语言处理(NLP)任务上取得了一致且显著的改进。然而,如何编写高性能的离散提示仍然是一个具有挑战性的问题。
我们使用不同的手动提示在LAMA知识探测任务(Petroni等人,2019年)上进行了初步实验,该任务旨在通过预测尾部实体从语言模型中提取三元组知识。表1的结果显示,手动离散提示导致性能不稳定。例如,如果我们比较表中最后两个提示,提示中改变一个词会导致性能下降20个百分点。
面对这一挑战,近期的研究工作提出自动化离散提示的搜索过程,通过挖掘训练语料库(Jiang等人,2020b)、基于梯度的搜索(Shin等人,2020)和使用预训练的生成模型(Gao等人,2020)。然而,这些工作旨在寻找表现更好的提示,但并没有改变离散提示不稳定的本质。除了不稳定性问题,离散空间中的搜索可能无法充分利用反向传播的梯度,这可能导致次优解。为此,我们探索了训练连续提示的可能性,以稳定并提高语言模型适应性的性能。
2.2 P-Tuning
正式地,设M是一个具有隐藏层大小h和词汇表大小|V|的预训练语言模型。设{(xi, yi)}i是NLU任务的一个标记数据集,其中x0:n = {x0, x1, …, xn}是一系列离散标记的输入序列,y ∈ Y是一个标签。我们的目标是估计分类的条件概率fM(x) = ˆp(y|x),其中M的参数可以是微调过的或者冻结的。
提示在格式上被提出为离散标记的形式(Schick和Schütze,2020年)。设[Di]为一个离散提示标记。每个提示可以被描述为一个模板T = {[D0:i], x, [D(i+1):j], y, [D(j+1):k]},它可以将标记数据(包括输入x和标签y)组织成文本标记序列,使得任务可以被重新表述为填写输入文本的空白。例如,在预测一个国家首都的任务(LAMA-TREx P36)中,一个提示可以是“The capital of [INPUT] is [LABEL]。”。给定一个标记数据“(Britain, London)”,重构后的文本将是“The capital of Britain is [MASK]。”,其中“[MASK]”应该预测给定的标签“London”。离散提示和离散数据一起被映射到输入嵌入中:
这段内容描述了自然语言理解(NLU)任务中使用预训练语言模型(PLMs)进行提示(prompting)的过程,以及如何通过提示来改善模型对特定任务的适应性。下面我将逐句解释并提供详细的例子。
预训练语言模型的定义:
“M” 是一个预训练语言模型,具有隐藏层大小 “h” 和词汇表大小 “|V|”。这里的 “h” 表示模型隐藏层的维度,而 “|V|” 表示词汇表中不同标记的总数。
标记数据集的构成:
“{(xi, yi)}i” 是指NLU任务的一个标记数据集,其中 “xi” 是输入序列,“yi” 是对应的标签。“x0:n” 表示从 “x0” 到 “xn” 的一系列离散标记,代表输入文本经过分词处理后的标记序列。
任务目标:
目标是估计给定输入 “x” 下标签 “y” 的条件概率 “fM(x) = ˆp(y|x)”。这里的 “fM(x)” 表示模型M对输入x的分类概率预测。参数 “M” 可以是微调(finetuned)的,也可以是冻结(frozen)的。微调意味着使用特定任务的数据来调整模型参数,而冻结则表示使用预训练的参数不变。
提示的格式:
提示以离散标记的形式提出,每个提示 “[Di]” 是一个离散的标记,可以是词汇表中的任何词或特殊符号。
提示模板的定义:
“T” 是提示模板,由一系列离散提示标记和输入数据组成。“{[D0:i], x, [D(i+1):j], y, [D(j+1):k]}” 表示提示的结构,其中 “[D0:i]” 和 “[D(j+1):k]” 是提示的开始和结束部分,“x” 是输入序列,“y” 是标签。
任务的重新表述:
通过提示模板,可以将NLU任务重新表述为填充输入文本空白的形式。例如,在预测国家首都的任务中,提示可以是 “The capital of [INPUT] is [LABEL]。”
具体例子:
以LAMA-TREx P36任务为例,给定标记数据 “(Britain, London)”,这里的 “Britain” 是输入 “x”,“London” 是标签 “y”。根据提示模板,重构后的文本是 “The capital of Britain is [MASK]。”,在这种情况下,“[MASK]” 是一个占位符,模型的任务是预测并填充这个占位符,使其成为 “London”。
输入嵌入:
最后,离散提示和离散数据一起被映射到输入嵌入中。这意味着所有的文本,包括提示和实际的输入数据,都会被转换成模型可以理解的数值型嵌入向量。
总结来说,这段内容讨论了如何通过预训练语言模型和提示技术来处理NLU任务,以及如何通过设计提示模板来引导模型完成特定任务,例如预测国家首都。通过这种方式,可以提高模型对任务的适应性和准确性。
然而,正如第2.1节所讨论的,这样的离散提示往往是极其不稳定的,并且可能在反向传播时不是最优的。因此,我们提出了P-Tuning,它使用连续提示嵌入来改进和稳定提示。设[Pi]是第i个连续提示嵌入。P-Tuning的提示模板如下:
P-Tuning利用一个额外的嵌入函数f : [Pi] → hi来将模板映射到。
最终,我们更新嵌入 {Pi}k i=1 以优化任务损失函数。
值得注意的是,我们也可以将离散提示与连续提示连接起来使用,这种做法表现更好,并在我们的实验中被采用。P-Tuning适用于冻结和微调过的语言模型。
2.3 Prompt Encoder
在上述框架中,我们采用一个映射函数f来将可训练的嵌入{Pi}映射到模型输入{hi}。直觉上,使用映射函数比使用独立的可学习嵌入更方便地对不同提示嵌入之间的依赖性进行建模。在我们的实现中,我们使用一个轻量级神经网络来构建函f。具体来说,我们在第3节中尝试使用长短期记忆(LSTM)网络、多层感知器(MLPs)以及恒等映射函数。
3 Experiments
我们包括了两个NLU基准测试:LAMA(Petroni等人,2019年)用于知识探测(第3.1节),以及SuperGLUE(Wang等人,2019年a)用于通用自然语言理解。在SuperGLUE上,我们考虑了全监督学习(第3.2节)和少样本学习(第3.3节)的设置。
在LAMA上,遵循Shin等人(2020年)和Jiang等人(2020b年)的做法,语言模型是冻结的,只调整离散或连续的提示。对于SuperGLUE,遵循Schick和Schütze(2020年)以及Zheng等人(2021年)的做法,语言模型是经过微调的。在我们的设置中,我们同时优化语言模型参数和连续提示。这种设置不仅遵循了以往工作中的常见标准设置,而且还可以在经过微调和冻结的语言模型上评估P-Tuning。
整体任务设置和结果总结如表2所示。
3.1 Knowledge Probing
- Setup
评估了语言模型从预训练中获得的真实世界知识有多少。LAMA(Petroni等人,2019年)数据集通过从知识库中选取的三元组创建完形填空测试来评估这一能力。
Datasets and vocabulary.LAMA要求所有答案采用单一标记格式。我们首先采用了原始的LAMA-TREx数据集,包含41种Wikidata关系,总共有34,039个测试三元组(即LAMA-34k,涵盖了所有BERT词汇表)。由于不同的预训练模型拥有不同的词汇表,为了允许直接比较,我们遵循先前的工作(Shin等人,2020年)采用了一个子集,这个子集涵盖了GPT和BERT词汇表的交集。这被称为LAMA-29k。我们再次遵循Shin等人(2020年)来构建训练、开发和测试数据,以便进行公平的比较。
Setup. LAMA为每种关系提供了一个手工制作的提示,如表1所示,这些提示是有效的,但可能不是最优的。对于双向掩码语言模型,我们只需要将“[X]”替换为主题实体,将“[Y]”替换为[MASK]标记;对于像GPT这样的单向语言模型,遵循LAMA在Transformer-XL(Dai等人,2019年)上的原始设置,我们使用目标位置前的网络输出。
提示标记的数量和位置是根据开发集选择的,为了简化,我们为双向模型选择了(3, 主体, 原始提示, 3, 客体, 3)模板,以及为单向模型选择了(3, 主体, 原始提示, 3, 客体)模板,因为这种配置对大多数关系都表现良好(数字表示连续提示标记的数量)。连续提示与原始离散提示连接。在提示训练期间,我们将学习率设置为1e-5,并使用Adam优化器。
解释下上面的内容:
这段话描述的是在自然语言处理任务中,特别是在使用LAMA数据集进行知识探测任务时,如何设置和优化提示(prompt)的过程。以下是详细解释:
提示标记的数量和位置选择:在构建提示时,需要确定提示中应该包含多少个标记(tokens)以及这些标记的具体位置。这些设置是基于开发集(development sets)来决定的,目的是找到在大多数情况下都能表现良好的提示配置。
模板选择:
对于**双向模型**(如BERT),选择了一个包含6个部分的模板:(3, 主体, 原始提示, 3, 客体, 3)。这里的数字3表示在主体和客体的前后分别放置3个连续的提示标记。
对于**单向模型**(如GPT),选择了一个稍微简化的模板:(3, 主体, 原始提示, 3, 客体),它与双向模型的模板类似,但没有最后的3个连续提示标记。
配置性能:所选模板在大多数关系上表现良好,这意味着这种提示结构能够有效地引导模型处理各种不同的语言模式。
连续提示与原始离散提示的连接:连续提示(可能是一些预定义的词或者特定的标记)被添加到原始的离散提示(手工编写的提示模板)中,以增强模型对任务的理解和处理能力。
训练设置:在进行提示训练时,设置了学习率为1e-5,并使用了Adam优化器。学习率是控制模型参数更新速度的超参数,而Adam优化器是一种自适应学习率的优化算法,常用于训练深度学习模型。
- Main results
结果在表3中呈现。P-Tuning显著提升了知识探测的最佳结果,从LAMA-34k的43.3%提高到50.6%,从LAMA-29k的45.2%提高到64.2%。此外,P-Tuning在同一规模的模型上超越了以前的离散提示搜索方法,如AutoPrompt(Shin等人,2020年)和LPAQA(Jiang等人,2020b)。这证实了我们在第2节的直觉,即离散提示可能不是最优的。
3.2 Fully-supervised Learning
- Setup
Dataset。为了在全监督学习任务上评估P-Tuning,我们采用了SuperGLUE基准测试(Wang等人,2019b年),它包含8个具有挑战性的自然语言理解(NLU)任务。我们关注其中的7个,因为ReCoRD(Zhang等人,2018年)任务不采用离散提示,因此P-Tuning不直接适用。这些任务包括问答(BoolQ(Clark等人,2019a年)和MultiRC(Khashabi等人,2018年))、文本蕴含(CB(De Marneffe等人,2019年)和RTE(Dagan等人,2005年))、共指消解(WiC(Pilehvar和Camacho-Collados,2018年))、因果推理(COPA(Roemmele等人,2011年))和词义消歧(WSC(Levesque等人,2012年))。
Comparison methods.我们在GPT和BERT这两种单向和双向的预训练模型上进行了P-Tuning的实验。我们包括了四种变体:BERT-Base、BERT-Large、GPT2-Base和GPT-medium。对于每个模型,我们比较了标准分类微调、PET(Schick和Schütze,2020年)(一种基于手动离散提示的典型微调方法)以及我们的P-Tuning。
Configuration. 我们使用与(Wang等人,2019b年)相同的度量标准。对于全监督学习,我们使用大型训练集对预训练模型进行微调,并使用开发集进行超参数和模型选择。具体来说,我们使用AdamW优化器,其学习率呈线性衰减进行训练。我们使用的学习率为{1e-5, 2e-5, 3e-5},批量大小为{16, 32},预热比率为{0.0, 0.05, 0.1}。对于小数据集(即COPA, WSC, CB, RTE),我们对预训练模型进行20个周期的微调。对于较大的数据集(即WiC, BoolQ, MultiRC),我们将训练周期数减少到10,因为模型更早地收敛。使用早停法(early stopping)来避免过拟合训练数据。
- Main Results
全监督学习的主要结果在表4中展示。我们观察到P-Tuning能够提升BERT和GPT在全监督学习性能上的提升。
(1) 具体来说,在BERT-Base模型上,P-Tuning在7个任务中的5个上取得了最佳性能,而在BERT-Large模型上,P-Tuning在7个任务中的4个上超越了其他方法。例外的是WiC和MultiRC,这两个任务都有相对较大的训练集。我们发现在这种高资源任务上,P-Tuning可能不会比CLS-FT获得更大的提升,而在低资源任务上获益更多。平均来看,P-Tuning在考虑的基线上有所改进。
(2) 在GPT2-Base和GPT2-Medium模型上,P-Tuning在所有任务上一致地取得了最佳性能。
3.3 Few-Shot Learning
尽管GPT-3在使用手工制作的提示时展示了不错的少样本学习能力,它在一些具有挑战性的任务上(例如,自然语言推理)仍然存在困难(Brown等人,2020年)。我们受到启发,想要研究P-Tuning是否也能提高预训练模型在这些具有挑战性任务上的少样本学习性能。
- Setup
**Few-shot Evaluation.**少样本学习性能对许多因素都很敏感(例如,训练样本的顺序、随机种子和提示模式),因此存在很大的方差(Zhao等人,2021a;Lu等人,2021;Zhang等人,2020)。因此,少样本评估策略应确保改进确实来自于方法的改进而不是方差。为此,我们遵循FewNLU评估程序(Zheng等人,2021),该程序已经解决了并处理了这个问题。具体来说,我们使用随机数据分割,在一个小的标记集上仅进行模型选择,以防止对大型开发集的过拟合。
Dataset。我们使用少样本SuperGLUE(也称为FewGLUE)基准测试(Schick和Schütze,2020年),并按照先前工作(Zheng等人,2021年)中的数据分割构造设置进行操作。
Baseline and Hyper-parameter。在少样本学习中,我们再次将P-Tuning与PET(Schick和Schütze,2020年)进行比较,PET在一些任务上被证明优于GPT-3。与(Schick和Schütze,2020年)类似,我们使用ALBERT-xxLarge作为基础模型。对于PET和P-Tuning共享的超参数(例如,学习率、最大训练步数、评估频率),我们使用相同的搜索空间进行公平比较。具体来说,我们在{1e-5, 2e-5}中搜索学习率,在{250, 500}中搜索最大训练步数,在{0.02, 0.04}中搜索评估频率。
Construction of Prompt Patterns。对于PET,我们使用了Schick和Schütze(2020年)报告的相同手动提示。在为P-Tuning构建提示模式时,基于与PET相同的手动提示,我们在不同位置插入不同数量的连续提示标记,从而制定了一系列模式候选。然后我们使用FewNLU(Zheng等人,2021年)的验证策略为P-Tuning选择最佳模式。我们还在§3.3.3中对连续提示标记的数量和位置进行了进一步分析。
- Main Results
Few-Shot Performance。表5展示了少样本学习的主要结果。我们发现,在ALBERT模型上,P-Tuning平均比PET高出1个多百分点。它比PromptTuning高出超过13个百分点。这证明了通过自动学习连续提示标记,预训练模型能够在NLU任务上实现更好的少样本学习性能。
- Ablation Stud
Type of Prompt Encoder。先前的工作(Shin等人,2020年)提出简单地使用一个多层感知器(MLP)作为提示编码器,我们对提示编码器的选择进行了进一步的消融分析,结果如表8所示。我们考虑了长短期记忆网络(LSTM)、多层感知器(MLP)和直接优化词嵌入(EMB)(即,我们直接优化词嵌入而不使用额外的参数)。从结果中,我们可以看到LSTM、MLP和EMB都可以作为提示编码器使用。结果显示LSTM和MLP通常在这些任务上表现良好,而EMB不稳定,在某些任务上(例如WiC和CB)可能大幅落后于另外两种方法。总结来说,当处理新任务时,LSTM和MLP都应被考虑在内。
Location of Prompt Tokens。为了研究在哪个位置插入连续提示标记,我们进行了如表7所示的实验。从结果中,我们有以下发现:
1. 通过比较#1(或#2)与#3(或#4),我们发现如果我们在不分割句子的位置插入连续提示标记会更好。例如,在案例#1中,“[P]”打破了句子“[Hypothesis]?”的完整性,而在案例#3中,“[P]”位于句子之间。
2. 通过比较#2(或#3)与#4,我们发现对于放置在输入边缘或中间没有特别的偏好。
3. 建议编写一些模式候选项,然后从中为每个任务搜索最佳选项。
Number of Prompt Tokens 。我们还研究了提示标记数量的影响,并在表7中展示了结果。通过比较#3、#6、#7和#8,我们可以得出结论,提示标记的数量对少样本性能有很大的影响。然而,并不是说提示标记的数量越多越好。我们推测,由于训练数据有限,当过度增加连续提示标记的数量时,学习参数变得困难。在实践中,建议通过模型选择来寻找最佳的提示标记数量。
- Comparison with Discrete Prompt Search先前的工作(Gao等人,2020年)提出了自动搜索离散提示,并取得了比手工提示更好的结果。我们现在继续将P-Tuning与自动搜索的离散提示进行比较。为了进行公平比较,我们遵循LM-BFF(Gao等人,2020年)的设置,也使用RoBERTa-Large模型(Liu等人,2019年)在GLUE任务(Wang等人,2018年)上进行实验。由于评估协议对少样本性能有很大的影响,我们使用LM-BFF搜索到的前3个离散提示,并尝试仅使用这些离散提示以及额外应用P-Tuning。对于P-Tuning,提示模式是通过串联相同的离散提示以及连续提示构建的。表9的结果显示,额外加入连续提示可以进一步提高少样本性能。P-Tuning易于与现有的离散提示结合使用,同时如第3.4节所讨论的,进一步提高了稳定性。
3.4 Stabilizing Language Model Adaptation
在上述部分中,我们已经展示了P-Tuning在多个设置中的性能改进。现在我们展示结果以证明P-Tuning还稳定了语言模型的适应性;即减少了不同提示之间的差异。正如我们在表1中所展示的,手动提示对性能有很大的影响。当涉及到少样本学习时,由于少样本学习的敏感性(Zheng等人,2021年),不同提示之间的性能差距尤为明显。表6的结果显示,P-Tuning提高了表现最差的模式(例如,P#5)的性能,并在多个模式上实现了较小的标准偏差。与PET-FT相比,P-Tuning在选择模式方面的稳定性得到了提高。
在LAMA上,我们观察到了一个类似的现象:尽管手动提示通常会得到相当不稳定的结果,但在手动提示之上添加可训练的连续提示可以稳定它们的性能,将标准差从10.1降低到0.46。
4 Related work
Language Model Prompting。GPT-3(Brown等人,2020年)使用上下文示例(Liu等人,2021年;Zhao等人,2021b)作为一种提示方式,将知识从预训练转移到下游任务。Schick和Schütze(2020年)提议使用填空模式,这消除了掩码标记是句子最后一个标记的约束。这进一步缩小了预训练和下游任务之间的差距。为了改进NLU的提示,最近的研究工作提出了通过挖掘训练语料库(Jiang等人,2020b)、基于梯度的搜索(Shin等人,2020年)或使用预训练的生成模型(Gao等人,2020年)自动搜索高性能提示的方法。我们的方法与这些先前的工作不同,我们采用了连续提示嵌入,在我们的实验中发现这些嵌入与离散提示互为补充。
最近,一些并行的研究工作也提出了使用连续提示。Prefix-tuning(Li和Liang,2021年)在每层的序列开头添加连续提示。与我们的工作不同,Prefix-tuning针对的是自然语言生成任务。
在自然语言理解(NLU)领域,一些并行的方法基于连续提示被提出,专注于改进知识探测(Qin和Eisner,2021年;Zhong等人,2021年)。Lester等人(2021年)展示了,使用大型预训练模型时,仅通过调整连续提示并冻结语言模型就能达到与全模型调整相当的性能。
与这些在自然语言理解(NLU)上的并行工作相比,P-Tuning得出了一个独特的结论:连续提示能够改善性能,并在少样本和全监督的设置下,无论是冻结还是微调模型,都能稳定训练。例如,没有并行的工作表明连续提示能够提高微调语言模型的性能。从技术上讲,P-Tuning还有几个独特的设计,如使用混合连续-离散提示,并采用提示编码器。
Knowledge in Language Models.自我监督学习(Self-supervised)的预训练语言模型(Han等人,2021年),包括GPT(Radford等人,2019年)、BERT(Devlin等人,2018年)、XLNet(Yang等人,2019年)、RoBERTa(Liu等人,2019年)被观察到不仅学习了上下文化的文本表示,还学习了语言和世界知识。Hewitt和Manning(2019年)展示了语言模型产生的上下文化表示可以在嵌入空间中形成一个解析树。Vig(2019年);Clark等人(2019b)研究了变换器内的多头注意力模式,并发现某些注意力头可能对应于某些语法功能,包括共指和名词修饰语。LAMA(Petroni等人,2019年,2020年)提出了LAMA任务,该任务利用完形填空测试来预测知识库中的事实三元组,以检验语言模型记忆单标记格式答案的能力。在(Wang等人,2020年)中,作者调查了注意力矩阵,以寻找上下文中包含的知识三元组的证据。Jiang等人(2020a)基于LAMA开发了一个多标记事实检索数据集。
5 Conclusions
在本文中,我们介绍了一种名为P-Tuning的方法,该方法将连续提示与离散提示连接使用。P-Tuning提高了预训练语言模型适应性的性能并稳定了训练。在少样本和全监督的设置下,P-Tuning对经过微调和冻结的语言模型都同样有效。
6 解疑
Figure 1 说明了什么?
Figure 1 展示了使用 P-Tuning 方法在 SuperGLUE 开发数据集上的平均分数。SuperGLUE 是一个包含多个自然语言理解任务的数据集,用于评估模型在这些任务上的表现。
从 Figure 1 的描述来看,它没有直接给出图表的具体数据点或趋势图,而是提到了 P-Tuning 在 SuperGLUE 数据集上的应用情况。根据提供的信息,我们可以推断出以下几点:
P-Tuning 的效果:P-Tuning 不仅稳定了训练过程,而且还显著提高了模型在多种 NLU 任务上的表现,包括 LAMA 和 SuperGLUE。
离散提示的问题:离散提示(即手动编写的提示模板)容易受到不稳定性的影响,即改变提示中的单个词可能会导致性能大幅下降。例如,当使用一个固定的模型时,如果将提示从“[X] is located in [Y]”改为“[X] is located in which country? In [Y]”,准确率会从 31.3 提高到 51.1,这表明即使是微小的变化也会引起性能的巨大波动。
P-Tuning 的作用:P-Tuning 通过引入可训练的连续提示嵌入来解决上述问题,这些嵌入与离散提示相结合,然后作为输入喂给语言模型。通过这种方式,连续提示可以通过反向传播进行更新,从而优化特定任务的目标。这种方法不仅减少了离散提示之间性能的差异,还提高了整体的性能。
因此,Figure 1 可能展示了在不同的提示变化下,P-Tuning 如何帮助稳定模型的表现,并且提高了模型在 SuperGLUE 的各个子任务上的平均得分。
Figure 2 说明了什么?
Figure 2 通过两个子图(a)和(b)说明了如何使用不同的方法来生成提示(prompt),并解释了P-Tuning是如何工作的。
子图 (a) - 离散提示搜索(Discrete Prompt Search)
这个子图展示了一个典型的离散提示搜索过程。在这个过程中,提示生成器只接收离散奖励,即基于模型对特定输入的预测是否正确来更新提示。具体来说:
蓝色区域表示上下文(“Britain”);
红色区域表示目标(“[MASK]”);
橙色区域代表需要优化的提示部分。
离散提示搜索的过程通常涉及手动创建一系列候选提示,然后选择最优的一个。
子图 (b) - P-Tuning
这个子图解释了P-Tuning的工作原理。与离散提示搜索不同,P-Tuning使用的是连续提示嵌入,这意味着提示可以被优化为一个连续值,而不是固定的一组离散选项。具体来说:
连续提示嵌入和提示编码器可以以可微分的方式进行优化;
提示模板由连续提示嵌入组成,这些嵌入通过一个映射函数\(f\)转换成模型输入;
映射函数\(f\)将连续提示嵌入\([P_i]\)映射到模型输入\(h_i\)。
P-Tuning的关键优势在于它可以更方便地建模不同提示嵌入之间的依赖关系,并且可以通过反向传播来优化提示嵌入,从而提高模型在特定任务上的性能。
总结
离散提示搜索:这种方法基于离散奖励进行提示优化,可能存在不稳定性,因为提示的选择是基于离散选项的。
P-Tuning:这种方法通过使用连续提示嵌入和一个映射函数来优化提示,从而提高了模型的性能,并且在训练过程中更加稳定。
通过使用P-Tuning,研究人员能够在多个自然语言理解任务上获得更好的性能,同时减少由于离散提示选择带来的不稳定性。
P-Tuning具体使用示例:
为了更好地理解P-Tuning及其如何改进自然语言理解(NLU)任务中的提示(prompting)机制,我们可以考虑一个具体的例子。
原始的离散提示方法
假设我们有一个自然语言推理(NLI)任务,其中给定一对句子(前提和假设),模型需要判断前提是否支持假设。例如,给定的前提句子是“John is reading a book.”,假设句子是“John is reading.”,我们需要判断前提是否支持假设。
离散提示的例子
一个简单的离散提示可能设计为:“[Premise] therefore [Hypothesis]?”。如果使用一个具体的例子,“John is reading a book. therefore John is reading?”。在这种情况下,模型会预测问号后面的位置(也就是标签位置)的答案。
P-Tuning方法
P-Tuning引入了连续提示嵌入,这些嵌入可以被优化以改善模型的性能。我们可以在原始的离散提示中添加连续提示令牌,例如“[Premise] [P] therefore [Hypothesis]?”,其中[P]代表一个或多个连续提示令牌。
- 构造连续提示
选择基线模型:使用ALBERT-xxLarge作为基础模型。
构建提示模式:基于手动编写的离散提示“[Premise] therefore [Hypothesis]?”,我们在其中插入不同数量的连续提示令牌[P],形成多个候选模式。
超参数设置:对于学习率,最大训练步数以及评估频率等共享超参数,使用相同的搜索空间,比如学习率在{1e−5, 2e−5}之间,最大训练步数在{250, 500}之间,评估频率在{0.02, 0.04}之间。
验证策略:使用随机数据划分来进行模型选择,仅在一个小的标记数据集上进行,以避免在大的验证集上过拟合。
选择最佳模式:从多个候选模式中选择最佳模式,这通常通过在验证集上进行性能测试来完成。
优化过程
连续提示嵌入初始化后,它们成为可训练的参数,可以随模型一起进行优化。
在训练过程中,连续提示嵌入通过反向传播更新,以最小化损失函数。
这种优化过程有助于模型更好地适应任务,即使是在数据量较小的情况下。
实验结果
提高性能:在多项NLU任务中,如SuperGLUE基准测试上,P-Tuning显著提高了模型的表现。特别是在少量数据(few-shot)场景下,P-Tuning相比其他方法(如PET)取得了超过1点的平均性能提升,相比于PromptTuning则提高了超过13点。
增强稳定性:P-Tuning不仅提高了性能,还减少了不同离散提示间的性能差异。例如,在SuperGLUE数据集上,P-Tuning能够提高最差表现模式的性能,并且在不同模式间实现了更小的标准偏差。
位置影响:实验发现,将连续提示令牌放置在不会打断句子完整性的地方效果更好。另外,连续提示令牌放置在输入序列的开头还是中间没有明显偏好。
提示数量的影响:连续提示令牌的数量对few-shot性能有重要影响。然而,并不是提示令牌越多越好;过多的连续提示令牌可能会导致训练困难,尤其是在数据有限的情况下。
综上所述,P-Tuning通过引入连续提示嵌入解决了离散提示的不稳定性问题,并通过实验验证了其在NLU任务上的有效性。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。