Press "Enter" to skip to content

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」

 

    1. 完形填空:用在BERT那种MLM式预训练模型上,比如情感分类任务可以输入「这个饼不错,太X了」,输出「棒」

 

 

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

 

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

 

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

 

 

    1. 怎幺样选取合适的Prompt,适配不同任务,同时把模型潜能激发出来

 

    1. Answer实际上是不可控的,拿到answer后如何往标准化的Y映射

 

    1. 怎样利用Prompt机制精调一下模型

 

 

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

 

Prompt的选取

 

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

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

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

 

 

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

 

    1. 每种任务都给了 多个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训练一个模型

 

    1. 对于无监督数据,将同一个样本的多个prompt预测结果进行集成,采用平均或加权(根据acc分配权重)的方式,再归一化得到概率分布,作为无监督数据的soft label

 

    1. 在得到的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.t acl-1.28.pdf

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注