論文標(biāo)題:Improving Language Understanding by Generative Pre-Training
論文鏈接:https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
論文來源:OpenAI
一、概述
從無標(biāo)注文本中高效學(xué)習(xí)的能力對于緩解對監(jiān)督學(xué)習(xí)的依賴是很關(guān)鍵的。很多自然語言處理任務(wù)依賴于大量的標(biāo)注數(shù)據(jù),對于這些任務(wù)來說,能夠從無標(biāo)注數(shù)據(jù)中學(xué)習(xí)的無監(jiān)督方法就成了重要的替代方法。然而,從未標(biāo)注的文本中利用單詞級以上的信息具有挑戰(zhàn)性,主要有兩個原因:
①目前尚不清楚哪種類型的優(yōu)化目標(biāo)在學(xué)習(xí)對遷移有用的文本表示時最有效;
②對于將這些學(xué)習(xí)到的表征轉(zhuǎn)移到目標(biāo)任務(wù)的最有效方法,目前還沒有達(dá)成共識。
在本文中探索了一種用于語言理解的半監(jiān)督方法,也就是GPT,其采用無監(jiān)督預(yù)訓(xùn)練與有監(jiān)督微調(diào)相結(jié)合的方式。本文的目標(biāo)是學(xué)習(xí)一種普遍的表征,它可以不需要任何適應(yīng)就能轉(zhuǎn)移到廣泛的任務(wù)中,而且不要求這些目標(biāo)任務(wù)與未標(biāo)注語料庫處于同一域中。首先,我們在未標(biāo)注數(shù)據(jù)上使用語言建模目標(biāo)函數(shù)。隨后,我們使用相應(yīng)的監(jiān)督目標(biāo)函數(shù)將這些參數(shù)調(diào)整到目標(biāo)任務(wù)。
GPT采用Transformer作為模型架構(gòu)。Transformer在捕獲長程依賴方面能力優(yōu)越,相較于循環(huán)網(wǎng)絡(luò)是更合適的選擇。在進(jìn)行下游任務(wù)遷移時,GPT采用特定于任務(wù)的輸入適配方法,將結(jié)構(gòu)化文本輸入處理為單個連續(xù)的token序列。這些適配使我們能夠在對預(yù)訓(xùn)練模型的架構(gòu)進(jìn)行最小更改的情況下有效地進(jìn)行微調(diào)。
GPT在進(jìn)行實(shí)驗的12個數(shù)據(jù)集中的9個上取得了新的SOTA結(jié)果。舉例來說在常識推理任務(wù)(Stories Cloze Test)上取得了8.9%的提升,在問答任務(wù)(RACE)上取得了5.7%的提升,在文本蘊(yùn)含任務(wù)(MultiNLI)取得了1.5%的提升,另外在GLUE多任務(wù)benchmark數(shù)據(jù)集上取得了5.5%的提升。
二、方法
GPT的訓(xùn)練過程主要包括兩個階段。第一個階段是利用一個大的文本語料庫來學(xué)習(xí)一個高容量的語言模型,接著第二個階段進(jìn)行微調(diào),也就是利用標(biāo)注數(shù)據(jù)將模型適配到一個下游任務(wù)。
- 無監(jiān)督預(yù)訓(xùn)練
給定一個無監(jiān)督語料庫,其token集合用來表示,我們使用一個標(biāo)準(zhǔn)語言建模目標(biāo)函數(shù)來最大化以下似然:
這里的是上下文窗口的大小。條件概率
使用參數(shù)為
的神經(jīng)網(wǎng)絡(luò)來建模,這些參數(shù)使用隨機(jī)梯度下降來訓(xùn)練。在本文的實(shí)驗中,使用一個多層Transformer decoder(其實(shí)是Transformer decoder中的masked多頭自注意力層加上前饋層,沒有使用中間那一層)來作為語言模型,這是Transformer的變種。這個模型在輸入文本token上應(yīng)用多頭自注意力機(jī)制,然后使用前饋層來產(chǎn)生一個目標(biāo)token的輸出分布。以下是GPT預(yù)測當(dāng)前token的過程:
這里的相當(dāng)于當(dāng)前預(yù)測token的上下文指示向量,用于從word embedding矩陣
(
是詞典大小,
是word embedding的維度)中取出當(dāng)前預(yù)測token的上下文embedding向量。
在這里表示使用的Transformer 層的數(shù)量,
是位置矩陣,
是
層的輸出。
- 有監(jiān)督微調(diào)
在處理下游任務(wù)時需要將模型參數(shù)適配到相應(yīng)的任務(wù)。我們假設(shè)一個有標(biāo)注數(shù)據(jù)集,其中每個實(shí)例包含一個輸入token的序列
以及一個標(biāo)簽
。輸入token序列將通過GPT以獲取其最后一層的最后一個token的輸出
,然后將其通過一個參數(shù)為
的線性輸出層來預(yù)測
:
這相當(dāng)于最大化以下似然:
另外本文發(fā)現(xiàn)在微調(diào)時將預(yù)訓(xùn)練的目標(biāo)函數(shù)作為輔助目標(biāo)是有幫助的,這可以:
①提高有監(jiān)督模型的泛化性能;
②加速收斂。
因此在微調(diào)時可以優(yōu)化以下目標(biāo)函數(shù)(作為權(quán)重超參數(shù)):
總而言之,在微調(diào)時需要的額外參數(shù)只有,以及分隔符token的embedding(后面會提到)。
- 特定于任務(wù)的輸入轉(zhuǎn)換
對于某些任務(wù),如文本分類,我們可以直接如上所述微調(diào)我們的模型。然而某些其他任務(wù),如問答或文本蘊(yùn)含,具有結(jié)構(gòu)化的輸入,如有序的句子對,或文檔、問題和答案的三元組。由于我們的預(yù)訓(xùn)練模型是在連續(xù)的文本序列上訓(xùn)練的,所以我們需要進(jìn)行一些修改才能將其應(yīng)用于這些任務(wù)。GPT的策略是將這些任務(wù)的結(jié)構(gòu)化輸入轉(zhuǎn)換為GPT可以處理的有序序列,這樣可以避免對模型進(jìn)行廣泛的更改。下圖展示了針對各種任務(wù)的適配。所有的輸入變換都需要添加隨機(jī)初始化的開始和結(jié)束token<s>和<e>。

- 文本蘊(yùn)含
對文本蘊(yùn)含數(shù)據(jù)集中實(shí)例的處理就是將前提和假設(shè)
中間用分隔符$隔開。
- 文本相似性
對于相似性任務(wù),兩個對比的句子沒有固有的順序,為了反映這一點(diǎn)我們將兩個句子按不同的順序排列,中間都用分隔符$隔開。然后單獨(dú)處理兩個順序的拼接獲得兩個,最后將這兩個
element-wise地加起來再輸入到線性輸出層。
- 問答及常識推理
對于這一類的任務(wù),每個實(shí)例都包含一個文檔、問題
以及一個可能的答案集合
。我們將文檔
與問題
直接拼接起來,然后與每個答案
拼接(需要添加分隔符$)。所有這些拼接的token序列被GPT單獨(dú)處理然后用一個softmax來預(yù)測可能的答案。
三、實(shí)驗
- 數(shù)據(jù)集
無標(biāo)注數(shù)據(jù)集使用BooksCorpus書籍?dāng)?shù)據(jù)集。下游任務(wù)數(shù)據(jù)集如下表所示:

- 實(shí)驗
各類下游任務(wù)的實(shí)驗結(jié)果如下圖所示:



- 分析
探究了模型層數(shù)的影響與zero-shot設(shè)置的模型性能:

- 消融實(shí)驗
GPT的消融實(shí)驗:
