算是寫的非常清楚的GPT個版本的介紹了
從GPT三個版本的論文名也能看出各版本模型的重點:
GPT1:Imporoving Language Understanding By Generative Pre-training
----強調預訓練
GPT2:Lanuage Models Are Unsupervised Multitask Learners
----強調Unsupervised Multitask就是說下游任務fintune的時候不用重新調整模型結構了
GPT3:Language Models Are Few-shot Learners
---強調Few-shot 就是連finetune都剩了,巨大的參數空間,可以直接few-shot甚至zero-shot
github https://github.com/openai/gpt-3
from: https://blog.csdn.net/abc50319/article/details/108544357
摘要:本文是廣告系列第二十篇,主要介紹了GPT系列模型的發展流程。首先介紹了NLP中超強但不秀的GPT模型。GPT屬於典型的預訓練+微調的兩階段模型,將Transformer作為特征抽取器,使用單向語言模型,屬於NLP中非常重要的工作,同時還介紹了GPT模型下游如何改造成不同的NLP任務;然后介紹了有點火的GPT-2。相比於GPT來說GPT-2使用了更多更好的訓練數據,同時直接使用無監督的方式來完成下游任務;最后介紹了巨無霸GPT-3。相比於GPT-2,GPT-3直接把模型的規模做到極致,使用了45TB的訓練數據,擁有175B的參數量,真正詮釋了暴力出奇跡。GPT-3模型直接不需要微調了,不使用樣本或者僅使用極少量的樣本就可以完成下游NLP任務,尤其在很多數據集中模型的效果直接超越了最好效果的微調模型,真正幫助我們解決了下游任務需要標注語料的問題。對GPT系列模型感興趣的小伙伴可以一起溝通交流。
下面主要按照如下思維導圖進行學習分享:
01 NLP中超強但不秀的GPT模型
1.1 從Word2vec到GPT
GPT(“Generative Pre-Training”)也叫生成式預訓練模型,之所以說它超強但不秀的原因是作為NLP中極有價值的工作,比BERT出現的早,但是名聲卻遠遠不如BERT那么響亮。這里順便提一下NLP領域從Word2vec模型到GPT和BERT模型的推進流程幫小伙伴們更加深入的理解這個問題。下面是Word2vec、ELMO、GPT和BERT之間的關系圖:
圖1 Word2vec、ELMO、GPT和BERT之間的關系圖
NLP領域首先要解決的是文本的表示問題。對於計算機來說它並不認識各種稀奇古怪的字符,它只認識0和1,通過One-hot編碼我們可以將word轉化成01串。但是One-hot編碼存在高維稀疏的問題,所以我們將這些01串映射到低維向量空間中,這就是word embedding向量。而Word2vec就是將word映射到向量空間中的標志性模型。
Word2vec將word映射到向量空間中,並且可以根據兩個向量的距離長短來表示語義的相似度。但是Word2vec模型存在一個問題,一個word在不同的語句中可能表達不同的語義,但是在Word2vec的向量空間中只有唯一的一個點,所以存在詞的歧義性問題。針對這個問題,ELMO模型通過構建雙向LSTM網絡來獲取詞編碼、句法編碼和句義編碼三層embedding來動態的表示詞的語義,從而很好的解決了詞的歧義性問題;接着我們本篇的主角GPT模型就出來了。GPT模型使用Transformer作為特征抽取器,同時使用單向語言模型在NLP各種任務中刷榜成功。相比於ELMO模型來說GPT使用效果更好的Transformer來替代LSTM作為特征抽取器。但是沒高興多久,BERT就出來了。BERT不僅使用Transformer作為特征抽取器,而且使用雙向語言模型,刷新了NLP中各種任務的最好效果,很快搶了GPT的風頭。可以說BERT和GPT模型最大的區別就是使用了雙向語言模型,而BERT論文中的有效因子實驗也證明正是使用了雙向語言模型才帶來的模型效果大量的提升。
圖2 BERT有效因子分析實驗結果圖
1.2 深入理解GPT
雖說GPT的風頭被BERT搶了,但是不得不承認GPT是非常重要的NLP工作。要深入理解GPT模型,我們從以下幾個方面詳細分析:
(1) GPT兩階段模型
GPT是典型的預訓練+微調的兩階段模型。預訓練階段就是用海量的文本數據通過無監督學習的方式來獲取語言學知識,而微調就是用下游任務的訓練數據來獲得特定任務的模型。之前舉過一個例子來形容預訓練和微調的關系,我們從幼兒園到高中就像預訓練過程,不斷學習知識,這些知識包羅萬象包括語數英物化生等等,最重要的特征就是預訓練模型具有很好的通用性;然后讀大學的時候需要確定一個專業方向作為未來的職業,所以就會去重點學習專業知識,從而讓我們成為更加適合某個專業方向的人才,最重要的特征就是具有極強的專業性。通過這個例子大家可以理解預訓練模型和微調兩階段的差異和聯系。
(2) GTP預訓練模型結構
GPT預訓練模型結構主要有兩個重要的點:一個是使用Transformer作為特征抽取器,另一個是使用單向的語言模型。上面也說了GPT相比於ELMO模型效果更好的原因就是Transformer的特征抽取能力遠遠強於LSTM,這是非常明智的。后續NLP領域各種亮眼的模型基本上都是使用的Transformer架構,所以說率先將Transformer引入的GPT是非常重要的工作,這也是說它為啥強的原因。想了解更多關於Transformer的細節,小伙伴們可以看看我之前寫過的一篇文章:
廣告行業中那些趣事系列4:詳解從配角到C位出道的Transformer
還有一點就是GPT使用單向語言模型。GPT在預訓練的過程中僅僅使用語句中的上文。這里通過一個例子說明上下文的概念。我們現在有一句話:“GPT是預訓<>和微調的兩階段模型”。現在我們語言模型的目的是預測“預訓”后面跟着的詞,那么<>之前的“GPT是預訓”就代表上文,而<>之后的“和微調的兩階段模型”就代表下文。GPT使用單向語言模型和BERT使用雙向語言模型是它倆最大的區別。這里小提一句,GPT后續系列依然堅持使用單向語言模型。下面是GPT預訓練模型的網絡結構圖:
圖3 GPT預訓練模型網絡結構圖
(3) GPT模型下游改造
上面得到GPT預訓練模型之后,就可以根據下游任務進行改造和微調了。對於文本分類任務基本不需要怎么變動,只需要添加一個開始符號Start和終止符號Extract就可以了;對於語句包含類任務,需要在前提premise和假設hypothesis中間添加一個連接符號Delim就可以了;對於語句相似關系類任務,需要將句子1和句子2分別調整位置然后添加連接符號Delim拼接就可以了;對於多路問答類任務分別將問題Context和多個答案Answer分別進行拼接作為輸入。GPT下游改造如下圖所示:
圖4 GPT下游改造圖
(4) GPT模型效果
GPT模型效果還是非常出色的,12個任務數據集中9個達到了最好效果。下面是GPT論文中模型效果實驗圖:
圖5 GPT模型實驗效果圖
02 有點火的GPT-2
2.1 GPT-2預訓練模型的變化
相比於GPT來說,GPT-2模型的整體結構沒有發生太大的變化。預訓練過程使用了更多更好的數據進行訓練,同時使用了更大更多參數的Transformer。首先是Transformer模型參數擴容。通常的Transformer Big包含24個Block,GPT-2直接使用了48個Block,從而可以保存更多的語言學知識;模型擴容之后就是使用更多更好的數據進行預訓練。GPT使用大約5GB文本數據進行預訓練,GTP-2直接使用40GB的文本數據進行預訓練。GPT-2使用800W互聯網網頁數據WebText數據集進行預訓練。這些數據因為覆蓋主題廣,所以訓練出的模型具有更好的通用性。GPT-2不僅使用了更多的訓練數據,而且對數據的質量也進行了篩選,過濾出更高質量的網頁內容。
GPT-2還是堅持使用單向語言模型。雖然BERT模型已經證明了效果好的主要原因是使用了雙向語言模型,但是GPT-2依然堅持自我使用單向語言模型。這里猜測可能是以下兩個原因:其中一個原因是GPT是生成式模型,因為在生成式相關任務場景下一般只能看到上文,所以這種單向語言模型和實際應用場景是對應的。如果使用了下文,那么存在“提前偷看答案”的嫌疑;另一個原因是GPT和BERT模型最大的區別是使用單向語言模型,如果現在換成了雙向語言模型,那么GPT模型是否還有存在和發展的必要?這是個人的一點猜測,仁者見仁智者見智。
2.2 GPT-2下游任務的變化
GPT-2沒有采用GPT和BERT這種常規的預訓練+微調的兩階段模型,而是直接通過無監督的方式去完成下游任務。GPT-2采用這種方式的原因很簡單,它想證明預訓練使用了更多更好的數據得到的模型可以直接用於下游任務了。現在的問題是GPT-2使用無監督樣本做下游任務時如何識別不同的任務類型。GPT-2對於不同類型的任務輸入會加入一些引導字符來告訴模型如何正確預測目標。舉例來說,假如是文本摘要類任務,那么GPT-2在輸入的時候加“TL:DR”作為引導字符告訴模型這是文本摘要類任務。而模型的輸出和語言模型是一樣的,就是每輪輸出一個詞。當我們需要模型輸出的結果是一句話或者幾句話的時候,只需要將每輪輸出的詞連接起來就是我們想要的結果。GPT-2將所有NLP任務的輸出轉換成了和語言模型一樣的方式,每輪只輸出一個詞。
2.3 GPT-2的模型效果
GPT-2作為生成式模型來生成文本或者段落的能力是驚人的。通過下面的示例,我們先給出幾句話,后面的內容讓GPT-2來完成。可以看出,GPT-2生成的內容語法工整,語義一致,效果非常好。下面是GPT-2生成文本的例子:
圖6 GPT-2生成文本的示例
小結下,GPT-2相比於GPT來說模型整體的架構基本沒有什么變化,還是使用Transformer作為特征抽取器,還是堅持單向語言模型,不同的是使用了更大的模型更多的參數從而能夠存儲更多的語言學知識,然后使用更多更好的數據去訓練模型。對於下游任務直接使用無監督數據去完成任務,主要思想是因為我的預訓練模型足夠好,所以下游不需要有監督的數據去微調模型了。雖然相比於無監督模型效果好很多,但是相比於有監督模型效果還是差了點。GPT-2模型強有力的證明了使用更大的模型更多的數據是可以有效提升模型的效果。
03 巨無霸GPT-3
3.1 更大的模型,更多的訓練數據
最近一段時間GPT-3強力出擊,直接引爆NLP領域。如果說GPT-2模型已經足夠大了,那么GPT-3已經可以說是爆炸了。先從參數角度看看GPT-3到底有多大。最早的ELMO模型有94M,然后2018年7月GPT出世,模型參數有110M,接着BERT-Large有340M;后來GPT-2出世已經把參數弄到1.5b了;再后來隨着Turing NLG的出現直接將參數提升到17b,成為當時最大的模型;最后GPT-3出現了,直接將參數增加到175b,參數量基本上是第二名Turing NLG的十倍。通過這些現象咱們可以看出把模型做大似乎已經成為NLP領域的趨勢。有時候費盡心思開發和優化模型,各種花里胡哨的騷操作下來結果發現最后的效果還不如最簡單的用更大的模型更多的數據來的有效,這也是為啥那么多人不斷去優化預訓練模型的原因。下面是NLP領域各種模型參數量對比圖:
圖7 NLP領域各種模型參數量對比圖
接下來咱們從使用訓練數據的角度來看GPT-3到底有多大。BERT-Large使用了13G的數據,GPT-2使用了40G的數據,XLNet-Large使用了接近140G數據,之前說過RoBERTa模型能有很好的效果提升其中的一個重要原因是使用了將近176G的數據。這些在GPT-3面前就像小兒科一樣,因為GPT-3直接使用了45TB的數據來預訓練。下面是NLP領域各種模型使用數據量級對比圖:
圖8 NLP領域各種模型使用數據量級對比圖
GPT-3使用如此多的訓練數據,模型訓練過程中的計算量也是驚人的。下面是BERT系列、T5系列和GPT-3系列模型的計算量對比圖:
圖9 BERT系列、T5系列和GPT-3系列模型的計算量對比圖
因為模型包含更多的參數使用更多的數據,所以模型需要的計算量也不斷增大。可以說NLP后續是有錢有算力的天下,因為這樣的計算量普通公司基本已經“跑”不動了。
3.2 告別微調的GPT-3
因為GPT-3使用了天量級的數據來進行預訓練,所以學到的知識也更多更通用,以致於GPT-3打出的口號就是“告別微調的GPT-3”。相比於BERT這種預訓練+微調的兩階段模型,GPT-3的目標是模型更加通用,從而解決BERT這種下游任務微調需要依賴領域標注數據的情況。拿我們實際業務舉例,我主要做分本分類任務。對於使用BERT來完成文本分類任務來說,首先我需要使用海量的無標注文本數據進行預訓練學習語言學知識。幸運的是這種預訓練過程一般是一次性的,訓練完成后可以把模型保存下來繼續使用。很多大廠比如谷歌、Facebook等把得到的預訓練模型開源了出來,所以咱們只需要導入預訓練好的模型權重就可以直接使用了,相當於完成了模型的預訓練過程;第二階段就是微調了,對於文本分類等下游任務來說, 我們需要一批帶標簽的訓練語料來微調模型。不同的下游任務會需要特定的訓練語料。這時候面臨的一個最大的問題是訓練語料是需要人工標注的,而標注的成本是非常高的。除此之外不同的標注人員因為經驗閱歷等不同導致對同一條文本的理解也不同,所以容易出現標注不一致的問題。當標注數據量較少時還容易出現模型過擬合。歸根結底就是微調是需要標注數據的,而獲取標注數據的成本是很高的。為了解決這個問題,GPT-3可以讓NLPer不用標注訓練語料就能很好的完成下游任務,讓GPT-3更通用更便利。GPT-3不需要進行微調的結構圖如下所示:
圖10 GPT-3不需要進行微調結構圖
下面我們模擬人類來完成NLP下游任務。如果我們現在的任務是單向選擇題,只需要提供任務說明和簡單的任務舉例,我們就可以理解任務,並且可以進行后面的答題預測了。同樣如果我們的任務是閱讀理解,我們也可以根據任務說明和任務舉例快速的理解任務並且進行下面的答題和預測。人類完成NLP整個流程如下圖所示:
圖11 人類完成NLP任務舉例圖
GPT-3可以像人類那樣完成NLP任務。GPT-3的作者用訓練好的模型去驗證不同輸入形式的推理效果,主要包括Zero-shot、One-shot和Few-shot。通常情況下BERT這類微調模型總是需要一些樣例來更新模型的梯度參數從而讓模型更加適應當前的任務。但是GPT-3可以通過不使用一條樣例的Zero-shot、僅使用一條樣例的One-shot和使用少量樣例的Few-shot來完成推理任務。下面是對比微調模型和GPT-3三種不同的樣本推理形式圖:
圖12 對比微調模型和GPT-3三種不同的樣本推理形式圖
3.3 不同版本的GPT-3
GPT-3總共有8個版本,下面是不同版本的參數詳細說明:
圖13 不同版本GPT-3參數說明
從上圖可以看出最小的GPT-3 small的參數都比基礎版本的BERT多,而最大的GPT-3 175B的參數直接達到了恐怖的175B。
3.4 GPT-3模型效果
GPT-3論文包含31個作者,整整72頁論文,足可以說明工作量之大,全力演繹了“暴力出奇跡”,在一些NLP任務的數據集中使用少量樣本的Few-shot方式甚至達到了最好效果,省去了模型微調,也省去了人工標注的成本。下圖看看GPT-3論文龐大的作者陣容:
圖14 GPT-3龐大的作者陣容
下面詳細分析GPT-3模型的效果。下面是42個自然語言處理任務數據集中三種不同的樣本數量方式隨着模型參數增加模型分類效果圖:
圖15 三種不同的樣本數量方式隨着模型參數增加模型分類效果圖
上圖中橫坐標是樣本數量,沒有使用樣本代表Zero-shot,使用1條樣本代表One-shot,使用少量樣本則代表Few-shot。從圖中可以看出,隨着參數的增加模型的效果會有很大的提升,這也證明了模型參數更多並且使用更多的數據的確能有效提升模型效果。從上圖中還可以看出GPT-3使用少量樣本的Few-shot也能達到非常不錯的效果。
下面是GPT-3模型在TriviaQA數據集上的實驗結果圖:
圖16 TriviaQA數據集上GPT-3模型效果圖
從上圖中可以看出,在TriviaQA數據集上最大的GPT-3僅使用一條樣本的One-shot就已經和最好效果的微調模型效果相當,使用64條樣本的Few-shot的模型效果已經超越了最好效果的微調模型,這足以說明GPT-3模型的強大。不用標注樣本或者僅使用少量樣本就能輕松完成下游NLP任務,簡直不要太爽。因為對於大多數NLPer來說,最難的莫過於如何獲取又多又好的訓練語料,但是現在GPT-3幫我們解決了這個問題,所以必須點贊。
下圖是在PhysicalQA數據集中GPT-3模型不同輸入樣本形式的模型效果:
圖17 PhysicalQA數據集上GPT-3的模型效果
從上圖中可以看出,尤其對於QA任務GPT-3即使不需要一條樣本模型效果也能超越最好效果的微調模型。論文整整72頁,里面還有很多NLP任務數據集的實驗結果,小伙伴們有興趣的可以看下論文。
小結下,GPT-3使用45TB的訓練數據,擁有175B的參數量以巨大無比的姿態走進我們的視野。相比於目前NLP常見的預訓練+微調兩階段模型,GPT-3直接干掉了微調階段,讓我們可以不使用或者僅僅使用極少的樣本就可以很好的完成下游任務,幫助NLPer們解決了下游任務需要標注大量語料的煩惱。論文同時對比了Zero-shot、One-shot和Few-shot下GPT-3模型在不同數據集中的效果,尤其是在一些數據集中效果超越了最好效果的微調模型。GPT-3尤其擅長生成式任務,比如寫故事之類的,網上甚至有言論說讓GPT-3來完成紅樓夢的后面部分,或者直接去寫各種武俠玄幻小說,高產高效。對於我來說,后續我只需要列出我的思維導圖,GPT-3是不是就可以直接幫我寫文章啦,那樣我的一百萬字公眾號小目標應該能盡早實現了。
總結
本篇主要介紹了GPT系列模型,主要包括GPT、GPT-2和GPT-3。首先介紹了NLP中超強但不秀的GPT模型。GPT屬於典型的預訓練+微調的兩階段模型,將Transformer作為特征抽取器,使用單向語言模型,屬於NLP中非常重要的工作,同時還介紹了GPT模型下游如何改造成不同的NLP任務;然后介紹了有點火的GPT-2。相比於GPT來說GPT-2使用了更多更好的訓練數據,同時直接使用無監督的方式來完成下游任務;最后介紹了巨無霸GPT-3。相比於GPT-2,GPT-3直接把模型的規模做到極致,使用了45TB的訓練數據,擁有175B的參數量,真正詮釋了暴力出奇跡。GPT-3模型直接不需要微調了,不使用樣本或者僅使用極少量的樣本就可以完成下游NLP任務,尤其在很多數據集中模型的效果直接超越了最好效果的微調模型,真正幫助我們解決了下游任務需要標注語料的問題。對GPT系列模型感興趣的小伙伴可以一起溝通交流。
參考資料
[1] 《Language Models are few Shot Learners》
[2] The Illustrated Transformer
[3] AllenNLP Demo
最新最全的文章請關注我的微信公眾號或者知乎專欄:數據拾光者。
————————————————
版權聲明:本文為CSDN博主「數據拾光者」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/abc50319/article/details/108544357