预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)

一:Pattern-Exploiting Training(PET)

它通过人工构建的模版与BERT的MLM模型结合,能够起到非常好的零样本、小样本乃至半监督学习效果,而且该思路比较优雅漂亮,因为它将预训练任务和下游任务统一起来了。
然而,人工构建这样的模版有时候也是比较困难的,而且不同的模版效果差别也很大,如果能够通过少量样本来自动构建模版,也是非常有价值的。

主要的思想是借助由自然语言构成的模版(英文常称Pattern或Prompt),将下游任务也转化为一个完形填空任务,这样就可以用BERT的MLM模型来进行预测了

预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第1张图片

离散 vs 连续
最早研究自动模版的工作,有些是挖掘实体关系,有些需要大量样本进行基于梯度搜索(如autoprompt),在离散空间下搜索的自然语言模版。也有梯度粗筛+代入模版精筛等等。而连续的Prefix-Tuning和P-tuning 放弃了“模版由自然语言构成”这一要求,从而将其变成了可以简单梯度下降求解的连续参数问题,效果还更好。可能prompt的关键在于它是怎么用的,不在于它由什么构成。

二:Prefix Tuning

Prefix-Tuning 在模型输入前添加一个连续的且任务特定的向量序列(continuous task-specific vectors),称之为前缀(prefix)。前缀被视为一系列“虚拟 tokens”,但是它由不对应于真实 tokens 的自由参数组成。

与更新所有 PLM 参数的全量微调不同,Prefix-Tuning 固定 PLM 的所有参数,只更新优化特定任务的 prefix。
因此,在生产部署时,只需要存储一个大型 PLM 的副本和一个学习到的特定任务的 prefix,每个下游任务只产生非常小的额外的计算和存储开销。
预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第2张图片
Prefix-Tuning 在输入前添加前缀,即 Z=[prefix, x, y] , prefix为前缀序列的索引, 在模型每一层都添加前缀向量;

在实验中,作者进行了两组方法变体的对比分析:

  • [ Full vs Embedding-only ]:Embedding-only 方法只在 embedding 层添加前缀向量并优化,而 Full 代表的 Prefix-tuning 不仅优化 embedding 层添加前缀参数,还在模型所有层的激活添加前缀并优化。实验得到一个不同方法的表达能力增强链条:discrete prompting < embedding-only < prefix-tuning。同时,Prefix-tuning 可以直接修改模型更深层的表示,避免了跨越网络深度的长计算路径问题。
  • [ Prefix-tuning vs Infix-tuning ]:通过将可训练的参数放置在前面 和 中间来研究可训练参数位置对性能的影响,,这种方式成为 Infix-tuning。实验表明 Prefix-tuning 性能好于 Infix-tuning,因为 prefix 能够同时影响 和 的隐层激活,而 infix 只能够影响 的隐层激活。
  • 同时,研究表明前缀的 embedding 使用词表中真实单词的激活来初始化明显优于随机初始化。

三:P-tuning

Arxiv上的论文《GPT Understands, Too》提出了名为P-tuning的方法,成功地实现了模版的自动构建。不仅如此,借助P-tuning,GPT在SuperGLUE上的成绩首次超过了同等级别的BERT模型,这颠覆了一直以来“GPT不擅长NLU”的结论,也是该论文命名的缘由。

这里的[u1]~[u6],代表BERT词表里边的[unused1]~[unused6],也就是用几个从未见过的token来构成模板,这里的token数目是一个超参数,放在前面还是后面也可以调整。
预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第3张图片
增强相关性 #
在原论文中,P-tuning并不是随机初始化几个新token然后直接训练的,而是通过一个小型的LSTM模型把这几个Embedding算出来,并且将这个LSTM模型设为可学习的。这样多绕了一步有什么好处呢?原论文大概的意思是:**LSTM出现的token表示相关性更强,某种程度上来说更像“自然语言”(因为自然语言的token之间不是独立的),此外还能防止局部最优。**有人在Github上进一步向作者确认了一下(参考这里),效果上的差别是通过LSTM多绕一步的方法可以使得模型收敛更快、效果更优。
然而,这样多了一个LSTM,总感觉有些别扭,而且实现上也略微有点麻烦。按照作者的意思,LSTM是为了帮助模版的几个token(某种程度上)更贴近自然语言,但这并不一定要用LSTM生成,而且就算用LSTM生成也不一定达到这一点。笔者认为,更自然的方法是在训练下游任务的时候,不仅仅预测下游任务的目标token(前面例子中的“很”、“新闻”),还应该同时做其他token的预测。
比如,如果是MLM模型,那么也随机mask掉其他的一些token来预测;如果是LM模型,则预测完整的序列,而不单单是目标词。这样做的理由是:因为我们的MLM/LM都是经过自然语言预训练的,所以我们(迷之自信地)认为能够很好完成重构的序列必然也是接近于自然语言的,因此这样增加训练目标,也能起到让模型更贴近自然语言的效果。经过笔者的测试,加上这样辅助目标,相比单纯优化下游任务的目标,确实提升了效果。

直接优化连续的 prompt 参数面临两个挑战:一是预训练模型原始的词向量已经高度离散,若随机初始化 prompt 向量并进行 SGD 优化,也只会在小范围内优化并陷入局部最小值;二是 prompt 向量之间是相互关联而不是独立的。论文中设计了一个 prompt 编码器,该编码器由一个 Bi-LSTM 和一个两层的前馈神经网络组成,对 prompt embedding 序列进行编码后再传入到语言模型中。

P-Tuning 的方法思路与 Prefix-Tuning 很相近,P-Tuning 利用少量连续的 embedding 参数作为 prompt 使 GPT 更好的应用于 NLU 任务,而 Prefix-Tuning 是针对 NLG 任务设计,同时,P-Tuning 只在 embedding 层增加参数,而 Prefix-Tuning 在每一层都添加可训练参数。

P-tuning-v1预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第4张图片
在这里插入图片描述

P-tuning-v2
将prompt信息作为前缀加入;
其次是一个深层的前缀,即在模型的每一层前面都添加上前缀,以尽可能挖掘信息并且额外添加的参数并不会很大。
另外,作者去除了之前的重参数化方法;并且引入了多任务学习,比如说,在 NER 中,可以同时训练多个数据集,不同数据集使用不同的顶层 classifer,但是 prefix continuous prompt 是共享的;
最后就是删除了之前的verbalizer。因为并不是每一个任务都需要有意义的标签,因此作者为了更为通用的框架,回归到最初的CLS+MLP头的范式。,
du![在这里插入图片描述](https://img-blog.csdnimg.cn/95f3cec6fc4d405297541ca80c53f328.png

四:prompt tuning

Prompt Tuning 方式可以看做是 Prefix Tuning 的简化,固定整个预训练模型参数,只允许将每个下游任务的额外 个可更新的 tokens 前置到输入文本中,也没有使用额外的编码层或任务特定的输出层。如下图所示,在模型大小增加到一定规模时,仅仅使用 Prompt Tuning 就足以达到 Fine Tuning 的性能。
预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第5张图片

Prompt Tuning 以 T5 为基础,将所有任务转化成文本生成任务。Prompt Tuning 在输入X前额外添加一系列特殊 tokens P,输入语言模型生成Y。通过将输入X的 embedding 矩阵 与 prompts 的 embedding 矩阵进行拼接 输入 T5 模型,训练模型,但是只有 prompt 参数被更新。

Prompt Tuning 提出了 Prompt Ensembling 方法来集成预训练语言模型的多种 prompts。通过在同一任务上训练N个 prompts,为一个任务创建了N个单独的模型,同时在整个过程中共享核心的预训练语言建模参数。 除了大幅降低存储成本外,提示集成还使推理更加高效。 处理一个样例时,可以执行批此大小为的单个前向传递,而不是计算N次不同模型的前向传递,跨批次复制样例并改变 prompts。在推理时可以使用 major voting 方法从 prompt ensembling 中得到整体的预测。

五:PPT(pretrained prompt tuning)

预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第6张图片
保持模型fixed. 只训练prompt.

虽然Prompt-tuning非常有效,其在较小预训练模型上、在Few-shot的场景下表现一般,且相比于Model-tuning,Prompt-tuning的收敛速度较慢,需要训练更多的步数。虽然可以通过初始化soft prompts解决,那既然如此,为什么不对prompts也进行预训练呢!

这篇文章提出PPT,对prompt的预训练方法是利用把所有的分类任务分成三类:单句分类任务、句对分类任务和多项选择分类任务。然后对每一类都设计了一个自监督预训练任务,然后用预训练任务的prompts去初始化下游任务的prompts。

https://arxiv.org/abs/2109.04332

六:prompt tuning的应用

1 Prompt tuning用于迁移学习
《SPoT: Better Frozen Model Adaptation through Soft Prompt Transfer》

摘要:随着预训练的语言模型越来越大,人们对将这些模型应用于下游任务的参数高效方法的兴趣也越来越大。 在之前P-tuning方法的基础上,作者提出了一种基于提示的迁移学习方法,称为SPOT:软提示转移。
SPOT首先学习一个或多个源任务的提示,然后用它来初始化目标任务的提示。
作者表明,SPOT显著地提高了PROMPT-TUNING在许多任务中的性能。
更重要的是,SPOT与模型fine-tuning效果可比,甚至优于fine-tuning,而参数效率更高(最多可减少27,000倍的特定任务参数)。
作者进一步对26个NLP任务和160个源-目标任务的组合进行了大规模的任务转移性研究,并证明了任务往往可以通过及时转移而相互受益。最后,作者提出了一个简单而高效的检索方法,该方法将任务提示作为任务嵌入来识别任务之间的相似性,并预测一个给定的新目标任务的最可转移的源任务。

研究问题:作者上面已经提到了主要的思路,就是通过上游任务学习到的prompt来初始化下游的任务prompt。因此这里产生了两个问题:
对于一个给定的目标任务,什么时候应该将学习到的prompt用于目标任务
能否通过学到的prompt,更为准确的为目标任务选择最合适的源任务

预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第7张图片
为了提高P-tuning的性能,SPOT引入了源提示调整,这是一个介于语言模型预训练和目标提示调整之间的中间训练阶段(上图,左),在一个或多个源任务的学习一个提示(同时仍然保持基本模型的冻结),然后用于初始化目标任务的提示。 作者的方法保留了P-tuning的所有计算优势,也就是说,对于每个目标任务,它只需要重新存储一个小的特定任务的提示,同时可以为所有任务重复使用一个冻结的预训练模型。(这里用来验证对于不同任务是否prompt迁移是否都有效)
但是什么源任务最适合目标任务迁移呢?作者基于prompt设计了一种新的任务相似度关系计算。如上图右所示,先得到目标任务的embedding,同时,已经在上游的n个任务上得到了n*k个prompt;每个任务结合prompt得到其任务表示,再与目标任务进行相似度计算,最终相似度最高的k个作为相关性最大的源任务,并将这些任务的prompt加权初始化目标任务的prompt;然后再在目标任务上进行P-tuning,得到新的prompt.

2 Prompt-tuning鲁棒性研究
《P-ADAPTERS: Robustly Extracting Factual Information from Language Models with Diverse Prompts》

摘要:最近的工作发现,从大型语言模型 (LLM) 中提取的事实信息的质量取决于用于查询它们的提示。这种不一致是有问题的,因为不同的用户会使用不同的措辞查询 LLM 以获得相同的信息,但无论如何都应该收到相同、准确的响应。在这项工作中,作者将通过引入 P-Adapters(位于 LLM 的嵌入层和第一注意层之间的轻量级模型) 来解决这个缺点。他们将 LLM 嵌入作为输入和输出用于查询 LLM 的连续提示。此外,作者研究了学习一组连续提示(“专家”)并选择一个来查询 LLM 的专家混合 (MoE) 模型。它们需要一个在人工标注数据上训练的单独分类器,以将自然语言提示映射到连续的提示。 P-Adapters 在从 BERT 和 RoBERTa 提取事实信息方面与更复杂的 MoE 模型相当,同时消除了对额外注释的需要。与仅使用自然语言查询的基线相比,P-Adapters 的精度绝对提高了 12-26%,一致性绝对提高了 36-50%。最后,作者探索了 P-Adapter 成功的原因,并得出结论,访问 LLM 的原始自然语言提示的嵌入,特别是所询问的实体对的主题,是一个重要因素。

研究问题:基于prompt的方法存在鲁棒性较差的问题,即对于prompt的使用非常敏感,相同语义但是不同表示的prompt也有可能产生不同的结果。因此作者想增强P-tuning的鲁棒性,并从大规模预训练模型中抽取出尽可能多的事实信息。

预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第8张图片
从这个模型图我们可以看出,P-Adapter处于输入的embedding层和LLM之间的一个独立模块,主要就是将输入的原始embedding再映射一下,变成新的连续的embedding,再输入预训练模型进行预测,而具体的P-Adapter的结构可以参见下面的图:预训练范式提示学习方法一览(PET, Prefix-tuning,P-tuning,prompt tuning, PPT,SPoT, Prompt-tuning鲁棒性研究)_第9张图片
评估指标:
P@1:衡量一个提示是否能提取出事实;
consistency:衡量使用不同的prompt输入是否能得到一致的结果(不一定是正确的结果)

你可能感兴趣的:(自然语言处理,深度学习,人工智能,自然语言处理)