prompt你到底行不行?
文 | 馬殺雞三明治
源 | 知乎
很久之前老板下任務(wù)要試試prompt這個(gè)大風(fēng),但是玩完后發(fā)現(xiàn)太菜了所以連文章都沒寫,剛好今天工作比較閑就來寫寫了。
先上結(jié)論,連續(xù)prompt為運(yùn)用大模型提供了一種思路,其實(shí)這種思路早就見過不少了。。。
離散prompt才是最佳的姿勢(shì),但是存在人工設(shè)計(jì)模板帶來變數(shù)的問題。
所以prompt真的不太行。
不想看細(xì)節(jié)的可以直接看總結(jié)。
prompt三階段為:
第一階段,離散prompt
第二階段,連續(xù)prompt
第三階段,pretrain階段和下游階段統(tǒng)一任務(wù)類型(T5,zeroprompt)
這里的第三階段是個(gè)人看法。
為什么要prompt
prompt本意在于下游任務(wù)使用模型的時(shí)候,盡可能與預(yù)訓(xùn)練模型pretrain階段的任務(wù)保持一致。
我們現(xiàn)在用BERT的方式大多數(shù)為finetune,這會(huì)有以下兩點(diǎn)弊端:
1.finetune存在上下游階段任務(wù)不一致的問題,fintune對(duì)BERT原來的結(jié)構(gòu)破壞嚴(yán)重 2.下游任務(wù)通過標(biāo)注數(shù)據(jù)驅(qū)動(dòng),finetune到一個(gè)位置,而finetune任務(wù)語(yǔ)言上的意義并沒有告知給模型。我們看這兩個(gè)弊端,本質(zhì)上我們是在做出選擇,是精確的finetune還是泛化能力很強(qiáng)的MLM。
針對(duì)這兩點(diǎn)弊端做出改進(jìn),主要就是pretrain階段和下游任務(wù)階段能盡可能一致,這樣才能發(fā)揮出MLM的能力。但是這個(gè)過程必定有人為因素,這個(gè)過程也就是第一階段的離散prompt:
第一步,構(gòu)造prompt。
第二步,構(gòu)造MAKS token映射。
為此衍生出autoprompt,soft prompt,連續(xù)prompt等方法,
接下來我們具體聊聊這兩個(gè)劣勢(shì)。
1.finetune存在上下游階段任務(wù)不一致的問題,fintune對(duì)BERT原來的結(jié)構(gòu)破壞嚴(yán)重
看第一點(diǎn),pretrain階段學(xué)習(xí)最主要的任務(wù)是MLM,那么我們下游使用能否也是用MLM?這就是prompt最開始的思路。問題在于怎么讓下游變成MLM任務(wù)。
如任務(wù)情感分類,x = 我很累 y=負(fù)面
第一步,構(gòu)造prompt
那么我們可以這樣加入prompt,prompt = 我感覺很[MASK]
于是可以得到給BERT的token為
[CLS]我很累,感覺很[MASK][SEP]第二步,構(gòu)造MAKS token映射
即MASK預(yù)測(cè)的token應(yīng)該怎么樣映射到標(biāo)簽,比如負(fù)面可能的token候選有:難受,壞,煩
這樣我們就能讓上下游一致了。
2.finetune任務(wù)語(yǔ)言上的意義并沒有告知給模型
我們知道BERT是一個(gè)語(yǔ)言模型,但是finetune卻讓他數(shù)據(jù)驅(qū)動(dòng)參數(shù)變化,而不是先跟他表明這個(gè)任務(wù)是干嘛。所以你會(huì)發(fā)現(xiàn)prompt就是在使用語(yǔ)言的通順,因?yàn)閜retrain階段的語(yǔ)料也是通順的語(yǔ)料,所以我們構(gòu)建prompt希望句子X和prompt接起來是一個(gè)通順的話,這樣上下游就更一致了。
為了讓拼起來的話通順,我們就會(huì)結(jié)合場(chǎng)景設(shè)計(jì)prompt比如上面那個(gè)案例使用的prompt=感覺很[MASK],當(dāng)然也可以promp=心情很[MASK]。
有了上面的思路prompt按階段開始變種,第一階段是離散prompt,后來出現(xiàn)連續(xù)prompt。
第一階段,離散prompt
Pattern-Exploiting Training
其實(shí)就是我們最開始說的prompt方法,
第一步,構(gòu)造prompt
那么我們可以這樣加入prompt,prompt = 我感覺很[MASK]
于是可以得到給BERT的token為
[CLS]我很累,感覺很[MASK][SEP]第二步,構(gòu)造MAKS token映射
即MASK預(yù)測(cè)的token應(yīng)該怎么樣映射到標(biāo)簽,比如負(fù)面可能的token候選有:難受,壞,煩
但是這里面兩步都涉及人為因素。所以有人做出了改進(jìn),自然是圍繞如何去除人工設(shè)計(jì),也就是“構(gòu)造prompt”,“MAKS token映射”。
其實(shí)在我看來這才是prompt的優(yōu)勢(shì)所在,但是這個(gè)優(yōu)勢(shì)又帶來了劣勢(shì),因?yàn)橛腥藢?shí)驗(yàn)發(fā)現(xiàn)prompt的幾個(gè)字都能導(dǎo)致模型效果的較大的變化。
AutoPrompt
為了去除人工設(shè)計(jì)帶來的變數(shù),autoprompt針對(duì)自動(dòng)“構(gòu)造prompt”,自動(dòng)選擇“MAKS token映射”,做出方案。
第一步,構(gòu)造prompt
選擇loss下降最大的prompt token,注意到這里的loss怎么計(jì)算呢,這一步我們要先給定mask映射詞。
這兩步驟其實(shí)有沖突,先有雞還是先有蛋。。。論文的做法是先用假的prompt喂進(jìn)去求出mask映射,也就是:
[CLS] {sentence} [T] [T] [T] [MASK]. [SEP]然后再用得到的mask映射用數(shù)據(jù)驅(qū)動(dòng)選擇T。
第二步,構(gòu)造MAKS token映射
step1,使用上下文的MASK token的output embedding作為x,與label訓(xùn)練一個(gè)logistic,可以理解為logistic得分高的向量他就更能表示label
step2,使用上下文MASK token的output token的embdding給打分函數(shù),取得分top-k
太多細(xì)節(jié)可以看論文,這個(gè)方法和finetune差距也有10個(gè)點(diǎn)的出入,注意到這里的roberta是large的,效果比base的BERT好,原因就是因?yàn)?strong>large的mlm能力更強(qiáng),在做MRC任務(wù)也知道tiny和base的差距還有base和large的差距。模型參數(shù)量越大MLM能力越強(qiáng)。
第二階段,連續(xù)prompt
這個(gè)階段prompt開始變味道了,基本思路就是把之前離散的prompt token換成連續(xù)的prompt token,怎么換呢。
之前離散prompt的是以token喂給bert的,比如前面那個(gè)情感分類的prompt=“我感覺[MASK]”,是以token為單位給bert的,那連續(xù)prompt就是把這些token替換成embedding,直接把通過了bert emebdding層的prompt token的向量替換成可訓(xùn)練參數(shù),并且凍結(jié)整個(gè)BERT,只訓(xùn)練3*768這個(gè)矩陣。比如我這里token emebdding維度為3*768(我感覺,三個(gè)字)那么可訓(xùn)練參數(shù)就是3*768,就是這么回事,那具體還有些騷操作可以玩:
1,比如這里的3*768,那能不能20*768呢,這個(gè)也是個(gè)不可控的東西可以做實(shí)驗(yàn)。
2,能不能給BERT每層encoder整上3*768呢,意味著每層的encoder通過self attention把每層的3*768的信息交互進(jìn)模型。
3,可不可以不用[MASK]映射了,我直接使用CLS來分類。
以上講的3點(diǎn)都是P-tuning v2的做法,至于P-tuning v2之前的玩法就不多說了,花樣沒有P-tuning v2多,但是P-tuning v2的效果在large模型上是接近finetune的,而且你不需要訓(xùn)練太多參數(shù)就可以撬動(dòng)一些大模型了,包括Prefix-tuning也說了他們不需要訓(xùn)練太多參數(shù)就可以撬動(dòng)一些大模型了,但是這個(gè)玩法不是早就有了嗎,現(xiàn)在打著prompt的旗號(hào)又能水是吧。
此外,P-tuning v2中,prompt token長(zhǎng)度對(duì)實(shí)驗(yàn)的影響還挺大的,而且跟任務(wù)具有一定相關(guān)性,表現(xiàn)很不穩(wěn)定。論文也沒做few-shot實(shí)驗(yàn),效果待定。沒有說base模型的效果。
其實(shí)看到這里你會(huì)發(fā)現(xiàn)prompt已經(jīng)變味了,嚴(yán)格來說根本不是什么prompt了,這種構(gòu)建可訓(xùn)練向量去控制模型的方法也不稀奇,而去除 [MASK]映射換成CLS來分類就更加有fintune那感覺了。由于我沒自己去跑跑,但是可以看到都是負(fù)面評(píng)論居多,太多負(fù)面評(píng)價(jià)了,不列舉了。
第三階段,pretrain階段和下游階段統(tǒng)一任務(wù)類型(T5,zeroprompt)
最后一提T5和zeroprompt。
T5是google使用ender-decoder結(jié)構(gòu)做的一個(gè)大模型,T5把pretrain階段任務(wù)和下游階段任務(wù)統(tǒng)一了,都做seq2seq任務(wù),或者論文里說的text2text任務(wù)。
而zeroprompt,把各種場(chǎng)景和不同的任務(wù)類型(分類,翻譯,閱讀理解,近似句得分等)數(shù)據(jù),以人工設(shè)計(jì)prompt的方式訓(xùn)練,得到一個(gè)超級(jí)無敵prompt模型,其實(shí)本質(zhì)上也是統(tǒng)一了pretrain階段任務(wù)和下游階段任務(wù),都做MLM,不同的是zeroprompt為了適應(yīng)新的任務(wù)場(chǎng)景需要一套算法來自動(dòng)prompt,而T5通過固定引導(dǎo)詞配對(duì)任務(wù)類型,直接decode出答案。
對(duì)比兩者,T5直接重新設(shè)計(jì)pretrain階段任務(wù),和下游階段任務(wù)保持一致,而zeroprompt本質(zhì)上也是用了自動(dòng)prompt的方法,但是把中文任務(wù)數(shù)據(jù)都跑了個(gè)遍,達(dá)到了中文prompt一統(tǒng)。
總結(jié)
prompt從最開始的人工設(shè)計(jì)模板,到自動(dòng)prompt再到連續(xù)prompt,逐漸變的畸形。
最開始的人工設(shè)計(jì)模板就是為了利用好BERT的pretrain階段學(xué)習(xí)到的MLM能力然后用在下游,但是人工設(shè)計(jì)模型存在不穩(wěn)定的問題,自動(dòng)prompt效果又很差。
于是連續(xù)prompt開始表演,連續(xù)prompt已經(jīng)沒有prompt的味道了,把prompt弄成向量,通過訓(xùn)練希望模型能自己得到好的prompt向量,其實(shí)就是在finetune。
所以prompt行不行,目前來看不如finetune。但是他具有一定的few shot能力,特別是離散prompt。在一些簡(jiǎn)單的任務(wù)是可以直接用離散prompt的方式做到few shot,這其實(shí)是利用BERT在pretrain階段學(xué)習(xí)到的能力,但是一旦任務(wù)過難,那few shot效果會(huì)很差,遠(yuǎn)不如標(biāo)幾條數(shù)據(jù)finetune一下。這里就是涉及到泛化和精準(zhǔn),你想要一定的泛化性,那就一定犧牲了精準(zhǔn)。
最后zeroprompt和T5,基本是把prompt的東西都玩完了,其實(shí)就是pretrain階段和下游階段是否一致的問題。
后臺(tái)回復(fù)關(guān)鍵詞【入群】
加入賣萌屋NLP、CV與搜推廣求職討論群
后臺(tái)回復(fù)關(guān)鍵詞【頂會(huì)】
獲取ACL、CIKM等各大頂會(huì)論文集!
總結(jié)
以上是生活随笔為你收集整理的prompt你到底行不行?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 该文件夹包含名称过长且无法放入回收站的项
- 下一篇: pygame render怎么显示中文_