最近几个月,Prompting逐渐成为NLP领域的新研究热点,笔者将在文中介绍Prompt Learning的一些基本知识、研究问题以及经典工作,带大家入门Prompt Learning。(注:题图来源于《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing》)
作者简介:刘宇辰,硕士二年级,来自中国人民大学信息学院AI·M³实验室,研究方向为多模态情感计算。
目录:
1. Prompt Learning基本知识
2. Prompt Learning中的经典工作:
① 基于离散模板的Prompt [1] [2]
② 基于连续模板以及前缀的Prompt tuning [3-6]
③ 题外话:Prompt tuning与其它Adapter方法[7-8]
href=””>一、 Prompt简介
1. 定义
简单来说,Prompting指的是在文本上附加额外的提示(Prompt)信息作为输入,将下游的预测等任务转化为语言模型(Language Model)任务,并将语言模型的预测结果转化为原本下游任务的预测结果。
例如:使用预训练语言模型(PLM)对I love this movie进行分类,判断说话人对电影的情感倾向。对于传统的Fine-tuning范式,以BERT为例,我们会使用PLM提取[CLS]位置的特征,将其作为句子的特征,并对情感分类任务训练一个分类器,使用特征进行分类;而对于Prompting范式,它的流程分为三步:
① 在句子上添加Prompt。一般来说,Prompt分为两种形式,分别是完形填空(用于BERT等自编码PLM)与前缀(用于GPT等自回归PLM)。在这个例子中分别是:
I love this movie. It is a [MASK] movie. (完形填空)
或 I love this movie. The movie is (前缀).
② 根据Prompt的形式,在[MASK]位置或Prompt前缀的后面预测单词.
③ 根据预先定义的Verbalizer将单词转化为预测结果,若预测单词’Good’则情感倾向为正向,若预测结果为单词’Bad’则情感倾向为负向。
2. Prompt的优点:
① 将多种下游任务转化为Language Model问题,使得下游任务接近预训练中的LM / MLM任务,挖掘模型的潜力,体现在两方面:首先,可以通过prompt的形式使得特征更符合下游任务场景,提高特征质量;其次,不需要针对下游任务重新训练一个分类器,可以用到训练好的语言模型分类器。
② 由于下游任务与预训练任务接近,因此prompt在下游任务上需要的训练更少,在few-shot / zero-shot场景下表现优秀。同理,在需要节约训练参数量(Parameter-efficient)的场景下也有不错的表现。
3. Prompt的研究问题:
目前Prompt主要需要研究的问题有以下几种。
① 如何选择合适的Prompt: Prompt Engineering (手工模板 / 自动搜索模板 / 连续向量作为模板)
② 如何将LM的预测结果映射回下游任务:Answer Engineering (选什么词 / 选几个词再综合结果)
③ Multi-Prompt Learning (将多种prompt应用于问题,达到数据增强或问题分解等效果)
④ 如何基于任务选择合适的预训练模型
⑤ 如何调整Prompt的训练策略:全数据下单纯提高模型效果,或者few-shot / zero-shot下使用prompt作为辅助,或者固定预训练模型,只训练。
二、 基于离散模板的Prompt
1. PET – Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
这篇工作是Prompt研究领域最早的工作之一,PET使用了基于手工设计模板的Prompt,并做了简单的prompt ensemble,将多种prompt集成在一起获取最终的预测结果。

值得一提的是,PET在计算Loss时主要计算了目标词的Cross Entropy,忽略了词表中的其它备选词,并将MLM Loss作为辅助。在后续的prompt工作中一般认为这样是存在缺陷的,并且改为使用原本的、针对所有词进行约束的MLM Loss.
href=””>2. AutoPrompt – Eliciting Knowledge from Language Models with Automatically Generated Prompts
之前的PET等Prompt方法存在着一些问题,由于手工模板设计难度较大、基于经验,且模板微小的变动就可能导致模型性能的大幅度下降,如下图所示。

为了解决这一问题,本文提出了一种自动搜索模板的方法,具体流程如下:
① 预先确定一个template长度,用[mask]初始化[T];
② 每次修改一个[T]为另一个token, 选择引起模板的likelihood变化最大的k个token作为该位置的候选tokens, 随后再用该位置的每个候选tokens计算预测准确率,保留准确率最高的template.
③ 自动构建verbalizer:对每个类别训练一个二分类器,使用[MASK]位置的特征预测句子是否属于某个类别,随后再用MLM预测若干个tokens,对于每个类别,用类别的分类器预测这些tokens属于这个类别的概率,概率最大的k个tokens作为类别的目标词。

AutoPrompt在一定程度上解决了手工构建模板困难、效果不稳定的问题,可以看到,本文方法自动构建的模板已经脱离了人类理解的自然语言,这说明对PLM来说,最好的Prompt内容未必是与人类理解相同的。
三、基于连续模板的Prompt(soft prompt / prompt tuning)
虽然AutoPrompt等工作对模板的构建进行了改进,提出了自动搜索模板tokens的方法,然而这些方法仍然存在效率低、不稳定的问题,换而言之,选择离散的tokens作为模板,这些tokens所提供的信息未必是最适合当前场景的。为了穷尽Prompt的潜力,接下来的工作通常使用连续向量作为prompt模板,并通过梯度下降的方式训练模板向量,从而使得提示信息更加契合当前场景,提高prompt的效果。下面笔者将介绍几篇经典的soft prompt工作。
1. P-Tuning – GPT Understands, Too
这篇文章是最早应用soft prompt的工作之一,文章的标题很有趣,基于GPT结构的PLM一般被认为只擅长自然语言生成(NLG)类的任务,而在自然语言理解(NLU)的任务上差于基于BERT结构的PLM。然而,本文提出的prompt向量生成与训练方法,一方面提高了模型在NLU任务上的整体表现,另一方面也使得GPT能在NLU任务上达到比肩甚至超过BERT的效果,证明了prompt可以激发生成式模型的NLU潜力。
本文的Prompt生成比较简单,对于固定的模板长度,本文只是通过常规的梯度下降训练若干个prompt向量,并将这些prompt向量通过一个LSTM,得到最终的连续模板。此外,对于问题中的一些关键词,本文将它们的tokens保留在模板中,例如在识别首都的任务中的单词capital。这里的LSTM是一个重参数(Reparameterization)的技巧,可以提高训练速度,作者承认这个LSTM并不重要。

在superGLUE以及一些NLU任务上,本文方法的效果既超过了fine-tuning,又超过了基于手工模板的prompt;在knowledge probing任务上,即使固定住了PLM的参数,仅仅训练prompt向量,本文的方法仍然可以超过fine-tuning。
2. The Power of Scale for Parameter-Efficient Prompt Tuning
P-tuning表明,在PLM的所有参数参与训练的情况下,soft prompt可以很大程度上提高fine-tuning的效果;而在固定PLM参数、只训练prompt的时候,soft prompt可以在特定任务(如few-shot场景)上超过fine-tuning. 而本文基于类似的思路设计soft prompt,并针对模型规模与Prompt Tuning效果之间的关系进行了详细分析。

可以看到,在PLM参数固定的情况下,对于越大规模的PLM,prompt tuning与fine-tuning的性能差距越小,而在参数量达到10B的规模下,prompt tuning终于达到了匹敌fine-tuning的性能。对于足够大的模型,仅靠prompt tuning就能在SuperGLUE这样的非few shot场景下达到匹配fine-tuning的水准,这展现了prompt tuning的研究前景。
3. Prefix-Tuning: Optimizing Continuous Prompts for Generation
Prefix-Tuning的出发点和方法与p-tuning异曲同工,同样是基于Prompt的启发,并想要改进离散prompt中的种种问题。不同的是,p-tuning是在输入层加入额外的prompt向量作为输入,而prefix-tuning则是在Transformer的每一层最前面都加入一些可以学习的前缀向量。类似p-tuning,每个前缀向量后面会接一个MLP作为重参数方法。

Prefix tuning提出了一种形似prompt,实际内核却有些类似adapters的方法。这篇工作仅仅训练了prefix部分,却在NLG任务上取得了与fine-tuning可比甚至更好的表现。
4. P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
前几篇工作已经证明了不固定PLM的prompt tuning在few shot与full data的场景下可以超越fine-tuning,而第二篇工作[4]证明了在固定PLM的情况下,对于大模型,prompt tuning也可以匹配fine-tuning. 那么对于中小模型,prompt tuning如何达到类似的效果?

本文提出了p-tuning v2的方法,实际上就是prefix tuning,只不过那篇做的是NLG任务,而这篇则将其扩展到NLU任务。除此之外,本文做出了以下优化:① 去掉了前缀后面连接的MLP ② 改回了用[cls] 和 特征分类的方法进行分类,而不是verbalizers ③ 加入了multi-task learning,使得模型更具通用性.

这篇文章基于小模型、全数据场景下的NLU任务,在此基础上只训练prefix,最终实现了与fine-tuning比肩的效果,这比之前的结论更进一步,说明这种prompt tuning在小模型上也能实现足够好的性能。
至此,prompt 中关于prompt设计的经典工作已经介绍完毕,这种形式基本上是目前prompt的最终形态,实现了足够小的PLM、足够少的训练参数与足够好的性能。然而,在Transformer的每一层加入prefix、使用连续的prompt向量、去掉verbalizers,这篇文章的形式已经与最初的prompt相去甚远。这种改变到底是解释了prompt的本质,还是与原本的prompt不同的另一种道路,笔者将在下一节的题外话中简单讨论一下。
四、题外话:Prompt Tuning与adapters
1. NULL Prompt – Cutting Down on Prompts and Parameters: Simple Few-Shot Learning with Language Models
这篇文章提出了一种有趣的方法,直接简化掉了Prompt中较为复杂的模板设计部分,改为直接在句子后加一个[MASK]标志进行预测,当然相比手工设计的模板性能有所下降,但是却与普通的fine-tuning相当,甚至更高。
本文中值得注意的是另一点,作者并没有使用prompt tuning的微调方式,而使用了另一种parameter-efficient的训练策略-BitFit,即只微调Transformer中的bias项,此时的微调参数甚至还要远小于prompt tuning。然而,在few-shot的设置下,bitfit取得了超过full-finetuning的效果,而在作者的实验设置中,fine-tuning的效果还要略胜于prompt tuning.


经过两组实验的对比可以发现,BitFit在这种few-shot场景下,效果是明显优于Prompt Tuning的。排除作者的实验setting问题,作为一种paramet-efficient的训练方法,prompt tuning所需的参数量更多,效果却被BitFit比下去了,这展现出了Prompt tuning在节约参数以及few-shot场景下,相对于其它方法的一些劣势。
2. TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING
上一篇文章对比了prompt tuning与BitFit之间的性能差异,而这篇文章针对了上文中性能最好的prompt策略 – prefix tuning,以及其他adapters方法进行了分析。有趣的是,本文通过公式推导,证明prefix tuning仅仅是adapters加入了scale更新的一种特殊形式:



在这样的分析之下可以发现,prefix tuning与adapter的差距只在于修改的是attention前还是attention后的特征表示、修改是针对整体特征还是每个attention head的特征、修改是否有scale。论文分析表明,prefix的效果确实比adapter更加高效,但可以通过修改adapter的结构达到类似的效果,而此时prefix tuning只是一种比较高效的parameter-efficient策略而已,与原本的prompt思路已经相去甚远了。
题外话到此为止,这两篇文章的分析表明,虽然prompt tuning 与 prefix tuning可以达到优于手工模板的效果,但它们似乎已经脱离了prompt的理念,从原理上更加接近BitFit和Adapter等结构了。
五、结论
本文分别介绍了Prompt的基本知识、基于离散模板的prompt、基于连续模板的prompt,希望可以带读者了解关于prompt设计的经典工作与进展。此外,希望本文最后讨论的prompt以及adapters之间的关联也能给读者带来一些思考,如今的prompt tuning虽然可以达到不错的性能,但在应用以及训练策略等方面仍然存在问题,或许prompt 研究领域还存在着prompt tuning之外的、符合原始prompt思路的方向。
免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:一文了解Prompt的基本知识与经典工作-promput https://www.bxbdf.com/a/142580.shtml