提纲
1 简介
2 Prompt ensembling
2.1 Unifo
rm averaging
2.2 Weighted averaging
2.3 Majority voting
2.4 Knowledge distillation
3 Prompt augmentation
3.1 Sample selection
3.2 Sample ordering
4 Prompt composition
5 Prompt decomposition
6 总结
参考文献
1 简介
在之前的章节中提及的关于prompt engineering的方法大多聚焦于如何构建一个合适的prompt, **但是目前有大量的研究表明使用多个prompt可以进一步提高prompt learning的性能,这些基于多个prompt的方法也称为multi prompt learning。** 按照不同的prompt之间的关系可以将multi prompt learning分为图中四种类型,在本章节中我们将围绕着这四种不同类型的方法依次展开介绍。
图1: multi prompt learning的四种不同类型
2 Prompt ensembling
**这应该是最容易被想到的一种集合多个prompt的方法了,类似了打比赛常用的将多种方法的结果融合到一起的集成学习。对于prompt ensembling而言,无论是离散型还是连续型的prompt,都可以通过这种方式集成到一起。Prompt ensembling有以下几个明显的优点。**
a) 可以利用不同prompt的优势实现互补。
b) 可以缓解prompt engineering中寻找一个最优prompt的繁重工作量。
c) 可以在下游任务表现得更加稳定。
2.1 Uniform averaging
最直观的prompt ensembling就是在预测时,同时计算多个prompt的概率然后求平均。 **Jiang et al. [1]首先根据多个prompt在训练集上的表现选择了其中表现最好的的TopK个prompt,然后在预测[MASK]位置的token的概率时就用这个TopK个prompt的预测概率求平均。而iPET [2]就更加直接,没有对prompt进行过滤,直接用多个prompt的预测概率求平均为没有标注的数据打上标签。BARTSCORE [3]在文本生成任务中也是考虑多个prompt下的平均预测得分。**
图2: Uniform averaging
2.2 Weighted averaging
简单的平均加权虽然很容易执行,但是也容易得到一个次最优的结果,因为不同prompt的效果参差不齐,平均加权忽略它们彼此之间的性能差异。 **为此,可以为不同的prompt赋予不同的权重,这个权重可以是用prompt在训练集上的表现而定,也可以去通过学习得到** 。Jiang et al.[1]就尝试过通过最大化训练数据中的预测概率去学习得到各个prompt相应的权重,如下图所示,概率计算第一部分的是跟prompt权重相关的参数,可以通过最大化整个目标函数去学习得到。
图3:Weighted averaging
Qin and Eisner[4]也使用同样的方法,但是它同时优化的不仅包括prompt的权重参数,还包括连续型prompt自身的参数。为了同时优化这两部分参数,采用了跟EM算法等价的训练方法,在E阶段去优化prompt权重的后验函数,在M阶段通过梯度去更新prompt的参数。Schick et al. [2][5]在PET相关的方法会在训练前给不同的prompt赋予不同的权重,这个权重可以是默认相同或者是根据prompt在训练数据中的表现而定,然后在后续的过程中就不会去改变权重了。
2.3 Majority voting
**对于分类任务,可以直接用Majority voting去联合多个prompt预测的结果。Majority voting跟前两者不同,不再是把不同的prompt预测的概率求平均或者加权平均,而是以大多数prompt预测的类别作为最终的结果。** Lester et al.[6]等人就发现联合5个prompt的majority voting的效果要优于五个prompt的平均或者其中最好的一个prompt的效果。Hambardzumyan er al.[7]也在实验中使用了20个prompt的majority voting策略。
2.4 Knowledge distillation
**多个深度学习方法的集成可以提高性能,同时,这优越的性能表现可以通过知识蒸馏到一个模型中去。Schick et al. [2][5][8]在半监督方法PET中就使用多个prompt来给无标注数据打上标签,然后再在这批打好标签的数据上训练一个新的模型,去学习得到多个prompt的知识。**
3 Prompt augmentation
**Prompt augmentation有时又称为模仿学习,它的思路跟GPT2的few shot做法极为相似,就是给出一些完整的样例(**[MASK]位置被正确预测了的完形填空,也称answered prompt)** ,跟当前的完形填空格式一同输入语言模型,这样语言模型就会按照那些完整的样例,照猫画虎,举一反三,对当前问题的[MASK]位置做出更加准确的预测。** 例如与其直接输入”China’s capital is [MASK]”,可以插入相关的样例得到”Japan’s capital is Tokyo. China’s capital is [MASK]”,再输入到语言模型中去做相应的预测。虽然这种方法非常朴素直观,但是这里有两个需要解决的问题
a) Sample selection:怎么选择那些最有效的样例?
b) Sample ordering:如何对选择的样例进行排序?
3.1 Sample selection
**最新研究已经发现样本的选择在few shot甚至zero shot场景下对于最终结果影响巨大,选择合适的样例作为增强的prompt可以达到几乎SOTA的效果,选择不合适的样例会导致接近随机猜测的水平。** 为了增强训练效果,Gao et al.[9]将当前需要预测的完形填空格式跟训练数据中不同类别下的完整完形填空样例拼接到一起输入到模型中去, **为了避免拼接的完整样例跟当前完形填空问题语义无关,先用sentence BERT去计算当前问题跟训练集中所有文本的句向量的余弦距离,然后在选择完整样本时只从跟当前问题相似度前50%的样例中进行抽样。**
图4: 利用训练数据作为增强的prompt跟当前完形填空内容(左边第一项)拼接
Liu et al. [11]在进行GPT3相关few shot实验时发现使用那些跟当前输入在语义上更接近的样例的效果会远远优于使用那些语义不相关的样例。同时尝试了不同的句子编码器来获取文本的表征,从而能计算当前文本跟训练数据样例之间的相似度而实现召回那些语义更接近的样例,拼接到当前文本中,比较最终效果的差异。 **最终发现在下游任务微调过的语言模型的效果更佳,同时也验证了使用语义相关的的样例要优于随机挑选样例的做法。**
图5:使用最相关的样例跟最不相关样例的结果差异
图6:不同句子编码器的效果对比
Mishra et al.做进行任务迁移时也尝试在prompt的基础上加上正向样例(让模型去模仿正向样例)跟反向样例(让模型去避免同样的错误),作为对任务的描述或者提示,最终实验验证了加入这些样例对于最终效果有一定提升[12]。
图7:一些prompt技巧的效果对比
3.2 Sample ordering
**研究表明完整的完形填空样例的排列顺序对模型的表现有关键影响。Kumar et al.[13]提出了PERO,通过遗传算法在训练样本中搜到到一个合适的样本排列(有顺序关系)作为增强的prompt,同时学习一个用于分割样例的新分隔符的表征,实验效果有明显的提升。**
图8: PERO流程
4 Prompt composition
**所有可组合的语言任务可以由多个基本的子任务组成,prompt composition利用多个子prompt进行组合,每个子prompt针对一个子任务,可以定义更加复杂的prompt。例如图1中的样例c,关系抽取任务可以由多个子任务组成,包括实体识别和关系识别,分别用相对应的子prompt分别去处理这些子任务,然后再把这些子prompt组合得到的prompt就可以处理完整的关系抽取任务了[10]。**
5 Prompt decomposition
**跟prompt composition刚好反过来,对于有些问题,想通过定义一个完整的prompt去解决会非常具有挑战,于是一个直观的做法就是将这个问题分解为多个问题,分别定义多个子prompt去分别处理。** 例如之前提到的命名实体问题,可以将文本划分为多个片段,然后用各个子prompt分别去识别这些片段是否是实体或者对应的是实体类型,最后汇总所有片段的结果即可[14]。 **个人感觉prompt composition跟prompt decomposition都是需要明确问题是由哪些子任务组成的,设计完相应的子prompt后再根据具体场景决定是用分解还是组合的方式解决。**
6 总结
**不难发现,这个章节涉及到的诸多multi prompt的文献都在之前的章节出现过,也就是说multi prompt其实算是在prompt learning中比较常见的做法了。它的优势很明显,众人拾材火焰高,能进一步提高在下游任务的效果。但是它的问题也很突出,多个prompt意味着更多的设计代价和更多的推理耗时。就像打比赛时我们可以集合很多的模型,但是在真正工业级应用时即便是要综合考虑多个模型的结果,也会对模型的数量有一定的限制。**
参考文献
- (2020, ) How Can We Know What Language Models Know?
- (2021, ) Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
https://arxiv.org/pdf/2001.07676.pdf
- (2021, ) BARTSCORE: Evaluating Generated Text as Text Generation
https://arxiv.org/pdf/2106.11520.pdf
- (2021, ) Learning How to Ask: Querying LMs with Mixtures of Soft Prompts
https://aclanthology.org/2021.naacl-main.410.pdf
- (2021, ) It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners
https://arxiv.org/pdf/2009.07118.pdf
- (2021, ) The Power of Scale for Parameter-Efficient Prompt Tuning
https://arxiv.org/pdf/2104.08691.pdf
- (2021, ) WARP: Word-level Adversarial ReProgramming
https://arxiv.org/pdf/2101.00121v2.pdf
- (2020, ) Few-Shot Text Generation with Natural Language Instructions
https://arxiv.org/pdf/2012.11926.pdf
- (2021, ) Making pre-trained language models better few-shot learners
https://arxiv.org/pdf/2012.15723v2.pdf
- (2021,) PTR: Prompt Tuning with Rules for Text Classification
https://arxiv.org/pdf/2105.11259.pdf
- (2021, ) What Makes Good In-Context Examples for GPT-3?
https://arxiv.org/pdf/2101.06804.pdf
- (2021, ) Cross-Task Generalization via Natural Language Crowdsourcing Instructions
https://arxiv.org/pdf/2104.08773.pdf
- (2021, ) Reordering Examples Helps during Priming-based Few-Shot Learning
https://arxiv.org/pdf/2106.01751.pdf
14 (2019, ) Template-Based Named Entity Recognition Using BART
https://aclanthology.org/2021.findings-acl.161.pdf
- (2021, ) Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing