GPT(Generative Pre-Training)出自2018年論文《Improving Language Understanding by Generative Pre-Training》。在原論文中提出了半監(jiān)督學(xué)習(xí)方法,即結(jié)合了無監(jiān)督的預(yù)訓(xùn)練和有監(jiān)督的fine-tuning。第一階段在未標(biāo)記數(shù)據(jù)集上訓(xùn)練語言模型來學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的初始參數(shù);第二階段使用響應(yīng)任務(wù)中的標(biāo)記數(shù)據(jù)將參數(shù)微調(diào)以適應(yīng)當(dāng)前任務(wù)。
下面我們先來看看GPT的語言模型的無監(jiān)督預(yù)訓(xùn)練,其結(jié)構(gòu)長(zhǎng)這樣:

上面我們提到,GPT在語言模型這塊采用的是無監(jiān)督預(yù)訓(xùn)練。具體的,對(duì)于無標(biāo)簽文本,極大化下面似然函數(shù):
其中是上下文窗口的大小。
語言模型中使用多層Transformer decoder,輸入為詞嵌入以及單詞的位置信息,再對(duì)transformer_block的輸出向量做softmax,output為詞的概念分布:
其中是單詞的上下文向量(這里只有上文),
是詞嵌入向量,
是位置編碼向量。
說完無監(jiān)督預(yù)訓(xùn)練,我們接著說說有監(jiān)督fine-tuning。
假設(shè)一個(gè)有標(biāo)簽的數(shù)據(jù)集,每一條數(shù)據(jù)為一個(gè)單詞序列,及相應(yīng)的標(biāo)簽
,通過前面預(yù)訓(xùn)練的模型得到輸出
,再經(jīng)過線性輸出層來預(yù)測(cè)標(biāo)簽
:
;
損失函數(shù):;
最后將前面兩階段的目標(biāo)函數(shù)通過超參數(shù)相加訓(xùn)練整個(gè)模型:
。
關(guān)于如何改造下游NLP任務(wù),原論文給了一張圖:

分類:基本不用怎么變,加上一個(gè)起始符和終止符即可;
句子關(guān)系判斷:兩個(gè)句子中間再加個(gè)分隔符即可;
文本相似性判斷:把兩個(gè)句子順序顛倒下做出兩個(gè)輸入即可,這是為了告訴模型句子順序不重要;
多項(xiàng)選擇:做多路輸入,每一路把文章和答案選項(xiàng)拼接作為輸入即可。
GPT的效果:


GPT整體效果還是不錯(cuò)的,在12個(gè)任務(wù)里,9個(gè)達(dá)到了最好的效果。
前面我們介紹過ELMo,現(xiàn)在來看GPT其實(shí)和前者很類似。主要的不同點(diǎn)是:
特征提取器:ELMo用的是LSTM;GPT用的是Transformer,目前時(shí)間節(jié)點(diǎn)最厲害的特征提取器 (有點(diǎn)健忘的童鞋可以看看上一篇關(guān)于Transformer的介紹);
-
語言模型:ELMo采用雙向語言模型,利用單詞的上下文來預(yù)測(cè);GPT采用單向語言模型,只用單詞上文部分做預(yù)測(cè),拋棄了下文部分。
現(xiàn)在看來(參考Bert),GPT這個(gè)單向語言模型是個(gè)糟糕的選擇,丟掉了很多信息。單向語言模型限制了GPT在很多任務(wù)場(chǎng)景的效果。比如閱讀理解,需要同時(shí)根據(jù)上文和下文來做決策。