Prompt Learning

Prompt Learning 的本质就是将所有下游任务统一成预训练任务; 以特定的模板,将下游任务的数据转成自然语言形式,从而充分挖掘预训练语言模型本身的能力。

概述

将所有下游任务统一成预训练任务;以特定的模板,将下游任务的数据转成自然语言形式,充分挖掘预训练模型本身的能力。

Prompt Learning本质上就是设计一个比较契合上游预训练任务的模板,通过模板的设计就是挖掘出上游预训练模型的潜力,让上游的预训练模型在尽量不需要标注数据的情况下比较好的完成下游的任务,关键包括 3 个步骤:

  • 1.设计预训练语言模型的任务

  • 2.设计输入模板样式(Prompt Engineering)

  • 3.设计 label 样式及模型的输出映射到 label 的方式(Answer Engineering)

举个例子:

对于输入的文本 xx,有函数fprompt(.)f_{prompt}(.),能将 xx 转化成prompt的形式xx{}',即:

x=fprompt(x)x{}' = f_{prompt}(x)

该函数通常会进行两步操作:

  • 1.使用一个模板,模板通常为一段自然语言,并且包含有两个空位置:用于填输入x的位置[X]和用于生成答案文本z的位置[Z].

  • 2.把输入x填到[X]的位置。

以情感分析任务为例,模型需根据输入句子做二分类:

原始xx输入:特效非常酷炫,我很喜欢。

经过fprompt(.)f_{prompt}(.)输入后变为:

特效非常酷炫,我很喜欢。这是一部[MASK]电影 ;

最后根据模型预测的[MASK]的词语进行正面情感/负面情感的映射

通常,Prompt 来填充答案的位置一般在句中或句首。如果在句中,一般称这种 Prompt 为 Cloze Prompt;如果在句首,一般称这种 Prompt 为 Prefix Prompt。原始x 和 Prompt的位置、数量以及使用模板句的不同,都有可能对结果造成影响,因此需要灵活调整。

针对其他 NLP 任务, Prompt 一般如下表所示进行设计。

常见方法

硬模板方法

PET(Pattern Exploiting Training)

PET 是一种较为经典的提示学习方法,和将任务描述与标准的监督学习相结合它使用自然语言patterninput examples转化为cloze-style phrases。如下图所示,PET 分三步工作:

PET-BERT的计算方式如下图所示,它包含三步:

  • 针对每种pattern,在一个小的训练集 T\mathcal{T}上对一个单独的PLM进行微调。
  • 使用所有PLM模型的集合为一个大的未标注数据集 D\mathcal{D} 添加soft labels。
  • 在这个soft-label的数据集上训练标准分类器。
img

LM-BFF

LM-BFF是一套针对小样本进行微调的技术,主要包括两部分:基于提示(prompt)进行微调,关键是如何自动化生成提示模板;

将样本示例以上下文的形式添加到每个输入中,关键是如何对示例进行采样。

硬模板方法的缺陷:

硬模板产生依赖两种方式:根据经验的人工设计和自动化搜索。但是,人工设计的不一定比自动搜索的好,自动搜索的可读性和可解释性也不强。

对于prompt,改变prompt中的单个单词 会给实验结果带来巨大的差异, 所以也为后续优化提供了方向,如索性直接放弃硬模板,去优化 prompt token embedding。

img

软模板方法

软模版是直接优化 Prompt Token Embedding,是向量/可学习的参数,不再追求模板的直观可解释性

P-tuning

不再设计/搜索硬模板,而是在输入端直接插入若干可被优化的 Pseudo Prompt Tokens,自动化地寻找连续空间中的知识模板:

1.不依赖人工设计

2.要优化的参数极少,避免了过拟合(也可全量微调,退化成传统 finetuning)

P-Tuning主要结构是利用了一个prompt encoder(Bi-LSTM),将一些pseudo prompt(离散token)进行编码再与input embedding进行拼接,并引入少量自然语言提示的锚字符(例如Britain)进一步提升效果。再优化生成的encoder部分。

  1. 初始化一个模板:The capital of [X] is [mask]
  2. 替换输入:[X] 处替换为输入 “Britian”,即预测 Britain 的首都
  3. 挑选模板中的一个或多个 token 作为 pseudo prompt
  4. 将所有 pseudo prompt 送入 Bi-LSTM,获得每个 pseudo prompt 的「隐状态向量 h」
  5. 将初始模板送入模型的 Embedding Layer,「图中 pseudo prompt 的 token embedding用 h 代替」,然后预测mask。

Prefix tuning

P-tuning 更新 prompt token embedding 的方法,能够优化的参数较少。Prefix tuning 希望能够优化更多的参数,提升效果,但是又不带来过大的负担。虽然 prefix tuning 是在生成任务上被提出来的,但是它对 soft prompt 后续发展有着启发性的影响.

模型上在每层 transformer 之前加入 prefix。特点是 prefix 不是真实的 token,而是连续向量(soft prompt),Prefix-tuning 训练期间冻结 transformer 的参数,只更新 Prefix 的参数。

只需要不同任务设置不同的Prefix即可,因此实现上只需要存储一个大型transformer模型和多个学习的任务特定的prefix参数。每个任务训练产生非常小的开销。

以图上自回归模型为例的做法:

  1. 输入表示为 Z = [ prefix ; x ; y ]

  2. Prefix-tuning 初始化一个训练的 矩阵 P,用于存储 prefix parameters

  3. 前缀部分 token,参数选择设计的训练矩阵,而其他部分的 token,参数则固定 且为预训练语言模型的参数

核心结论:Prefix-tuning 在生成任务上,全量数据、大模型:仅微调 prompt 相关的参数,媲美 fine-tuning 的表现。

Soft Prompt Tuning

Soft Prompt Tuning 验证了软模板方法的有效性,并提出了固定基础模型,有效利用任务特定的 Soft Prompt Token,可以大幅减少资源占用,达到大模型的通用性。

对 Prefix-tuning 的简化,固定预训练模型,只对下游任务的输入添加额外的 k 个可学习的 token。这种方式在大规模预训练模型的前提下,能够媲美传统的 fine-tuning 表现。

P-tuning与 Prefix-Tuning 的区别

  • Prefix Tuning 是将额外的 embedding 加在开头,看起来更像是模仿 Instruction 指令;而 P-Tuning 的位置则不固定
  • Prefix Tuning 通过在每个 Attention 层都加入 Prefix Embedding 来增加了模型额外的参数;而 P-Tuning 只是在输入的时候加入 Embedding,并通过 LSTM来初始化

总结

尽管 Prompt 研究搞得如火如荼,但目前仍存在许多问题值得研究者们去探究

  1. Prompt 的设计问题。目前使用 Prompt 的工作大多集中于分类任务和生成任务,其它任务则较少。另外,「模板」和「答案」的联系也亟待解决。模型的表现同时依赖于使用的「模板」和「答案」的映射,如何同时搜索或者学习出两者联合的最好效果仍然很具挑战性
  2. Prompt 的理论分析和可解释性。尽管 Prompt 方法在很多情况下都取得了成功,但是目前 Prompt-based Learning 理论分析还很少,人们很难了解 Prompt 为什么能达到好的效果,又为什么在自然语言中意义相近的 Prompt 有时效果却相差很大
  3. Prompt 在 PLM debias 方面的应用。由于 PLM 在预训练过程中见过了大量的人类世界的自然语言,所以很自然地会受到一些影响。举一个简单的例子,比如说训练语料中有非常多 "The capital of China is Beijing",导致模型每次看到 "capital" 的时候都会预测出 "Beijing",而不是去分析到底是哪个国家的首都。在应用的过程中,Prompt 还暴露了 PLM 学习到的很多其它 bias,比如种族歧视、性别对立等。这也许会是一个值得研究的方向

参考文献