前几天自然语言处理课学到了“预训练语言模型”这一章,在最后老师介绍了今年刚刚提出来的Prompt,并强调:这东西现在很火,想发论文的赶紧行动。由于和我的研究方向相关,因此打算对Prompt做一个系统的调研。我们现在开始吧!
目录
- 从四大范式到Prompt
- 第一范式:特征工程
- 第二范式:架构工程
- 第三范式:目标工程
- 第四范式:Prompt挖掘工程
- 举例1.二分类
- 举例2.多分类
- 举例3.匹配任务
- 第三范式与第四范式的关系
- Prompt最大的优点:少/零样本
在NLP的发展过程中,经历了4大范式,这里的范式不禁让人想起数据库中学到范式,可不要想多了哦,所谓的范式就是指建模方式。
非神经网络时代的完全监督学习:在概率统计时代,靠人工来进行大量的特征提取,依赖于大量的监督数据。
基于神经网络的完全监督学习:来到了深度学习时代,实现了自动获取特征来进行端到端的分类,但是仍然需要人工来设计合理的网络结构,模型的性能也依赖于大量数据集
预训练-精调范式(Pre-train,Fine-tune):第三范式也是目前正流行的一种建模方式。它分为两个阶段:
由于预训练完成之后,这个“博学多才”的语言模型并不是什么都会,所以在fine-tune阶段,最重要的工作是✨:引入一些额外的参数,对这个模型进行微调,让他适应于下游的分类任务。
因为频繁提到了“预训练语言模型”这个词,因此有必要在这里做一个简单的补充。已经理解了的读者可以跳过这一小段~
以Bert为例:
Bert是一个堆叠的双向Transformer Encoder,有自己的输入输出和隐藏层,是一个完整的结构。下面以下图为例说明Bert的训练和预测过程:
在prompt出来之前,预训练思想也被用来解决很多小样本场景的问题。这是因为,获取大量无标签的文本数据相对简单,获取有标签的训练数据相对困难,而预训练方式只需要在第二阶段fine-tune时使用少量的有标签数据就可以达到直接用大规模数据训练的效果。
此处再插播一个冷知识:在很多关于预训练语言模型的论文或者博文中,你是不是经常看到这些动画人物呢?
这些动画人物是《芝麻街》中的角色,这是美国的一档少儿教育节目,还有一系列的动画电影等,是美国人家喻户晓的动画人物了。从左到右依次是:ERNIE,ELMo,BART,BERT。有没有发现华点呢?这正是目前流行的四个语言模型的缩写。
只能说这些科学家们用心良苦。
预训练,提示,预测范式(pre-train,prompt,predict):第四范式一经提出就在NLP领域受到了极大的关注,Prompt思想也被认为是一个趋势。
简单来说,prompt 将下游的输入输出形式改造成预训练任务中的形式(重构下游任务)。这里的“改造形式”是什么意思呢?在上文中笔者简介了善于完形填空的Bert,下面我们以Bert为例,举几个Prompt对下游任务进行重构的例子:
在原来的模型中,我们这样定义这个分类任务:
在Prompt中,我们把上述任务重构为一个完形填空问题:
当然这里需要通过一些手段,限制Bert只能在这个位置预测出“很”或者“不”,另外还需要将“很”对应为正向标签,将“不”定义为负向标签。以上,经过对下游任务的重构,不需要对Bert进行fine-tune即完成了任务。
将这个任务重构为完形填空问题:
与上一个二分类问题不一样,这了的输出{体育,娱乐…}直接就是分类标签,无需再进行输出与标签的映射
将这个匹配任务重构为
Fine-tuning中:是预训练语言模型“迁就“各种下游任务。具体体现就是通过引入各种辅助任务loss,将其添加到预训练模型中,然后继续pre-training,以便让其更加适配下游任务。总之,这个过程中,预训练语言模型做出了更多的牺牲。
Prompting中,是各种下游任务“迁就“预训练语言模型。我们需要对不同任务进行重构,使得它达到适配预训练语言模型的效果。总之,这个过程中,是下游任务做出了更多的牺牲。
可以看到无论是谁迁就谁,本质上都是预训练模型与下游任务越来越靠近。刘鹏飞博士在知乎回答的最后有这样一段话发人深思:Prompting本身不是目的,它是一种让下游任务和预训练语言模型更加接近的途径,如果我们有其他更好的方式,那就可以引领下一个范式,近代自然语言处理技术的发展史本质上(可能)是下游任务与预训练语言模型关系的变迁史。(膜拜大佬)
前面我们提到Prompt的思想是重构下游任务来适配预训练语言模型,不需要对预训练语言模型进行任何fine-tune。但是为了达到让“预处理模型与下游任务靠近”的目的,在有条件的情况下,也可以即重构下游任务,又对预处理模型进行fine-tune。(比如在一些应用场景中,可以很轻松得到大量有标注数据以供fine-tune,此时就可以尝试一下除了使用Prompt之外,再微调LM是否能获得更好的效果)
在基于Prompt的下游任务学习中,通常存在两种类型的参数,即来自预训练模型的参数和Prompt的参数。根据(i) 底层LM的参数(LM params)是否被调优,(ii)是否有额外的与Prompt相关的参数(Additional),(iii)如果有额外的与提示相关的参数,这些参数是否被调优,总结了5种调优策略(如下图所示)。
先来看第二个策略:Tuning-free Prompting, 根据表格可以看到这种策略不需要对LM参数进行微调,不需要额外的Prompt参数,没有任何参数的更新,因此这个策略最大的优点就是完全不需要任何有标注数据来更新模型参数,所以会适用于零样本的场景。
再看第三个策略:Fixed-LM prompt Tunning,这种策略不需要对语言模型进行任何参数调整,只需要少量标注数据对Prompt相关参数进行调整即可,适合与少样本场景。
Prompt确实为少样本和零样本场景提供了新的解题思路,不过也只使用于特定的应用场景,并不是每一种Prompt策略都适合在零/少样本场景下使用(可不要误解了哦~)
参考:
Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing:https://arxiv.org/abs/2107.13586
https://mp.weixin.qq.com/s/vyKCCjAEbuOxpKOd6zhz3w
国科大胡玥老师自然语言处理课件
刘鹏飞博士知乎回答:https://zhuanlan.zhihu.com/p/395115779
通过这一篇博客,读者应该了解到了NLP范式的发展过程,以及了解到了Prompt适用于零样本的原因,关于Prompt的细节会在下一篇博客中介绍:
详细介绍:红到发紫的Prompt是什么?【下】