文 | ZenMoore
编 | 小轶
自从 Dr.Pengfei Liu 的那篇 prompt 综述发表开始,prompt 逐渐红得发紫。近期清华、谷歌等单位你方唱罢我登场,涌现了好多好多 prompt 相关的论文。无论是工业界还是学术界,想必大家都在疯狂 follow。不少伙伴肯定从老板那里领到了 “prompt 技术分享” 的任务哈哈!
所以这篇文章先基于 7月份的 prompt survey 做一个简单扫盲,然后再为大家梳理一下其后 4 个月的 prompt 最新进展,共包括 15 篇论文。无论是作为大家调研 prompt 的 starter 也好,还是作为大家技术分享的 checklist 也好,希望都可以帮助到大家!
论文标题:
Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing
论文链接:
https://arxiv.org/abs/2107.13586
往期推文:
《Fine-tune之后的NLP新范式:Prompt越来越火,CMU华人博士后出了篇综述文章》
这篇就是入门必看的综述啦,非常精彩。这里做一个简单的概述。
NLP 的范式演进历程大体经历了这样四个阶段:
后两个范式是讨论的重点:
Prompt, 简单来说就是:将下游任务的输入输出形式改造成预训练任务中的形式,即 MLM (Masked Language Model) 的形式。
比如:对于情感分类,原有的任务形式是:输入:“今天天气好”
输出:“正面情绪”标签的判别结果
在 prompt 范式下,这会将输入改造为:输入:“今天天气好,我的情绪是\[MASK\]的。
输出:“开心”
当然,具体实现的时候,还需要一个额外的映射将“开心”识别为“正面情绪”标签。这个映射显然是比较简单的。
更加形式化的定义如下图所示:
形式化地讲,在 prompt 范式下,需要通过以下三个步骤建立从输入到输出的 pipeline。
相应地,在使用 prompt 时,主要从以下五个方面进行考虑。在我们阅读 prompt 相关论文时,也要先搞清楚这篇工作是着重解决了以下哪个方面的问题。
读完这篇 survey,基本就可以算是入门 prompt 了。强烈推荐大家看论文原文更为的详细梳理。
继这篇 survey 后,prompting 相关的论文更是层出不穷,常常一经发表就是爆款。相信大家肯定紧紧地跟住了时代的脚步,但难免记忆力跟不上看论文的速度:)
这里先给大家推荐几个 prompt 相关的资源。这几个网站持续更新着 prompt 的最新进展和开源代码,相信能有效帮助各位紧跟时事~
Prompting LeaderBoard
http://explainaboard.nlpedia.ai/leaderboard/prompting/
Homepage NLPedia
http://pretrain.nlpedia.ai/
Timeline of Prompt Learning
http://pretrain.nlpedia.ai/timeline.html
Follow-up : PromptPapers
https://github.com/thunlp/PromptPapers
Open-Source Framework : OpenPrompt
https://github.com/thunlp/OpenPrompt
接下来,我们也为大家梳理了今年 7 月以来的 15 篇最新 prompting 工作。如下表所示:
(注:以下所选工作按照 arxiv 发表时间进行排序。此处论文的选择可能有点主观,而且也不一定完全,仅作参考。相信在笔者所知之外,还有许多精彩工作。)
论文标题:
Cutting Down on Prompts and Parameters: Simple Few-Shot Learning with Language Models
论文链接:
https://arxiv.org/abs/2106.13353
既然设计模板那么费事,那么我们干脆就“自暴自弃”不设计模板好了。这篇文章就提出了所谓 null prompt 的方法,其实就是所有任务都用 input + [MASK]
的形式作为 prompt 模板。
Simplifying Prompt Engineering
第一个实验是:基于 prompt 的 finetuning (有 prompt, 进行 finetuning)
实验结论:
Prompt-Only Tuning
第二个实验是:自学习更好的 prompt 标识,不对 LM 进行 fine-tuning
上图中的 AutoPrompt 是指自动搜索离散 prompt。All Parameters 则是对 LM 做了 fine-tuning 的一组对照结果。
实验结论:Prompting 根本打不过 finetuning (不过作者说这可能并不矛盾,可能只是因为没有严格控制实验变量......)
Memory-Efficient
Adapters : 只调插入在 Transformer FNN 中的神经网络层。
Calibration : 在与 Verbalizer Tokens 相关的 logits 之上套一层仿射变换,只学习这个仿射变换。
BitFit : 只调 Transformer 的 bias 项。
LM Head Tuning : 只调与 Verbalizer Tokens 相关的输出层 embedding.
实验结论:BitFit yyds(永远的神) !
在 few-shot settings 下,最好的选择是:finetuning with null prompts and BitFit.
但是,这仅仅针对 MLM 而言。针对超大规模模型或者单向语言模型,需要进一步的研究。
论文标题:
Multimodal Few-Shot Learning with Frozen Language Model
论文链接:
https://arxiv.org/pdf/2106.13884.pdf
往期推文:
《学完文本知识,我就直接看懂图片了!》
如何使用冻结参数的语言模型进行多模态任务
一图胜千言:冻结 LM 参数,只调输出以及视觉的 Vision Encoder(图中粉色部分)。LM 使用的是自回归的语言模型。视觉编码器基于 NF-ResNet-50,但是在视觉编码器之上套了一层线性映射,让其变成 Vision Prefix,类似于 Prefix Tuning [1] 的 Prefix (不过这里的 Prefix 是可以训练的)。这样,Image 就可以转变成 LM 可以理解的形式。
实验表明,这个模型在 zero/one/few-shot 三种 Setting 下都能有比较好的效果。虽然不是 SOTA,但是思想非常有开创性!
另一个有意思的结论是:仅用语言训练的 Transformer 所含的知识可以迁移到其他模态任务中。
论文标题:
Knowledgeable Prompt-tuning : Incorporating Knowledge into Prompt Verbalizer for Text Classification
论文链接:
https://arxiv.org/abs/2108.02035
主要解决 Verbalizer 的构建问题(不清楚 verbalizer 是什么的同学,可以参考开头“prompt 概述部分”)。人工构建映射表肯定麻烦,也不是很够用,所以就要引入外部知识库来构建啦。
分为三步:
Verbalizer Construction:
使用 ConceptNet 或者 WordNet 等知识图谱,以目前的标签词为锚点,寻找其相邻节点的标签词作为 answer mapping 的 candidates。
Verbalizer Refinement:
上一步的 candidates 噪声还很多,分两种情况解决。
1、zero-shot setting :
KB 中的词汇在 PLM 的 OOV 中:对该词的各个 token 计算平均概率作为词的概率,然后使用阈值清理
PLM 中的稀有词概率不稳定,如何去掉:计算上下文先验(contextualized prior)。(公式见下)这里 是句子, 是 template, 表示一个人为定义的小的未标注的 support set. 然后使用阈值清理。
由于 KB 中词汇的先验分布不同,一些词汇天然地更不可能被预测到:使用上下文校正(contextualized calibration, CC)
2、few-shot setting :
Verbalizer Utilization:
得到了去噪的候选词列表之后,下面就要决定怎么把 label words 映射为 class label 啦!
论文标题:
The Power of Scale for Parameter-Efficient Prompt Tuning
论文链接:
https://arxiv.org/abs/2104.08691
这篇工作有两种常用的简称 : soft prompt/prompt tuning, 鉴于后者容易和广义的 Prompt Tuning 混淆,我们使用第一种 —— soft prompt。
对 prefix tuning 的进一步简化 : prefix tuning 会训练所有与 prefix prompt 相关的层。而这篇文章 : 针对每个下游任务,只调输入文本前面的一些 tokens (soft prompt)。另外,这篇文章还提出了 Prompt Ensembling。
论文标题:
Avoiding Inference Heuristics in Few-shot Prompt-based Finetuning
论文链接:
https://arxiv.org/abs/2109.04144
在进行 sentence pair classification 的时候,如果是 few-shot setting, 使用 prompt-based finetuning 很容易产生启发式推理(Inference Heuristics)的问题(即:模型假设具有相同单词集合的句子会带有相同的意思), 然而这个问题在 zero-shot setting 下不会出现,所以可以说 finetuning 对 PLM 中的知识产生了很大的负面影响(灾难性遗忘),因此,作者旨在解决 few-shot setting 下 prompt-based finetuning 的上述问题。
总的来说就是,基于弹性权重巩固 (EWC) [2] 对 prompt-based finetuning 进行正则化。熟悉终身学习的应该对 EWC 不会陌生,它建立在 Fisher 矩阵之上专门用来解决灾难性遗忘问题。当然,Fisher 矩阵的计算需要一部分预训练数据,为了躲开这个,我们假定 Fisher 信息和对应的权重具有很强的独立性,这样,总的损失函数就变成了:
( =finetuning, =标准交叉熵损失)。优化器的实现使用的是 RecAdam[3].
论文标题:
PPT: Pre-trained Prompt Tuning for Few-shot Learning
论文链接:
https://arxiv.org/abs/2109.04332
在数据足够的情况下,Prompt Tuning 和 Finetuning 效果差不多,但是在 few-shot setting 下,prompt 的表现很不好,作者认为是因为 soft prompt initialization 的问题,因此,如果把 soft prompt 也放在 pre-training stage 里面,以获得一个更好的 initialization, 是不是更好一点?
主要是四点结论:
定义 个任务集合 ,每个任务集合 包含 个 pattern-verbalizer pairs (i.e. , f指 pattern(template), 指 verbalizer), 然后,为每一个 任务集合 定义一个预训练任务 . 举个例子:
任务集合:{句对分类,多选分类,单句分类},每个元素就是一个 PVP
预训练任务:NSP (Next Sentence Prediction)
关于 PVP 的设计,遵循 template-verbalizer 人工设计的一般方法,不再赘述。
值得一提的是,显然例子中的三个任务是可以用一个统一的 template 表示的,思路也很简单(因此也不再赘述),作者称这种使用统一 pattern 的 PPT 为 Unified PPT.
还有一种是 Hybrid PPT, 即 hard prompt + soft prompt
论文标题:
PTR: Prompt Tuning with Rules for Text Classification
论文链接:
https://arxiv.org/abs/2105.11259
人工构造 pattern 太繁琐,自动构造的话,一方面效果比不上人工构造,另一方面还引入了额外的计算(生成+有效性验证)......
那能不能使用规则给 prompt 的构建加入一些先验知识呢?
以 Relation Classification 为例:
首先把该 task 转变为一系列 conditional functions 的逻辑计算,如:
其中, 表示 subject entity 是否是一个 person
表示 object entity 是否是一个 person
表示 和 的关系是否是 parent
然后为每一个 conditional function 设计一个 sub-prompt, 老规矩,它由 template 和 verbalizer 构成:
例如:
最后我们把不同的 conditional functions 的 sub-prompts 组合成一个任务特定的 prompt, 例如:
总之就是,为每个 conditional function 人工设计一个相应的 sub-prompt. 然后,conditional functions 的逻辑运算就体现在 sub-prompts 的 composition 上。
总之,预训练可以给 PLM 引入很多任务特定的知识,但是如何激发他们很重要!这里,PTR 的方式比 finetuning 方式更加有用!
论文标题:
CPT: Colorful Prompt Tuning For Pre-Trained Vision-Language Models
论文链接:
https://arxiv.org/abs/2109.11797
视觉-语言预训练模型 (VL-PTMs) 也存在和 PLMs 一样的问题:预训练任务和下游任务的 gaps. 能不能把 prompting 引入 VL-PTMs 里面呢?
prompt design 的核心问题是:如何用语言描述图像?
visual sub-prompt : segmentation 不是经常用颜色标注吗?那么我们就用颜色标注图像的各个 region, 然后颜色用语言描述出来就好了。于是有了 visual sub-prompt : (其中, 表示图像的 regions 集合, , 是 RGB 值, 是颜色的语言描述比如"red").
textual sub-prompt :
在实现细节上,一方面需要考虑选取哪些颜色,所以需要用候选集做一个 prompt search;另一方面,需要考虑怎么划分 region,所以需要把 image region 划分成一些 batch 处理...... 更详细的建议看开源代码。
论文标题:
Revisiting Self-Training for Few-Shot Learning of Language Model
论文链接:
https://arxiv.org/abs/2110.01256
就是题目中的设定,怎么在 few-shot 下提取 PLM 中蕴含的海量 unlabeled data 的信息(知识)。
为了解决这个问题,作者设计了一种基于自训练 (self-training) 的 prompt 方法。
设定是:有一小部分已标注的数据,然后还有更小一部分未标注的数据 (few-shot),然后利用他们做分类任务......
好,从损失函数讲起吧: , 其中三项分别是监督损失、自训练损失以及自监督损失。
监督损失(针对已标注数据)就是以前的 prompt-based tuning 那一套(即 template + verbalizer 等等),这篇论文的新颖点主要是后面两项(针对未标注数据):
论文标题:
Finetuned Language Models are Zero-Shot Learners
论文链接:
https://arxiv.org/abs/2109.01652
往期推文:
《别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!》
另简称 : Instruction Tuning
改善语言模型的 zero-shot 学习的能力。
作者先收集整理了一系列任务集合(task cluster),每个任务集合包含若干特定的数据集,有 NLU,也有 NLG,之后的 instruction tuning 就是在若干 task clusters 上训练的。
tuning 方法有点像 GPT-3 的那种 prompting, 但是又有区别:
论文标题:
Differentiable Prompt Makes Pre-trained Language Models Better Few-shot Learners
论文链接:
https://arxiv.org/abs/2108.13161
是面向工业界的一个改进。在工业落地上,主要有两个问题:一方面模型规模太大了,部署成本太高;另一方面 prompt design 的成本也太高了。因此,作者设计了 DifferentiAble pRompT (DART),具备 pluggable、extensible、efficient 的特点,并且在不需要 prompt engineering 的情况下,也能增强小规模语言模型的小样本学习能力。
Class Discrimination Objective :
Fluency Constraint Objective : , 是在词表 上的概率分布(用 softmax 计算)
设 是原来的词表,为了避免引入额外的参数,我们用 中未使用的 token 替换 (template token embedding) 然后生成新的词表 .
总 :
第一个损失函数是 label optimization 的过程,这在之前已有的 prompt tuning 方法中也不常见,因为这里的 answer 相当于也是在一个连续的空间里面。
第二个损失函数的设置主要是为了保证 template token embedding (可训练)与其上下文的相关性,这在 P-tuning 方法中通过双向 LSTM 解决,而本文的方法,没有引入额外的参数与模型,单使用一个损失函数,就解决了问题。另外,这里使用的是 ground-truth label...... (感觉是不是会泄露一部分标签信息啊?)
论文标题:
P-Tuning v2: Prompt Tuning Can Be Comparable to Finetuning Universally Across Scales and Tasks
论文链接:
https://arxiv.org/abs/2110.07602
之前的 soft prompt (google) 和 P-tuning [4] 只对大模型有效,而且也仅仅用于解决一些简单的 NLU 任务。
因此这个工作主要是扩展之前的 P-Tuning:适配小模型,适配复杂的 NLU 任务 (如序列标注等)。
其实比起 P-tuning 或者 Google 的 soft prompt 的方式,这个更类似于 prefix tuning, 即和 prefix prompt 相关联的一系列层都能调。一图胜千言:
另外几点考虑是:
论文标题:
Exploring Low-dimensional Intrinsic Task Subspace via Prompt Tuning
论文链接:
https://arxiv.org/abs/2110.07867
IPT = intrinsic prompt tuning.
为什么 PLM 可以做好多好多不同的下游任务?这篇文章旨在探索每个下游任务的低维本征子空间 (intrinsic task subspace).
这个问题的一个解释是:PLM 对一个特定任务的适配可以重参数化为一个低维的任务特定的优化子空间,只需要优化这一部分参数,就能够适配下游任务。这样的话,PLM 就是一个通用的压缩框架,把不同任务的学习复杂度从一个高维的空间压缩到了一个低维的空间。
怎么做实验呢?用 prompt tuning !
论文标题:
SPoT: Better Frozen Model Adaptation through Soft Prompt Transfer
论文链接:
https://arxiv.org/abs/2110.07904
还是为了增强模型在不同任务上的泛化性能,不过是基于 Prompt Tuning.
换句话说:Transfer Learning + Prompt Tuning.
另外,在 task embedding 上也有一些有意思的结论:
论文标题:
Multitask Prompted Training Enables Zero-Shot Task Generalization
论文链接:
https://arxiv.org/abs/2110.08207
快去打开 arxiv,感受一下什么叫做:鸿篇巨制......
大模型具有很好的零样本泛化能力 (zero-shot generalization),这取决于它隐式的多任务学习机制(也就是 GPT-3 的那种外循环机制)。
那么能不能通过显式的多任务学习机制(即带有 prompt engineering) 来激发大模型的零样本泛化能力呢?
这张图就是 T0 的基本思想,然后具体的实现方法上,讲求两个关键:粗暴!协作!
先说怎么个粗暴法:多任务数据集达 171 个,Prompt 达 1939 个,模型也是超大的(T5, 11B)!
当然,粗暴这一点咱们见怪不怪,毕竟前面已经有 GPT-3 啦~
但是这个协作方式感觉更有意思:42 位作者来自于 20 多家不同的机构,甚至来自于将近 10 个不同的国家!
据小编调查,这些大牛们是通过 Github、Notion 等等进行协作的,定期还要开个视频会议什么的,在 BigScience 的 notion 上可以看到他们的一些管理条例等等。
属实一番科幻片里面才有的协作方式哇!
Prompt 作为热点,学术界工业界都在讨论。感觉 prompt 的贡献主要在于三点:低资源场景 (few-shot/zero-shot),低算力场景 (parameter-efficient) 以及统一场景(把各种各样的问题统一成一套 prompt). 然后根据上文按照时间顺序的详细梳理,不难发现 prompt 的发展趋势:多任务、多 prompt、任务 specialization 以及各种各样的锦上添花。当然,prompt 还方兴未艾,仍然有很多疑问需要探索:在学术界,prompt 究竟告诉了我们什么,PLM 到底蕴含着怎样的力量,如何彻底激发出来,或者 PLM 本身路在何方?在工业界,prompt 究竟该如何落地,相比于 finetuning 是否真正具有决定性的优势?希望这篇长文能够带给你更多的思考......
1. 《Fine-tune之后的NLP新范式:Prompt越来越火,CMU华人博士后出了篇综述文章》
2. 《学完文本知识,我就直接看懂图片了!》
3. 《别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!》
4. 《格局打开,带你解锁 prompt 的花式用法》
萌屋作者:ZenMoore
来自北航中法的本科生,数学转码 (AI),想从 NLP 出发探索人工认知人工情感的奥秘... 个人主页是 zenmoore.github.io, 知乎 ID 是 ZenMoore, 微信号是 zen1057398161, 嘤其鸣矣,求其友声!
作品推荐
后台回复关键词【入群】
加入卖萌屋NLP/IR/Rec与求职讨论群
后台回复关键词【顶会】
获取ACL、CIKM等各大顶会论文集!
[1] Li, X., & Liang, P. (2021). Prefix-Tuning: Optimizing Continuous Prompts for Generation. ArXiv, abs/2101.00190.
[2] Kirkpatrick, J., Pascanu, R., Rabinowitz, N.C., Veness, J., Desjardins, G., Rusu, A.A., Milan, K., Quan, J., Ramalho, T., Grabska-Barwinska, A., Hassabis, D., Clopath, C., Kumaran, D., & Hadsell, R. (2017). Overcoming catastrophic forgetting in neural networks. Proceedings of the National Academy of Sciences, 114, 3521 - 3526.
[3] Chen, S., Hou, Y., Cui, Y., Che, W., Liu, T., & Yu, X. (2020). Recall and Learn: Fine-tuning Deep Pretrained Language Models with Less Forgetting. EMNLP.
[4] Liu, X., Zheng, Y., Du, Z., Ding, M., Qian, Y., Yang, Z., & Tang, J. (2021). GPT Understands, Too. ArXiv, abs/2103.10385.
[5] Raffel, C., Shazeer, N.M., Roberts, A., Lee, K., Narang, S., Matena, M., Zhou, Y., Li, W., & Liu, P.J. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. ArXiv, abs/1910.10683.
[6] Khashabi, D., Min, S., Khot, T., Sabharwal, A., Tafjord, O., Clark, P.E., & Hajishirzi, H. (2020). UnifiedQA: Crossing Format Boundaries With a Single QA System. FINDINGS.
[7] Hambardzumyan, K., Khachatrian, H., & May, J. (2021). WARP: Word-level Adversarial ReProgramming. ACL/IJCNLP.
[8] Houlsby, N., Giurgiu, A., Jastrzebski, S., Morrone, B., Laroussilhe, Q.D., Gesmundo, A., Attariyan, M., & Gelly, S. (2019). Parameter-Efficient Transfer Learning for NLP. ICML.