您當前的位置:首頁 > 歷史

P-tuning:自動構建模版,釋放語言模型潛能

作者:由 PaperWeekly 發表于 歷史時間:2021-04-12

作者|蘇劍林

單位|追一科技

研究方向|NLP、神經網路

在之前的文章

必須要GPT-3嗎?不,BERT的MLM模型也能小樣本學習

中,我們介紹了一種名為

Pattern-Exploiting Training(PET)

的方法,它透過人工構建的模版與BERT的MLM模型結合,能夠起到非常好的零樣本、小樣本乃至半監督學習效果,而且該思路比較優雅漂亮,因為它將預訓練任務和下游任務統一起來了。然而,人工構建這樣的模版有時候也是比較困難的,而且不同的模版效果差別也很大,如果能夠透過少量樣本來自動構建模版,也是非常有價值的。

最近Arxiv上的論文《GPT Understands, Too》提出了名為P-tuning的方法,成功地實現了

模版的自動構建

。不僅如此,藉助P-tuning,GPT在SuperGLUE上的成績首次超過了同等級別的BERT模型,這顛覆了一直以來“GPT不擅長NLU”的結論,也是該論文命名的緣由。

P-tuning:自動構建模版,釋放語言模型潛能

論文標題:GPT Understands, Too

論文連結:

https://

arxiv。org/abs/2103。1038

5

程式碼連結:

https://

github。com/THUDM/P-tuni

ng

什麼是模版

所謂PET,主要的思想是藉助由自然語言構成的模版(英文常稱Pattern或Prompt),將下游任務也轉化為一個完形填空任務,這樣就可以用BERT的MLM模型來進行預測了。比如下圖中透過條件字首來實現情感分類和主題分類的例子:

P-tuning:自動構建模版,釋放語言模型潛能

P-tuning:自動構建模版,釋放語言模型潛能

▲ 透過特定模版將情感分類轉換為MLM任務

當然,這種方案也不是隻有MLM模型可行,用GPT這樣的單向語言模型(LM)其實也很簡單:

P-tuning:自動構建模版,釋放語言模型潛能

▲ 透過特定模版將新聞分類轉換為MLM任務

P-tuning:自動構建模版,釋放語言模型潛能

▲ 透過特定模版將新聞分類轉換為LM任務

不過由於語言模型是從左往右解碼的,因此預測部分只能放在句末了(但還可以往補充字首說明,只不過預測部分放在最後)。

某種意義上來說,這些模版屬於語言模型的“探針”,我們可以透過模版來抽取語言模型的特定知識,從而做到不錯的零樣本效果,而配合少量標註樣本,可以進一步提升效果,這些在

必須要GPT-3嗎?不,BERT的MLM模型也能小樣本學習

中已經比較詳細討論過了。

然而,前面已經說了,對於某些任務而言,人工構建模版並不是那麼容易的事情,模型的優劣我們也不好把握,而不同模型之間的效果差別可能很大,

在這種情況下,人工標註一些樣本可能比構建模版還要輕鬆得多

。所以,如何根據已有的標註樣本來自動構建模版,便成了一個值得研究的問題了。

P-tuning

P-tuning重新審視了關於模版的定義,放棄了“模版由自然語言構成”這一常規要求,從而將模版的構建轉化為連續引數最佳化問題,雖然簡單,但卻有效。

模版的反思

首先,我們來想一下“

什麼是模版

”。直觀來看,模版就是由自然語言構成的字首/字尾,透過這些模版我們使得下游任務跟預訓練任務一致,這樣才能更加充分地利用原始預訓練模型,起到更好的零樣本、小樣本學習效果。

等等,我們真的在乎模版是不是“自然語言”構成的嗎?

並不是。本質上來說,我們並不關心模版長什麼樣,

我們只需要知道模版由哪些token組成,該插入到哪裡,插入後能不能完成我們的下游任務,輸出的候選空間是什麼

。模版是不是自然語言組成的,對我們根本沒影響,“自然語言”的要求,只是為了更好地實現“一致性”,但不是必須的。於是,P-tuning考慮瞭如下形式的模版:

P-tuning:自動構建模版,釋放語言模型潛能

▲ P-tuning直接使用[unused*]的token來構建模版,不關心模版的自然語言性

這裡的[u1]~[u6],代表BERT詞表裡邊的

[unused1]~[unused6]

,也就是用幾個從未見過的token來構成模板,這裡的token數目是一個超引數,放在前面還是後面也可以調整。接著,為了讓“模版”發揮作用,我們用標註資料來求出這個模板。

如何去最佳化

這時候,根據標註資料量的多少,我們又分兩種情況討論。

第一種,標註資料比較少

。這種情況下,我們固定整個模型的權重,只最佳化[unused1]~[unused6]這幾個token的Embedding,換句話說,其實我們就是要學6個新的Embedding,使得它起到了模版的作用。這樣一來,因為模型權重幾乎都被固定住了,訓練起來很快,而且因為要學習的引數很少,因此哪怕標註樣本很少,也能把模版學出來,不容易過擬合。

第二種,標註資料很充足

。這時候如果還按照第一種的方案來,就會出現欠擬合的情況,因為只有6個token的可最佳化引數實在是太少了。因此,我們可以放開所有權重微調,原論文在SuperGLUE上的實驗就是這樣做的。讀者可能會想:這樣跟直接加個全連線微調有什麼區別?原論文的結果是這樣做效果更好,可能還是因為跟預訓練任務更一致了吧。

P-tuning:自動構建模版,釋放語言模型潛能

▲ P-tuning在SuperGLUE上的表現

此外,在上面的例子中,

目標token

如“很”、“體育”是認為選定的,那麼它們可不可以也用[unused*]的token代替呢?答案是可以,但也分兩種情況考慮:1、在標註資料比較少的時候,人工來選定適當的目標token效果往往更好些;2、在標註資料很充足的情況下,目標token用[unused*]效果更好些,因為這時候模型的最佳化空間更大一些。

增強相關性

在原論文中,P-tuning並不是隨機初始化幾個新token然後直接訓練的,而是透過一個小型的LSTM模型把這幾個Embedding算出來,並且將這個LSTM模型設為可學習的。這樣多繞了一步有什麼好處呢?原論文大概的意思是:

LSTM出現的token表示相關性更強,某種程度上來說更像“自然語言”(因為自然語言的token之間不是獨立的),此外還能防止區域性最優

。我在Github上進一步向作者確認了一下(參考

這裡

),效果上的差別是透過LSTM多繞一步的方法可以使得模型收斂更快、效果更優。

然而,這樣多了一個LSTM,總感覺有些彆扭,而且實現上也略微有點麻煩。按照作者的意思,LSTM是為了幫助模版的幾個token(某種程度上)更貼近自然語言,但這並不一定要用LSTM生成,而且就算用LSTM生成也不一定達到這一點。筆者認為,更自然的方法是在訓練下游任務的時候,不僅僅預測下游任務的目標token(前面例子中的“很”、“新聞”),

還應該同時做其他token的預測。

比如,如果是MLM模型,那麼也隨機mask掉其他的一些token來預測;

如果是LM模型,則預測完整的序列,而不單單是目標詞

。這樣做的理由是:因為我們的MLM/LM都是經過自然語言預訓練的,所以我們(迷之自信地)認為能夠很好完成重構的序列必然也是接近於自然語言的,因此這樣增加訓練目標,也能起到讓模型更貼近自然語言的效果。經過筆者的測試,加上這樣輔助目標,相比單純最佳化下游任務的目標,確實提升了效果。

實驗與效果

所謂“talk is cheap, show me the code”,又到了喜聞樂見的實驗時間了。這裡分享一下P-tuning的實驗結果,其中還包括筆者對P-tuning的實現思路,以及筆者在中文任務上的實驗結果。

停止的梯度

怎麼實現上述的P-tuning演算法比較好呢?如果是放開所有權重訓練,那自然是簡單的,跟普通的BERT微調沒有什麼區別。關鍵是在小樣本場景下,

如何實現“只最佳化幾個token”呢?

當然,實現的方法也不少,比如為那幾個要最佳化的token重新構建一個Embedding層,然後拼接到BERT的Embedding層中,然後訓練的時候只放開新Embedding層的權重。但這樣寫對原來模型的改動還是蠻大的,最好的方法是儘可能少改動程式碼,讓使用者幾乎無感。為此,筆者構思了一種用stop_gradient簡單修改Embedding層的方案,大體上是將Embedding層修改如下:

class

PtuningEmbedding

Embedding

):

“”“新定義Embedding層,只最佳化部分Token

”“”

def

call

self

inputs

mode

=

‘embedding’

):

embeddings

=

self

embeddings

embeddings_sg

=

K

stop_gradient

embeddings

mask

=

np

zeros

((

K

int_shape

embeddings

)[

0

],

1

))

mask

1

9

+=

1

# 只最佳化id為1~8的token

self

embeddings

=

embeddings

*

mask

+

embeddings_sg

*

1

-

mask

return

super

PtuningEmbedding

self

call

inputs

mode

變數經過stop_gradient運算元後,在反向傳播的時候梯度為0,但是前向傳播不變,因此在上述程式碼中,前向傳播的結果不會有變化,但是反向傳播求梯度的時候,梯度不為0的token由mask變數控制,其餘token的梯度都為零,因此就實現了只更新部分token。

完整程式碼可見:

https://

github。com/bojone/P-tun

ing

對了,原論文也開源了程式碼:

https://

github。com/THUDM/P-tuni

ng

測試與效果

前面已經分享了原作者在SuperGLUE上的實驗結果,顯示出如果配合P-tuning,那麼:

1)GPT、BERT的效果相比直接finetune都有所提升;2)GPT的效果還能超過了BERT

。這表明GPT不僅有NLG的能力,也有NLU能力,可謂是把GPT的潛能充分“壓榨”出來了,當然BERT配合P-tuning也有提升,說明P-tuning對語言模型潛能的釋放是較為通用的。

原論文的實驗比較豐富,建議讀者仔細閱讀原論文,相信會收穫頗多。特別指出的是原論文的Table 2最後一列,當預訓練模型足夠大的時候,我們的裝置可能無法finetune整個模型,而P-tuning可以選擇只最佳化幾個Token的引數,因為最佳化所需要的視訊記憶體和算力都會大大減少,

所以P-tuning實則上給了我們一種在有限算力下呼叫大型預訓練模型的思路。

P-tuning:自動構建模版,釋放語言模型潛能

▲ P-tuning在各個體量的語言模型下的效果

當然,筆者一直以來的觀點是“

沒有在中文上測試過的演算法是沒有靈魂的

”,因此筆者也在中文任務上簡單測試了,測試任務跟

必須要GPT-3嗎?不,BERT的MLM模型也能小樣本學習

一致,都是情感分類的小樣本學習,測試模型包括BERT和GPT,兩者的候選模版分別如下圖:

P-tuning:自動構建模版,釋放語言模型潛能

▲ 筆者在中文情感分類上使用的“BERT+P-tuning”模版

▲ 筆者在中文情感分類上使用的“BERT+P-tuning”模版

P-tuning:自動構建模版,釋放語言模型潛能

▲ 筆者在中文情感分類上使用的“GPT+P-tuning”模版

注意,對於LM模型,字首的引入非常重要,只引入字尾時效果會明顯變差;而對於MLM模型,字首的效果通常也優於字尾。總的效果如下表:

\begin{array}{c|cc}  \hline  & \text{驗證集} & \text{測試集} \\  \hline  \text{小樣本直接微調} & 88.93\% & 89.34\% \\  \text{VAT半監督學習} & 89.83\% & 90.37\% \\  \hline  \text{PET零樣本} & 85.17\% & 84.27\% \\  \text{PET無監督} & 88.05\% & 87.53\% \\  \text{PET小樣本} & 89.29\% & 89.18\% \\  \text{PET半監督} & 90.09\% & 89.76\% \\  \hline  \text{BERT + P-tuning} & 89.81\% & 89.75\% \\  \text{GPT + P-tuning} & 89.30\% & 88.51\% \\  \hline  \end{array}\\

其中“小樣本”只用到了“少量標註樣本”,“無監督”則用到了“大量無標註樣本”,“半監督”則用到了“少量標註樣本+大量無標註樣本”,“P-tuning”都是小樣本,PET的幾個任務報告的是最優的人工模版的結果,其實還有更差的人工模版。從小樣本角度來看,P-tuning確實取得了最優的小樣本學習效果;從模版構建的角度來看,P-tuning確實也比人工構建的模版要好得多;從模型角度看,P-tuning確實可以將GPT的分類效能發揮到跟BERT相近,從而揭示了GPT也有很強的NLU能力的事實。

進一步理解

這一節將會介紹筆者對P-tuning的進一步思考,以求從多個維度來理解P-tuning。

離散 vs 連續

在P-tuning之前,也已經有一些在做模版的自動構建,如

《How Can We Know What Language Models Know?》

《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》

等,但它們搜尋的都是在離散空間下搜尋的自然語言模版,所以效果有所限制,並沒有取得特別突出的結果。

相反,P-tuning放棄了“模版由自然語言構成”這一要求,從而將其變成了可以簡單梯度下降求解的連續引數問題,效果還更好。同時,這一改動意味著P-tuning突出了模版的本質——即

模版的關鍵在於它是怎麼用的,不在於它由什麼構成

——給人一種去蕪存菁、眼前一亮額的感覺,確實值得點贊。

注:經讀者提醒,年初有一篇論文

《Prefix-Tuning: Optimizing Continuous Prompts for Generation》

提出的Prefix-Tuning方法其實已經相當接近P-tuning,兩者都設計了非自然語言的模版,只不過Prefix-Tuning主要關心NLG的應用而P-tuning更加關心NLU的應用。

Adapter

我們還可以從

Adapter

的角度來理解P-tuning。BERT出來後不久,Google在論文

《Parameter-Efficient Transfer Learning for NLP》

中提出了一種名為Adapter的微調方式,它並不是直接微調整個模型,而是固定住BERT原始權重,然後在BERT的基礎上新增一些殘差模組,只最佳化這些殘差模組,由於殘差模組的引數更少,因此微調成本更低。Adapter的思路實際上來源於CV的

《Learning multiple visual domains with residual adapters》

,不過這兩年似乎很少看到了,也許是因為它雖然提高了訓練速度,但是預測速度卻降低了,精度往往還有所損失。

在P-tuning中,如果我們不將新插入的token視為“模版”,是將它視為模型的一部分,那麼實際上P-tuning也是一種類似Adapter的做法,同樣是固定原模型的權重,然後插入一些新的可最佳化引數,同樣是只最佳化這些新引數,只不過這時候新引數插入的是Embedding層。因此,從這個角度看,P-tuning與Adapter有頗多異曲同工之處。

為什麼有效

然後,還有一個值得思考的問題:

為什麼P-tuning會更好?

比如全量資料下,大家都是放開所有權重,P-tuning的方法依然比直接finetune要好,為啥呢?

事實上,提出這個問題的讀者,應該是對BERT加個全連線層的直接finetune做法“習以為常”了。很明顯,不管是PET還是P-tuning,它們其實都更接近預訓練任務,而加個全連線層的做法,其實還沒那麼接近預訓練任務,所以

某種程度上來說,P-tuning有效更加“顯然”,反而是加個全連線層微調為什麼會有效才是值得疑問的。

去年有篇論文

《A Mathematical Exploration of Why Language Models Help Solve Downstream Tasks》

試圖回答這個問題,大致的論證順序是:

1。預訓練模型是某種語言模型任務;

2。下游任務可以表示為該種語言模型的某個特殊情形;

3。當輸出空間有限的時候,它又近似於加一個全連線層;

4。所以加一個全連線層微調是有效的。

可以看到,該論文的假設主要是第2點,其實就是直接假設了下游任務可以表達為類似PET的形式,然後才去證明的。所以這進一步說明了,PET、P-tuning等才是更自然的使用預訓練模型的方式,加全連線直接finetune的做法其實只是它們的推論罷了,也就是說,PET、P-tuning才是返璞歸真、迴歸本質的方案,所以它們更有效。

簡單的總結

本文介紹了P-tuning,它是一種模版的自動構建方法,而透過模版我們可以從語言模型中抽取知識,完成零樣本、小樣本等學習任務,並且效果往往還更好。藉助P-tuning,GPT也能實現優秀的NLU效果,在SuperGLUE上的表現甚至超過了BERT。除此之外,P-tuning還一種在有限算力下呼叫大型預訓練模型的有效方案。

#投 稿 通 道#

如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?

答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋樑,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是

最新論文解讀

,也可以是

學習心得

技術乾貨

。我們的目的只有一個,讓知識真正流動起來。

來稿標準:

• 稿件確係個人

原創作品

,來稿需註明作者個人資訊(姓名+學校/工作單位+學歷/職位+研究方向)

• 如果文章並非首發,請在投稿時提醒並附上所有已釋出連結

• PaperWeekly 預設每篇文章都是首發,均會新增“原創”標誌

投稿方式:

• 方法一:在PaperWeekly知乎專欄頁面點選“投稿”,即可遞交文章

• 方法二:傳送郵件至:hr@paperweekly。site ,所有文章配圖,請單獨在附件中傳送

• 請留下即時聯絡方式(微信或手機),以便我們在編輯釋出時和作者溝通

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報道人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點選

「交流群」

,小助手將把你帶入 PaperWeekly 的交流群裡。

加入社群:

http://paperweek。ly

微信公眾號:PaperWeekly

新浪微博:@PaperWeekly

標簽: 模版  tuning  模型  token  bert