劉鵬飛老師認(rèn)為NLP目前為止經(jīng)歷了四個(gè)階段(范式):
完全監(jiān)督機(jī)器學(xué)習(xí)
完全監(jiān)督深度學(xué)習(xí)
預(yù)訓(xùn)練模型微調(diào): 預(yù)訓(xùn)練->微調(diào)->預(yù)測(cè)
Prompt提示學(xué)習(xí):預(yù)訓(xùn)練->提示->預(yù)測(cè)
在階段①中,我認(rèn)為work的本質(zhì)是特征,即特征的選取、衍生、側(cè)重上的針對(duì)性工程。而在階段②中更多的是對(duì)數(shù)據(jù)集與結(jié)構(gòu)的抽象化構(gòu)建,無論是使用Conv還是Attention,大家總能講出來為什么work的好故事。階段③中的本質(zhì)就是無監(jiān)督方法了,無論是像BERT一樣構(gòu)建MLM/NSP,還是各種變體(PLM,DAE)也都是在如何更好的訓(xùn)練預(yù)訓(xùn)練模型這一問題上下足了功夫。
在階段④中,Prompt真正的不同是把焦點(diǎn)放在了讓下游任務(wù)來適應(yīng)語(yǔ)言模型,而不是上述三個(gè)階段中的魔改語(yǔ)言模型來適應(yīng)下游任務(wù)的變化。至于為什么這么做?我想可能有以下兩點(diǎn)原因:
- 語(yǔ)言模型越大 = 微調(diào)難度越大
- 相信語(yǔ)言模型具有獨(dú)立解決NLP問題的能力
其實(shí)第一點(diǎn)沒什么好解釋的,預(yù)訓(xùn)練模型越大,所需要的預(yù)訓(xùn)練預(yù)料也就越大,參數(shù)也就越多。如果微調(diào)時(shí)沒有足夠的數(shù)據(jù),也就沒有辦法達(dá)到一個(gè)好的Fine-tuning效果。第二點(diǎn)也很好理解,預(yù)訓(xùn)練語(yǔ)言模型的知識(shí)相當(dāng)豐富,沒有必要為了利用它而去進(jìn)行重構(gòu)。
1. 講講Prompt方法
我們來先看一看什么是Prompt,在正常的預(yù)訓(xùn)練模型中,微調(diào)是這樣的
Cheese in French is 【MASK】
而在Prompt Tuning中,將預(yù)訓(xùn)練模型直接拿過來用,將任務(wù)轉(zhuǎn)化為這樣的形式
Translate English to French: /* task description */
cheese => ___ /* prompt */
上述這個(gè)例子是一個(gè)zero-shot learning
,我們?cè)賮砜纯?code>one-shot learning:
Translate English to French: /* task description */
sea otter => loutre de mer /* example */
cheese => ___ /* prompt */
在硬件耗材和語(yǔ)料規(guī)模上兩者的差距是顯而易見的,而Prompt方法的性能隨著LM的增大而增強(qiáng),理論上LM是可以表現(xiàn)出無限學(xué)習(xí)的趨勢(shì)(超大規(guī)模語(yǔ)料加超大規(guī)模參數(shù)),所以Prompt展現(xiàn)的方法提供了更強(qiáng)大的限定域與相關(guān)性。總結(jié)一下Prompt的范式為:
自然語(yǔ)言指令(task description) + 任務(wù)demo(example) + 帶__的任務(wù)
而其中,自然語(yǔ)言指令與任務(wù)demo都是非必要存在的,當(dāng)然了,信息越少效果越差,總不能把所有的寶都?jí)涸趧e人訓(xùn)練的模型上。
2. Prompt Engineering構(gòu)建
2.1 Prompt Shape
簡(jiǎn)單來說,Cloze Prompt和Prefix Pompt分別對(duì)應(yīng)Prompt在句中還是句末。這個(gè)一般根據(jù)預(yù)訓(xùn)練模型來選擇:
- 需要用自回歸語(yǔ)言模型解決的生成任務(wù),Prefix Pompt往往更好,因?yàn)樗夏P蛷淖蟮接业奶攸c(diǎn)
- 需要用自編碼語(yǔ)言模型解決的掩碼任務(wù),Cloze Prompt往往更好,因?yàn)樗皖A(yù)訓(xùn)練任務(wù)的形式非常匹配
2.2 Manual Template Engineering
手動(dòng)編寫,懂的都懂,需要計(jì)算機(jī)實(shí)驗(yàn)、語(yǔ)言學(xué)理論、模型邏輯等方面的專業(yè)知識(shí)作為指導(dǎo)
2.3 Automated Template Learning
2.3.1 硬提示/離散提示(Hard Prompt/Discrete Prompt)
如上述例子一樣,硬提示即搜索空間是離散的。一般需要算法工程師在下游任務(wù)上具備非常豐富的經(jīng)驗(yàn)以及了解原預(yù)訓(xùn)練模型的底層概念,一般硬提示的準(zhǔn)確率會(huì)不及Fine-tuning的SOTA,而且不同的Prompt對(duì)模型的影響非常大,像是提示的長(zhǎng)度提示詞匯的位置等等,一點(diǎn)Prompt的微小差別,可能會(huì)造成效果的巨大差異。
所以我們要做的就是兩件事:
- 設(shè)計(jì)一個(gè)合適的提示模板,創(chuàng)造一個(gè)完形填空的題目
- 設(shè)計(jì)一個(gè)合適的填空答案,創(chuàng)造一個(gè)完型填空的選項(xiàng)
具體有以下這么幾種方式:
- Prompt Mining:從大的語(yǔ)料庫(kù)中進(jìn)行挖掘(一般是挖掘輸入與輸出之間的高頻詞作為模板構(gòu)建元素)
- Prompt Paraphrasing:參考文本數(shù)據(jù)增強(qiáng)方法,可以做seed Prompt的同義詞替換,跨語(yǔ)種翻譯等
- Gradient-based Search:從候選詞中選擇一些詞作為Prompt并參與訓(xùn)練,根據(jù)梯度下降對(duì)選擇詞重新排列組合
- Prompt Generation:通過文本生成模型直接生成一個(gè)Prompt
- Prompt Scoring:根據(jù)語(yǔ)言模型對(duì)所有候選Prompt打分,選擇一個(gè)對(duì)高分的Prompt使用
總而言之,上述Hard Prompt方法還是會(huì)輸出一個(gè)叫能被人類理解的句子
,為了不拘泥于人類的直觀理解(機(jī)器也未必會(huì)理解),還有一些方法可以構(gòu)建連續(xù)性的向量作為Prompt
2.3.2 軟提示/連續(xù)提示(Continuous prompt / Soft prompt)
因?yàn)橛蔡崾镜南鄬?duì)不穩(wěn)定性(過多融入語(yǔ)言符號(hào)),軟提示概念即將Prompt的生成作為模型的一個(gè)任務(wù)來學(xué)習(xí),也就是將上述確定性的自然語(yǔ)言轉(zhuǎn)化為機(jī)器進(jìn)行自我搜索的過程。
-
Prefix-tuning:在輸出前加上一串連續(xù)的向量(前綴prefix),保持PLM參數(shù)不變,僅訓(xùn)練該向量。從數(shù)學(xué)上講,這包括在給定可訓(xùn)練前綴矩陣
和由
參數(shù)化的固定PLM的情況下,對(duì)以下對(duì)數(shù)似然目標(biāo)進(jìn)行優(yōu)化:
是時(shí)間步長(zhǎng)
處所有神經(jīng)網(wǎng)絡(luò)層的串聯(lián)。如果相應(yīng)的時(shí)間步長(zhǎng)在前綴內(nèi)(
是
),則直接從
復(fù)制,否則使用PLM計(jì)算
- Tuning Initialized with Discrete Prompts:即先找到一個(gè)Hard Prompt,然后再基于該模板初始化Prompt的token,最后微調(diào)這些特殊token的embedding,較為簡(jiǎn)單
- Hard-Soft Prompt Hybrid Tuning:在手工模板中添加一些可學(xué)習(xí)的embedding,作為結(jié)合
- P-turning:在3的基礎(chǔ)上,通過BiLSTM的輸出來表示Promptembedding,以便讓Prompt內(nèi)部產(chǎn)生一定程度的交互