Prompt范式的緣起|Pattern-Exploiting Training
卷友們好,我是rumor。
我感覺我被卷到了。
昨天Prompt突然刷屏,我才知道有這么個(gè)事兒,還什么都沒有學(xué),人家領(lǐng)域綜述都寫好了。

說好了要當(dāng)走在AI前沿的姐姐,這怎么能忍???
于是我趕緊上知乎學(xué)習(xí),并且創(chuàng)建了Prompt文件夾,連下幾篇paper,大概緩解了16%的焦慮。
但刷了幾篇博客后覺得自己對背景的理解還是不夠,于是決定從頭看起。今天就來記錄下自己讀PET的一些收獲。
Prompt的思想,我理解就是設(shè)計(jì)不同的輸入形態(tài),激發(fā)語言模型的潛力,得到任務(wù)相關(guān)的輸出,從而避免精調(diào)模式帶來的災(zāi)難性遺忘問題。引用下CMU的劉鵬飛博士放在博客里的圖:

他的綜述想必大家都知道了,也推薦去讀下他自己的博客:
博客:https://zhuanlan.zhihu.com/p/395115779
綜述:https://arxiv.org/abs/2107.13586
Prompt的做法,從任務(wù)形式來說可以分為兩種:
續(xù)寫Prefix:用在GPT2-3那種單向LM預(yù)訓(xùn)練模型上,輸入「好好學(xué)習(xí),翻譯成英文:」,輸出「good good study」 完形填空:用在BERT那種MLM式預(yù)訓(xùn)練模型上,比如情感分類任務(wù)可以輸入「這個(gè)餅不錯(cuò),太X了」,輸出「棒」
我最早是從GPT2知道第一種方法的,第二種之前WWM在探究知識存儲能力的時(shí)候看到過,偏信息抽取任務(wù),給定Subject和關(guān)系,模型給出Object,很好理解,也不用對輸出進(jìn)行特殊處理。
Prompt最近的突然興起,主要是因?yàn)閷W(xué)者們把任務(wù)擴(kuò)展到了NLU,之前大部分人聽說的是做生成和信息抽取,而在統(tǒng)一了方法之后,現(xiàn)在可以做分類任務(wù)和匹配任務(wù)了,同時(shí)在少樣本甚至正常場景,能追上精調(diào)的效果。
其實(shí)對于這個(gè)新范式,核心idea還是很好理解的。難就難在:
怎么樣選取合適的Prompt,適配不同任務(wù),同時(shí)把模型潛能激發(fā)出來 Answer實(shí)際上是不可控的,拿到answer后如何往標(biāo)準(zhǔn)化的Y映射 怎樣利用Prompt機(jī)制精調(diào)一下模型
所以今天,我們就來看看Prompt范式的「開篇之作」PET,究竟是如何解決這些問題的。
Prompt的選取
PET針對不同任務(wù)手動設(shè)計(jì)了不同的Prompt,比如Yelp用戶評價(jià)星級預(yù)測(a是句子):

MNLI句間關(guān)系推理(a、b是句子):

PET這里可以參考的地方有兩點(diǎn):
給出了分類任務(wù)、匹配任務(wù)的Prompt設(shè)計(jì)樣例,讓預(yù)訓(xùn)練模型可以做NLU任務(wù) 每種任務(wù)都給了多個(gè)Prompt,畢竟模型預(yù)訓(xùn)練時(shí)見到的句子太多了,誰也不確定哪種Prompt能從黑盒里撈出什么,用多種輸入后再進(jìn)行整合是比較保險(xiǎn)的方式
其實(shí)手動設(shè)計(jì)不是高效的方式,同時(shí)期還有一篇LPAQA[1],主要探索了信息抽取任務(wù)自動化挖掘Prompt和答案整合方法,但LPAQA主要關(guān)注信息抽取領(lǐng)域,感興趣的同學(xué)可以看下。
Answer的映射
對于答案也是手動定義,直接定義一個(gè)label到word的映射v。比如在做文本相似度任務(wù)時(shí),讓1=Yes,0=No,這樣直接看該單詞的logits就能預(yù)測出結(jié)果的概率了。
在Yelp評價(jià)預(yù)測中,定義了五個(gè)映射:

在MNLI句間關(guān)系推理中,定義了多種映射:

訓(xùn)練范式
解決了輸入和輸出的不可控問題之后,接下來就是PET的重頭,也是其名字Pattern-Exploiting Training的由來。
如何建模
以往模型只要對P(l|x)建模就好了(l是label),但現(xiàn)在我們加入了Prompt P以及標(biāo)簽映射(作者叫verbalizer),所以這個(gè)問題就可以更新為:

其中M表示模型,s相當(dāng)于某個(gè)prompt下生成對應(yīng)word的logits。再通過softmax,就可以得到概率:

通過這么兩個(gè)公式,PET就把這種范式下的建模整明白了,能建模也就能inference甚至是訓(xùn)練了:

但是這樣好像又變成精調(diào)了???
于是作者在訓(xùn)練時(shí)又加上了MLM loss,進(jìn)行聯(lián)合訓(xùn)練。
借鑒蒸餾思想
如果說上面的過程還是比較好理解,那下面PET的操作就開始fancy起來了。
首先讓我們強(qiáng)調(diào)一下初心,Prompt種范式在早期的最大價(jià)值就是few-shot表現(xiàn)很好。所以PET這篇文章主要還是用Prompt來提升少樣本的效果。
那要怎么提升效果呢?作者的思路是借鑒蒸餾的思想,先用少量監(jiān)督數(shù)據(jù)訓(xùn)個(gè)模型A,然后用模型A去預(yù)測無標(biāo)簽數(shù)據(jù),得到soft label(概率值),再用soft label去訓(xùn)練最后的模型B。
在我們常用的蒸餾套路中,要不然A比B強(qiáng)很多,要不然A比B多很多。于是PET采用了第二種方案,恰好就把多個(gè)Prompt利用起來了。
具體的操作是:
在少量監(jiān)督數(shù)據(jù)上,給每個(gè)Prompt訓(xùn)練一個(gè)模型 對于無監(jiān)督數(shù)據(jù),將同一個(gè)樣本的多個(gè)prompt預(yù)測結(jié)果進(jìn)行集成,采用平均或加權(quán)(根據(jù)acc分配權(quán)重)的方式,再歸一化得到概率分布,作為無監(jiān)督數(shù)據(jù)的soft label 在得到的soft label上finetune一個(gè)最終模型

多輪的iPET
如果覺得上面的三步過于復(fù)雜,那就太小瞧作者了,他們又提出了iPET。
Iterative PET。
把所有模型集成到C上是不能滿足作者的,因?yàn)槟切┠P蜎]法相互學(xué)習(xí)。比如有的模型學(xué)到了worse的pattern,它得到的label就會misleading。
所以!
我們可以循環(huán)地進(jìn)行上面三步,逐步擴(kuò)大soft label的范圍,這樣下面新訓(xùn)的模型就能學(xué)到之前模型的知識!

模型效果
經(jīng)過一系列操作,最終可以看到,PET在少樣本的情況下完勝精調(diào):

我???
不知道大家怎么想,其實(shí)我看完之后是有些懵的。

弱弱地說一句,我覺得上面的實(shí)驗(yàn)比較不太fair?
首先,是PET在訓(xùn)練時(shí)加上了MLM損失,在無監(jiān)督語料上增量預(yù)訓(xùn)練,而我們都知道這本身就是可以提升效果的。其次,如果用精調(diào)的范式重復(fù)一系列上述操作,效果說不定也可以提上去。
除了單純的效果比較,如果放到落地應(yīng)用上來講,算上那么多模型訓(xùn)練和調(diào)參的時(shí)間,我可能已經(jīng)手工標(biāo)了幾千條數(shù)據(jù)了。。。

不過Anyway,大佬們都說好,身邊幾個(gè)同學(xué)也都說好。
可能是還沒看到精彩的部分,我再接著讀下面幾篇吧。
參考資料
How Can We Know What Language Models Know?: https://aclanthology.org/2020.tacl-1.28.pdf

「走在前沿不掉隊(duì)」
