Prompt范式的缘起|Pattern-Exploiting Training

卷友们好,我是rumor。

我感觉我被卷到了。

昨天Prompt突然刷屏,我才知道有这么个事儿,还什么都没有学,人家领域综述都写好了。

说好了要当走在AI前沿的姐姐,这怎么能忍???

于是我赶紧上知乎学习,并且创建了Prompt文件夹,连下几篇paper,大概缓解了16%的焦虑。

但刷了几篇博客后觉得自己对背景的理解还是不够,于是决定从头看起。今天就来记录下自己读PET的一些收获。

Prompt的思想,我理解就是设计不同的输入形态,激发语言模型的潜力,得到任务相关的输出,从而避免精调模式带来的灾难性遗忘问题。引用下CMU的刘鹏飞博士放在博客里的图:

他的综述想必大家都知道了,也推荐去读下他自己的博客:

博客:https://zhuanlan.zhihu.com/p/395115779
综述:https://arxiv.org/abs/2107.13586

Prompt的做法,从任务形式来说可以分为两种:

  1. 续写Prefix:用在GPT2-3那种单向LM预训练模型上,输入「好好学习,翻译成英文:」,输出「good good study」
  2. 完形填空:用在BERT那种MLM式预训练模型上,比如情感分类任务可以输入「这个饼不错,太X了」,输出「棒」

我最早是从GPT2知道第一种方法的,第二种之前WWM在探究知识存储能力的时候看到过,偏信息抽取任务,给定Subject和关系,模型给出Object,很好理解,也不用对输出进行特殊处理。

Prompt最近的突然兴起,主要是因为学者们把任务扩展到了NLU,之前大部分人听说的是做生成和信息抽取,而在统一了方法之后,现在可以做分类任务和匹配任务了,同时在少样本甚至正常场景,能追上精调的效果

其实对于这个新范式,核心idea还是很好理解的。难就难在:

  1. 怎么样选取合适的Prompt,适配不同任务,同时把模型潜能激发出来
  2. Answer实际上是不可控的,拿到answer后如何往标准化的Y映射
  3. 怎样利用Prompt机制精调一下模型

所以今天,我们就来看看Prompt范式的「开篇之作」PET,究竟是如何解决这些问题的。

Prompt的选取

PET针对不同任务手动设计了不同的Prompt,比如Yelp用户评价星级预测(a是句子):

MNLI句间关系推理(a、b是句子):

PET这里可以参考的地方有两点:

  1. 给出了分类任务、匹配任务的Prompt设计样例,让预训练模型可以做NLU任务
  2. 每种任务都给了多个Prompt,毕竟模型预训练时见到的句子太多了,谁也不确定哪种Prompt能从黑盒里捞出什么,用多种输入后再进行整合是比较保险的方式

其实手动设计不是高效的方式,同时期还有一篇LPAQA[1],主要探索了信息抽取任务自动化挖掘Prompt和答案整合方法,但LPAQA主要关注信息抽取领域,感兴趣的同学可以看下。

Answer的映射

对于答案也是手动定义,直接定义一个label到word的映射v。比如在做文本相似度任务时,让1=Yes0=No,这样直接看该单词的logits就能预测出结果的概率了。

在Yelp评价预测中,定义了五个映射:

在MNLI句间关系推理中,定义了多种映射:

训练范式

解决了输入和输出的不可控问题之后,接下来就是PET的重头,也是其名字Pattern-Exploiting Training的由来。

如何建模

以往模型只要对P(l|x)建模就好了(l是label),但现在我们加入了Prompt P以及标签映射(作者叫verbalizer),所以这个问题就可以更新为:

其中M表示模型,s相当于某个prompt下生成对应word的logits。再通过softmax,就可以得到概率:

通过这么两个公式,PET就把这种范式下的建模整明白了,能建模也就能inference甚至是训练了

但是这样好像又变成精调了???

于是作者在训练时又加上了MLM loss,进行联合训练

借鉴蒸馏思想

如果说上面的过程还是比较好理解,那下面PET的操作就开始fancy起来了。

首先让我们强调一下初心,Prompt种范式在早期的最大价值就是few-shot表现很好。所以PET这篇文章主要还是用Prompt来提升少样本的效果。

那要怎么提升效果呢?作者的思路是借鉴蒸馏的思想,先用少量监督数据训个模型A,然后用模型A去预测无标签数据,得到soft label(概率值),再用soft label去训练最后的模型B。

在我们常用的蒸馏套路中,要不然A比B强很多,要不然A比B多很多。于是PET采用了第二种方案,恰好就把多个Prompt利用起来了。

具体的操作是:

  1. 在少量监督数据上,给每个Prompt训练一个模型
  2. 对于无监督数据,将同一个样本的多个prompt预测结果进行集成,采用平均或加权(根据acc分配权重)的方式,再归一化得到概率分布,作为无监督数据的soft label
  3. 在得到的soft label上finetune一个最终模型

多轮的iPET

如果觉得上面的三步过于复杂,那就太小瞧作者了,他们又提出了iPET。

Iterative PET

把所有模型集成到C上是不能满足作者的,因为那些模型没法相互学习。比如有的模型学到了worse的pattern,它得到的label就会misleading。

所以!

我们可以循环地进行上面三步,逐步扩大soft label的范围,这样下面新训的模型就能学到之前模型的知识!

模型效果

经过一系列操作,最终可以看到,PET在少样本的情况下完胜精调:

我???

不知道大家怎么想,其实我看完之后是有些懵的。

弱弱地说一句,我觉得上面的实验比较不太fair?

首先,是PET在训练时加上了MLM损失,在无监督语料上增量预训练,而我们都知道这本身就是可以提升效果的。其次,如果用精调的范式重复一系列上述操作,效果说不定也可以提上去。

除了单纯的效果比较,如果放到落地应用上来讲,算上那么多模型训练和调参的时间,我可能已经手工标了几千条数据了。。。

不过Anyway,大佬们都说好,身边几个同学也都说好。

可能是还没看到精彩的部分,我再接着读下面几篇吧。

参考资料

[1]

How Can We Know What Language Models Know?: https://aclanthology.org/2020.tacl-1.28.pdf

NLP工作站

NLP论文解读、总结及相关实践经验分享
19篇原创内容
公众号
(0)

相关推荐