日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

prompt你到底行不行?

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 prompt你到底行不行? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文 | 馬殺雞三明治
源 | 知乎

很久之前老板下任務要試試prompt這個大風,但是玩完后發現太菜了所以連文章都沒寫,剛好今天工作比較閑就來寫寫了。

先上結論,連續prompt為運用大模型提供了一種思路,其實這種思路早就見過不少了。。。

離散prompt才是最佳的姿勢,但是存在人工設計模板帶來變數的問題。

所以prompt真的不太行。

不想看細節的可以直接看總結

prompt三階段為:

  • 第一階段離散prompt

  • 第二階段,連續prompt

  • 第三階段,pretrain階段和下游階段統一任務類型(T5,zeroprompt)

  • 這里的第三階段是個人看法。

    為什么要prompt

    prompt本意在于下游任務使用模型的時候,盡可能與預訓練模型pretrain階段的任務保持一致。

    我們現在用BERT的方式大多數為finetune,這會有以下兩點弊端:

    1.finetune存在上下游階段任務不一致的問題,fintune對BERT原來的結構破壞嚴重 2.下游任務通過標注數據驅動,finetune到一個位置,而finetune任務語言上的意義并沒有告知給模型。

    我們看這兩個弊端,本質上我們是在做出選擇,是精確的finetune還是泛化能力很強的MLM。

    針對這兩點弊端做出改進,主要就是pretrain階段和下游任務階段能盡可能一致,這樣才能發揮出MLM的能力。但是這個過程必定有人為因素,這個過程也就是第一階段的離散prompt

    第一步,構造prompt。

    第二步,構造MAKS token映射。

    為此衍生出autopromptsoft prompt連續prompt等方法,

    接下來我們具體聊聊這兩個劣勢

    1.finetune存在上下游階段任務不一致的問題,fintune對BERT原來的結構破壞嚴重

    看第一點,pretrain階段學習最主要的任務是MLM,那么我們下游使用能否也是用MLM?這就是prompt最開始的思路。問題在于怎么讓下游變成MLM任務。

    如任務情感分類,x = 我很累 y=負面

    第一步,構造prompt

    那么我們可以這樣加入prompt,prompt = 我感覺很[MASK]

    于是可以得到給BERT的token為

    [CLS]我很累,感覺很[MASK][SEP]

    第二步,構造MAKS token映射

    即MASK預測的token應該怎么樣映射到標簽,比如負面可能的token候選有:難受,壞,煩

    這樣我們就能讓上下游一致了。

    2.finetune任務語言上的意義并沒有告知給模型

    我們知道BERT是一個語言模型,但是finetune卻讓他數據驅動參數變化,而不是先跟他表明這個任務是干嘛。所以你會發現prompt就是在使用語言的通順,因為pretrain階段的語料也是通順的語料,所以我們構建prompt希望句子X和prompt接起來是一個通順的話,這樣上下游就更一致了。

    為了讓拼起來的話通順,我們就會結合場景設計prompt比如上面那個案例使用的prompt=感覺很[MASK],當然也可以promp=心情很[MASK]。

    有了上面的思路prompt按階段開始變種,第一階段是離散prompt,后來出現連續prompt。

    第一階段,離散prompt

    Pattern-Exploiting Training

    其實就是我們最開始說的prompt方法,

    第一步,構造prompt

    那么我們可以這樣加入prompt,prompt = 我感覺很[MASK]

    于是可以得到給BERT的token為

    [CLS]我很累,感覺很[MASK][SEP]

    第二步,構造MAKS token映射

    即MASK預測的token應該怎么樣映射到標簽,比如負面可能的token候選有:難受,壞,煩

    但是這里面兩步都涉及人為因素。所以有人做出了改進,自然是圍繞如何去除人工設計,也就是“構造prompt”,“MAKS token映射”。

    其實在我看來這才是prompt的優勢所在,但是這個優勢又帶來了劣勢,因為有人實驗發現prompt的幾個字都能導致模型效果的較大的變化。

    AutoPrompt

    為了去除人工設計帶來的變數,autoprompt針對自動“構造prompt”,自動選擇“MAKS token映射”,做出方案。

    第一步,構造prompt

    選擇loss下降最大的prompt token,注意到這里的loss怎么計算呢,這一步我們要先給定mask映射詞。

    這兩步驟其實有沖突,先有雞還是先有蛋。。。論文的做法是先用假的prompt喂進去求出mask映射,也就是:

    [CLS] {sentence} [T] [T] [T] [MASK]. [SEP]

    然后再用得到的mask映射用數據驅動選擇T。

    第二步,構造MAKS token映射

    step1,使用上下文的MASK tokenoutput embedding作為x,與label訓練一個logistic,可以理解為logistic得分高的向量他就更能表示label

    step2,使用上下文MASK tokenoutput tokenembdding給打分函數,取得分top-k

    太多細節可以看論文,這個方法和finetune差距也有10個點的出入,注意到這里的robertalarge的,效果比base的BERT好,原因就是因為largemlm能力更強,在做MRC任務也知道tinybase的差距還有baselarge的差距。模型參數量越大MLM能力越強。

    第二階段,連續prompt

    這個階段prompt開始變味道了,基本思路就是把之前離散的prompt token換成連續的prompt token,怎么換呢。

    之前離散prompt的是以token喂給bert的,比如前面那個情感分類的prompt=“我感覺[MASK]”,是以token為單位給bert的,那連續prompt就是把這些token替換成embedding,直接把通過了bert emebdding層的prompt token的向量替換成可訓練參數,并且凍結整個BERT,只訓練3*768這個矩陣。比如我這里token emebdding維度為3*768(我感覺,三個字)那么可訓練參數就是3*768,就是這么回事,那具體還有些騷操作可以玩:

    1,比如這里的3*768,那能不能20*768呢,這個也是個不可控的東西可以做實驗。

    2,能不能給BERT每層encoder整上3*768呢,意味著每層的encoder通過self attention把每層的3*768的信息交互進模型。

    3,可不可以不用[MASK]映射了,我直接使用CLS來分類。

    以上講的3點都是P-tuning v2的做法,至于P-tuning v2之前的玩法就不多說了,花樣沒有P-tuning v2多,但是P-tuning v2的效果在large模型上是接近finetune的,而且你不需要訓練太多參數就可以撬動一些大模型了,包括Prefix-tuning也說了他們不需要訓練太多參數就可以撬動一些大模型了,但是這個玩法不是早就有了嗎,現在打著prompt的旗號又能水是吧。

    此外,P-tuning v2,prompt token長度對實驗的影響還挺大的,而且跟任務具有一定相關性,表現很不穩定。論文也沒做few-shot實驗,效果待定。沒有說base模型的效果。

    其實看到這里你會發現prompt已經變味了,嚴格來說根本不是什么prompt了,這種構建可訓練向量去控制模型的方法也不稀奇,而去除 [MASK]映射換成CLS來分類就更加有fintune那感覺了。由于我沒自己去跑跑,但是可以看到都是負面評論居多,太多負面評價了,不列舉了。

    第三階段,pretrain階段和下游階段統一任務類型(T5,zeroprompt)

    最后一提T5zeroprompt。

    T5google使用ender-decoder結構做的一個大模型,T5把pretrain階段任務和下游階段任務統一了,都做seq2seq任務,或者論文里說的text2text任務。

    zeroprompt,把各種場景和不同的任務類型(分類,翻譯,閱讀理解,近似句得分等)數據,以人工設計prompt的方式訓練,得到一個超級無敵prompt模型,其實本質上也是統一了pretrain階段任務和下游階段任務,都做MLM,不同的是zeroprompt為了適應新的任務場景需要一套算法來自動prompt,而T5通過固定引導詞配對任務類型,直接decode出答案。

    對比兩者,T5直接重新設計pretrain階段任務,和下游階段任務保持一致,而zeroprompt本質上也是用了自動prompt的方法,但是把中文任務數據都跑了個遍,達到了中文prompt一統。

    總結

    prompt從最開始的人工設計模板,到自動prompt再到連續prompt,逐漸變的畸形。

    最開始的人工設計模板就是為了利用好BERTpretrain階段學習到的MLM能力然后用在下游,但是人工設計模型存在不穩定的問題,自動prompt效果又很差。

    于是連續prompt開始表演,連續prompt已經沒有prompt的味道了,把prompt弄成向量,通過訓練希望模型能自己得到好的prompt向量,其實就是在finetune

    所以prompt行不行,目前來看不如finetune。但是他具有一定的few shot能力,特別是離散prompt。在一些簡單的任務是可以直接用離散prompt的方式做到few shot,這其實是利用BERTpretrain階段學習到的能力,但是一旦任務過難,那few shot效果會很差,遠不如標幾條數據finetune一下。這里就是涉及到泛化和精準,你想要一定的泛化性,那就一定犧牲了精準。

    最后zeropromptT5,基本是把prompt的東西都玩完了,其實就是pretrain階段和下游階段是否一致的問題。

    后臺回復關鍵詞【入群

    加入賣萌屋NLP、CV與搜推廣求職討論群

    后臺回復關鍵詞【頂會

    獲取ACL、CIKM等各大頂會論文集!

    總結

    以上是生活随笔為你收集整理的prompt你到底行不行?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。