Prompt范式的缘起|Pattern-Exploiting Training

卷友们好,我是rumor。

我感觉我被卷到了。

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

cec8aff3a9a3fc7bf3a18a692d6d0b3c.png

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

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

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

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

676ef4657aba62f8db7e9acf073be9d4.png

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

博客: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是句子):

286bd3cd68f096fba693fedd5a534871.png

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

f2457706822ac778814eb44fe70a4260.png

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

  1. 给出了分类任务、匹配任务的Prompt设计样例,让预训练模型可以做NLU任务

  2. 每种任务都给了多个Prompt,毕竟模型预训练时见到的句子太多了,谁也不确定哪种Prompt能从黑盒里捞出什么,用多种输入后再进行整合是比较保险的方式

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

Answer的映射

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

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

688db5e8f900e3ba297b254f8a42ab13.png

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

40af8cbe25255c13e0d7c893a5980ffe.png

训练范式

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

如何建模

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

707cdbd8136e0c50fcb7f89c96d49c60.png

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

6758cdc8b39bbe60aa1f48f06c3bb86c.png

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

674270e52eac7592dc53938b9806ee45.png

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

于是作者在训练时又加上了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一个最终模型

ab489d013f6a3e50964f0bb3f0aa932b.png

多轮的iPET

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

Iterative PET

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

所以!

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

c26f1f032f9e6ab8ff31077b62cffa3c.png

模型效果

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

8860d536c2c6347fbb478feaa1b63a8c.png

我???

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

2102eb2e6f3ba1c2a9dce8d4d2e4fc42.png

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

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

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

b97788e746992ebcd9d6af1c4239380e.png

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

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

参考资料

[1]

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

d5028c24de45ef7316b7f92b0dd714dd.png


大家好我是rumor

一个热爱技术,有一点点幽默的妹子

欢迎关注我

带你学习带你肝

一起在人工智能时代旋转跳跃眨巴眼

「走在前沿不掉队」f9e75ac2c20bfd0fea1de3318ad37e8e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值