Prompt Learning: ChatGPT也在用的NLP新正規化

Baihai_IDP發表於2023-02-20

編者按:自GPT-3以來,大語言模型進入了新的訓練正規化,即“預訓練模型+Promp learning”。在這一新的正規化下,大語言模型呈現出驚人的zero-shot和few-shot能力,使用較少的訓練資料來適應新的任務形式。最近火爆出圈的ChatGPT是利用這一方式。

簡單理解Prompt learning,其核心就是以特定的模板,將下游任務的資料轉成自然語言形式,充分挖掘預訓練模型本身的能力,以適應不同的下游任務。

本期IDP Inspiration,我們將和大家一起深入走進Prompt learning技術,瞭解其發展進展。

以下是譯文,Enjoy!

作者 | Tianyu Gao, Princeton University
編譯 | 嶽揚

從BERT(Devlin et al., 2019)[1]開始,在下游應用上用task-specific heads對預訓練語言模型(LMs)進行微調已經成為NLP的標準做法。然而,具有175B引數的GPT-3模型(Brown et al., 2020)[2]為下游應用帶來了使用LMs的新方式:GPT-3利用自然語言提示詞(prompt)和任務演示(task demonstrations)作為上下文(context),只使用少量的例子就能很好地處理各種任務,並且不需要更新底層模型中的引數。GPT-3的模型規模很大是其成功的一個重要因素,而 提示詞(prompts) 和 演示(demonstrations)也給我們提供了關於如何更好地使用語言模型的新見解。

所以什麼是提示詞 (prompt)?

它是插入到輸入示例中的一段文字,能夠將原始任務(original task)表述為語言模型問題 (language modeling problem)。例如,假如我們要對下面這條電影評論“不值得看(No reason to watch)”進行分類,我們可以將prompt“It was”插入到句子中,得到“No reason to watch. It was ____”。很自然的,語言模型產生“terrible(可怕)”的機率比“great(偉大)”的機率高。本文會介紹大型語言模型中prompt的最新進展。

在GPT-3釋出後,出現了許多與prompt有關的論文,其中許多論文都討論了基於提示詞的學習(prompt-based learning)用於中等規模的預訓練模型,如BERT(BERT-base有110M引數,比最大的GPT-3小1000倍)。

在這篇博文中,我將概述最近的prompt-based方法和我的看法。

Why Prompts?

7ebd4f78256c1f7819ccf6c4dc148131.png

以情感分類任務為例,對預訓練、標準的微調和基於提示的微調進行了說明(from Gao et al., 2021)

在傳統的“預訓練和微調(fine-tuning)”模式中,預訓練階段和下游任務之間存在巨大差距。

首先是目標不同。對於下游任務,通常需要引入新的引數,例如對於一個BERT大型模型和一個二元分類任務,需要額外的1,024 x 2個引數。

另一方面,透過使用prompt,下游任務有可能採用與預訓練目標相同的格式(如上圖所示),而不需要引入新的引數。對於分類任務,只需要設計一個模板(例如“It was”)和預期的文字(也稱為標籤詞,例如圖中的正面標籤為“great”,負面標籤為“terrible”)。縮小兩個階段之間的差距可以使在特定任務上部署預訓練模型變得更加容易,特別是在只有少量新任務訓練案例的情況下,有效地微調預訓練模型和新任務的特定引數是很困難的。Scao和Rush(2021)[3]的研究表明,一個prompt可能抵得上100個常規資料點,這表明prompt可以帶來取樣效率的巨大提升。

在對prompt的研究中,有兩種不同的正規化,它們有著不同的觀點。受PET論文(Schick and Schütze,2021a,b)[4]的啟發,基於prompt的微調(關鍵點是仍然需要進一步最佳化引數)被認為是對小型語言模型(這裡說的小型是指數百萬而不是數十億的引數,如BERT或RoBERTa)實現更好的小樣本學習的途徑;對於超大型模型,如175B引數的 GPT-3和11B引數的 T5(Raffel et al., 2020)[5],微調它們是困難的(這只是我的猜測,我從來沒有機會這樣做),而且成本很高,因此以人們期望透過不同的prompt(無論是離散提示/discrete prompt)還是軟提示/soft)來固定它們的引數並將它們應用於不同的任務。

離散提示詞Discrete prompts

使用prompt進行預訓練模型的研究最早可以追溯到GPT-1/2(Radford et al., 2018, 2019)[6]。這些研究表明,透過設計適當的prompt,語言模型(LMs)可以在情感分類和閱讀理解任務中實現和零樣本學習一樣的表現。

隨後,Petroni等人(2019)[7];Davison等人(2019)[8];Jiang等人(2020)[9];Talmor等人(2020)[10]探索瞭如何利用prompt從LMs中挖掘事實和常識性知識(factual and commonsense knowledge)。

在GPT-3採用prompt和固定引數之後,基於prompt的方法被引入到較小的LMs中(Schick和Schütze,2021a,b[11];我們的工作LM-BFF,Gao等人,2021[12])。

這些方法與GPT-3的不同之處在於,它們採用了雙向掩碼(bidirectional masked)LMs,而不是單向(unidirectional)LMs,並對完整的模型進行微調。最近的幾篇論文也沿用了這一思路,調整了任務目標(Tam等人,2021[13])或以統一的形式制定任務,如問題回答(Zhong等人,2021[14])或文字蘊涵(Wang等人,2021[15])。

在所有這些模型中,prompt都是自然語言,由離散的詞彙標記組成。綜合研究不同變體的結果,Logan等人(2021)[16]表明,當採用基於prompt的微調方法(而不是凍結所有引數)時,模型可以獲得比標準微調更好的效能(但好的提示仍然會產生明顯的差異)。而只調整部分模型引數——例如,採用最近提出的bias tuning method(Ben-Zaken等人,2021)在few-shot setting中與full model fine-tuning相當。

大多數工作都需要人工設計的prompt,提示工程是不簡單的,因為一個小的擾動就會極大地影響模型的效能,而建立一個完美的prompt需要了解LMs的內部工作原理和不斷試錯。

除了人工設計的prompt,人們還可以自動生成或最佳化prompt。Guo等人在2021年展示了一種soft Q-learning方法,在生成prompt時效果很好。

AutoPrompt(Shin et al., 2020)[17]提議採取基於梯度的搜尋(該想法來自Wallace et al., 2019[18],旨在搜尋一個通用的對抗性觸發器,使模型產生特定的預測),為特定任務找出最佳prompt。AutoPrompt的設定是不同的,因為它固定了模型:它假設所有的東西都被編碼在預訓練的模型中,我們需要的只是”prompt”出來;另一個原因是,AutoPrompt的目標也是LAMA(LAnguage Model Analysis)(Petroni et al., 2019[19]),這是一種知識探測任務,它被要求不觸及模型引數。

下面是一個用於情感分類的AutoPrompt的例子:
f88f496a1fc276e4bc05147f1a061144.png

An illustration of AutoPrompt (Shin et al., 2020)

搜尋到的templates大大改善了LAMA的效能;它們在使用完整資料集的情感分類和自然語言推理任務中也取得了十分驚人的準確性(不過仍然低於微調範本)。檢視搜尋到的discrete(但不再是自然語言)prompt,可以找到對一些“trigger tokens“的解釋,但很多隻是特殊情況。

目前還不清楚,AutoPrompt 是否真的能幫助LMs回憶起裡面的 ”knowledge“,或者它只是最佳化的另一種方式,在預訓練模型中從“彩票”中挑選出“中獎彩票”(關於彩票假說,見Frankle和Carbin,2019[20])。

軟提示/連續提示Soft prompts

我們真的需要在prompt中使用離散單詞嗎?

既然AutoPrompt已經做了基於梯度的提示搜尋,為什麼不從discrete tokens轉向連續的“soft prompts”?例如,Zhong等人(2021)[21]和Qin、Eisner(2021)[22]提出將 soft prompts用於知識探測任務(LAMA等),並取得了比discrete prompts更大的提升。這個想法非常簡單:只是在輸入序列中放入一些隨機向量(不與詞彙中的特定詞嵌入相聯絡),並對其進行調整,而預訓練模型的其他部分則固定不變。

還有一些人是將soft prompts部署在知識探測任務之外。Li和Liang(2021)[23]將這一想法擴充套件到了生成式任務(generation tasks),並表明它的效能提升與進行微調相當,但是隻調整了0.1%的引數。Han等人(2021)[24]將soft prompts與manual templates結合起來,在關係抽取(關係抽取)方面取得了極佳的效能。

至今為止,我所看到的關於soft prompts最全面的研究來自於Lester等人(2021)[25]:他們在T5上應用了soft prompts,並表明透過調整prompt(只佔總引數的一小部分),T5可以在NLU(自然語言理解)任務中取得與微調整個模型相同的效能。我很喜歡這篇論文,因為它進行了充分的ablation study(消融實驗),並展示了soft prompts的幾個關鍵的經驗選擇,包括從詞嵌入初始化,足夠數量的soft prompt tokens,以及一個aligned pre-training objective。除了引數效率,Lester等人(2021)[25]還證明了soft prompts提供了比全模型微調更好的可傳遞性。

讓我們回顧一下soft prompts:它的效果非常好,當你不能(探測任務)或不願(模型太大,或你希望有一個適用於所有任務的通用模型)觸控模型的引數時,它特別有效。

調整soft prompts與基於prompt的微調有很大不同,後者允許人們最佳化完整的模型,更重要的是,比標準的微調更適合處理小樣本案例。

與人工設計的不同,AutoPrompt在某些情況下不能很好地工作,據我所知,沒有任何soft prompts論文認為所有情況下它都能取得極好的效能(儘管Liu等人(2021)[26]透過從discrete manual prompts開始,對整個模型進行微調,極端情況下也出現了令人滿意的結果)。

另外,正如Lester等人(2021)[25]所證明的,在使用超過100億個引數的預訓練模型之前,soft prompts從未在SuperGLUE上實現與全微調相同的效能。我認為未來值得研究的是如何進一步推動soft prompts在極端情況和較小的語言模型中更有效地工作。

7ddeaa5a416af20ce770a36361f363a1.png
GPT-3 (blue) vs full model fine-tuning (orange) vs soft-prompt tuning (green). Credit to Lester et al. (2021).

上下文學習In-context learning:新型的元學習

在本文的開頭,我把GPT-3的成功歸功於兩個模型設計:prompts 和demonstrations(或 in-context learning),但在這一節之前我還沒有談到in-context learning。由於GPT-3的引數沒有在下游任務中進行微調,它必須以另一種方式——透過context(上下文) ”學習”新任務。

6e6e3c91f32be0ba457145fb96dd5b26.png
GPT-3 "learns" about new tasks through demonstrations in the context (Brown et al., 2020).

如上圖所示,GPT-3只是將一些隨機訓練樣本與實際查詢(本例中為 ”cheese⇒“)串聯起來,由於預訓練的模型已經學會了從上下文中捕捉patterns,而且Transformer的自注意力機制允許在這些例項中逐一進token比較,因此上下文中的學習效果出奇地好。GPT-3論文稱其為”元學習meta-learning”,認為在閱讀大量無監督的文字後,語言模型可以“訓練出多樣的技能和patterns識別能力“。

作者假設在預訓練期間有時會有重複的子任務嵌入到一個序列中,類似於上下文學習(in-context learning)的正規化。後續的工作進一步完善了使用demonstrations的方式。Gao et al., 2021[12]; Liu et al. (2021)[27] 說,與其隨機抽取一些例子,不如採取在與查詢相似的語境中demonstrations,可以大幅提高效能;Lu et al. (2021) 表明,demonstrations的順序也很重要,並提出了一種確定”最佳”順序的方法。

雖然in-context learning只有在無法調整模型時才是必要的,並且當訓練例項的數量增加時很難進行泛化(因為模型的輸入長度是有限的),但研究如何更好地使用demonstrations(即如何進一攝取LMs學到的”meta-knowledge”)以及哪些預訓練目標和資料可以提升in-context能力,可能會進一步幫助我們瞭解預訓練LMs的內部執行原理。

校準語言模型 Calibrating language models

Prompting是非常有效的,但它也可能會引入來自預訓練語料的偏見。例如,在零樣本情感分類設定中,如果輸入為“N/A”,GPT-3可能會錯誤地將其認為是“正面”而不是“負面”,而實際上這兩個標籤應該被分配相等的機率(Zhao等人,2021)[29]。

另外,同一個物體的不同詞語描述(如“computer”和“PC”)可能會互相競爭機率分配,導致任務標籤分佈不理想(Holtzman等人,2021)[30]。為了解決這些問題,Zhao等人(2021)[29]和Holtzman等人(2021)[30]提出了校準(Calibrating)的解決方案,即透過為有偏差的token新增補償來糾正偏差,使其變得無偏差。

什麼是正確的小樣本設定(few-shot setting)?

關於小樣本設定(few-shot setting)本身有很多討論:在小資料集上進行微調會出現不穩定的情況(Dodge et al., 2020[31]; Zhang et al., 2021[32]),不同的資料分割可能會對效能產生很大的影響。

以前的工作中採取了各種設定,但為了考慮到few-shot的巨大差異,需要對小樣本資料的資料分割進行多次取樣和使用不同seeds進行多次試驗,以進行嚴格的小樣本評估(這就是我們以前工作中的做法)。

但是有一個經常被忽視的問題是,在只有幾張照片的情況下,我們不能假設一個大的development set。為了解決這個問題,Schick和Schütze(2021)[33]沒有采用development set,而是採用固定的超引數(在這樣一個充滿變化的環境中,這類似於“在黑暗中射擊”,可能會產生不直觀的結果),而在我們的工作中,我們對一個與訓練集相同大小的小樣本development set進行取樣,所以我們可以在保持小樣本的同時調整超引數。

Perez等人(2021年)[34]認為,先前的工作高估了LMs的小樣本效能,因為他們或多或少地採取了許多已有的例子來進行超引數調整、模型開發或prompt設計,他們提倡 “true few-shot learning” 設定。這與我們的觀點是一致的,即你只能假設小樣本的dev案例。

然而,在現實世界中,我們很難實現 ”真正的小樣本學習“,因為你需要足夠多的例子來驗證你的模型至少在一個或兩個任務上是有效的。只要設計的模型能夠很好地泛化到其他的小樣本任務,它就是一個好的小樣本模型。在我們的工作中,我們用SST-2和SNLI進行實驗,表明我們的方法可以很好地推廣到其他13種NLU任務。(對於這一部分技術創新感興趣的小夥伴,可以關注ACL’21 paper, "Making Pre-trained Language Models Better Few-shot Learners")。

參考資料

https://arxiv.org/abs/2105.11447

https://arxiv.org/abs/2005.14165

https://arxiv.org/abs/2103.08493

https://arxiv.org/abs/2001.07676

https://arxiv.org/abs/1910.10683

https://cdn.openai.com/resear...

https://arxiv.org/abs/1909.01066

https://arxiv.org/abs/1909.00505

https://arxiv.org/abs/1911.12543

https://arxiv.org/abs/1912.13283

https://arxiv.org/abs/2001.07676

https://arxiv.org/abs/2012.15723

https://arxiv.org/abs/2103.11955

https://arxiv.org/abs/2104.04670

https://arxiv.org/abs/2104.14690

https://arxiv.org/pdf/1909.04...

https://arxiv.org/abs/2010.15980

https://arxiv.org/abs/1908.07125

https://arxiv.org/abs/1909.01066

https://arxiv.org/abs/1803.03635

https://arxiv.org/abs/2104.05240

https://arxiv.org/abs/2104.06599

https://arxiv.org/abs/2101.00190

https://arxiv.org/abs/2105.11259

https://arxiv.org/abs/2104.08691

https://arxiv.org/abs/2103.10385

https://arxiv.org/abs/2101.06804

https://arxiv.org/abs/2104.08786

https://arxiv.org/abs/2102.09690

https://arxiv.org/abs/2104.08315

https://arxiv.org/abs/2002.06305

https://arxiv.org/abs/2006.05987

https://arxiv.org/abs/2009.07118

https://arxiv.org/abs/2105.11447

本文經原作者授權,由Baihai IDP編譯。如需轉載譯文,請聯絡獲取授權。(原文連結:https://thegradient.pub/promp...

本文參與了SegmentFault 思否寫作挑戰賽,歡迎正在閱讀的你也加入。

相關文章