0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

遷移學習與模型預訓練:何去何從

WpOh_rgznai100 ? 來源:lq ? 2019-07-18 11:29 ? 次閱讀

2018年是NLP的收獲大年,模型預訓練技術終于被批量成功應用于多項NLP任務。之前搞NLP的人一直羨慕搞CV的人,在ImageNet上訓練好的模型,居然拿到各種任務里用都非常有效?,F在情形有點逆轉了。搞CV的人開始羨慕搞NLP的人了。CV界用的還是在有監(jiān)督數據上訓練出來的模型,而NLP那幫家伙居然直接搞出了在無監(jiān)督數據上的通用預訓練模型!要知道NLP中最不缺的就是無監(jiān)督的文本數據,幾乎就是要多少有多少。還有個好消息是目前NLP中通用預訓練模型的效果還遠沒達到極限。目前發(fā)現只要使用更多的無監(jiān)督數據訓練模型,模型效果就會更優(yōu)。這種簡單粗暴的優(yōu)化方法對大公司來說實在再經濟不過。而且,算法本身的效果也在快速迭代中。NLP的未來真是一片光明啊~

BERT發(fā)布之后,點燃了NLP各界的歡騰,各路神仙開始加班加點各顯神通,很多相關工作被發(fā)表出來。本文會介紹其中的一些代表性工作,但更重要的是希望理清這些背后的邏輯,為它們歸歸類。通過這些思考,我自己也對NLP以后的工作方向有些預測,供大家參考。

本文的內容主要包括以下幾部分:

我對遷移學習和模型預訓練的一些思考,以及對未來工作方向的粗略預測

各類代表性工作的具體介紹(熟悉的同學可忽略),又細分為以下幾大類:

有監(jiān)督數據預訓練

自監(jiān)督訓練

無監(jiān)督數據預訓練

多個有監(jiān)督數據同時訓練:多任務學習

3. 一些我們的實踐經驗、別人和自己的觀點、以及總結和感想

第一和第三部分內容相對少,原創(chuàng)密度大點,大家要是趕時間的話看這兩部分就夠了。第二部分的內容都是具體技術,有很多很好的文章都介紹過。放在本文當中一是為了文章的完備性,另一個是里面提到的一些知識點在其他地方沒怎么提到。第三部分也會涉及到我們(愛因互動)自己在一些任務上的實驗工作,期望這些結果能堅定大家在自己的工作中把模型預訓練技術用起來。

終于可以開始了。

一、遷移學習與模型預訓練:何去何從

▌遷移學習分類

把我們當前要處理的NLP任務叫做T(T稱為目標任務),遷移學習技術做的事是利用另一個任務S(S稱為源任務)來提升任務T的效果,也即把S的信息遷移到T中。至于怎么遷移信息就有很多方法了,可以直接利用S的數據,也可以利用在S上訓練好的模型,等等。

依據目標任務T是否有標注數據,可以把遷移學習技術分為兩大類,每個大類里又可以分為多個小類。

第一大類是T沒有任何標注數據,比如現在很火的無監(jiān)督翻譯技術。但這類技術目前主要還是偏學術研究,離工業(yè)應用還有挺長距離的。工業(yè)應用中的絕大部分任務,我們總是能想辦法標注一些數據的。而且,目前有監(jiān)督模型效果要顯著優(yōu)于無監(jiān)督模型。所以,面對完全沒有標注數據的任務,最明智的做法是先借助于無監(jiān)督技術(如聚類/降維)分析數據,然后做一些數據標注,把原始的無監(jiān)督任務轉變?yōu)橛斜O(jiān)督任務進行求解?;谶@些原因,本文不再介紹這大類相關的工作。

第二大類是T有標注數據,或者說T是個有監(jiān)督任務。這類遷移學習技術又可以依據源任務是否有監(jiān)督,以及訓練順序兩個維度,大致分為四小類:

源任務S是無監(jiān)督的,且源數據和目標數據同時用于訓練:此時主要就是自監(jiān)督(self-supervised)學習技術,代表工作有之后會講到的CVT。

源任務S是有監(jiān)督的,且源數據和目標數據同時用于訓練:此時主要就是多任務(multi-task)學習技術,代表工作有之后會講到的MT-DNN。

源任務S是無監(jiān)督的,且先使用源數據訓練,再使用目標數據訓練(序貫訓練):此時主要就是以BERT為代表的無監(jiān)督模型預訓練技術,代表工作有ELMo、ULMFiT、GPT/GPT-2、BERT、MASS、UNILM。

源任務S是有監(jiān)督的,且先使用源數據訓練,再使用目標數據訓練(序貫訓練):此時主要就是有監(jiān)督模型預訓練技術,類似CV中在ImageNet上有監(jiān)督訓練模型,然后把此模型遷移到其他任務上去的范式。代表工作有之后會講到的CoVe。

何去何從

▌現狀分析

先說說上表中四個類別的各自命運。以BERT為代表的無監(jiān)督模型預訓練技術顯然是最有前途的。之前也說了,NLP中最不缺的就是無監(jiān)督數據。只要堆計算資源就能提升效果的話,再簡單不過了。

而無監(jiān)督預訓練的成功,也就基本擠壓掉了自監(jiān)督學習提升段位的空間。這里說的自監(jiān)督學習不是泛指,而是特指同時利用無監(jiān)督數據和當前有監(jiān)督數據一起訓練模型的方式。既然是同時訓練,就不太可能大規(guī)模地利用無監(jiān)督數據(要不然就要為每個特定任務都訓練很久,不現實),這樣帶來的效果就沒法跟無監(jiān)督預訓練方式相比。

但自監(jiān)督學習還是有存在空間的,比如現在發(fā)現在做有監(jiān)督任務訓練時,把語言模型作為輔助損失函數加入到目標函數中,可以減輕精調或多任務學習時的災難性遺忘(Catastrophic Forgetting)問題,提升訓練的收斂速度。所以有可能在訓練時加入一些同領域的無監(jiān)督數據,不僅能減輕遺忘問題,還可能因為讓模型保留下更多的領域信息而提升最終模型的泛化性。但這個方向迎來大的發(fā)展可能性不大。

而類似CV中使用大規(guī)模有監(jiān)督數據做模型預訓練這條路,看著也比較暗淡,它自己單獨不太可能有很大前景。

幾個原因:

1) 這條路已經嘗試了很久,沒有很顯著的效果提升。

2) NLP中獲取大規(guī)模標注數據很難,而且還要求對應任務足夠復雜以便學習出的模型包含各種語言知識。雖然機器翻譯任務很有希望成為這種任務,但它也存在很多問題,比如小語種的翻譯標注數據很少,翻譯標注數據主要還是單句形式,從中沒法學習到背景信息或多輪等信息。但從另一個方面看,NLP搞了這么久,其實還是積累了很多標注或者結構化數據,比如知識圖譜。如何把這些信息融合到具體任務中最近一直都是很活躍的研究方向,相信將來也會是。只是BERT出來后,這種做法的價值更像是打補丁,而不是搭地基了。

多任務學習作為代價較小的方法,前景還是很光明的。多個同領域甚至同數據上的不同任務同時訓練,不僅能降低整體的訓練時間,還能降低整體的預測時間(如果同時被使用),還能互相提升效果,何樂而不為。當然,多任務學習的目標一開始就不是搭地基。

上面說了這么多,其實想說的重點在下面。這些技術不一定非要單獨使用啊,組合起來一起用,取長補短不是就皆大歡喜了嘛。

先回顧下現在的無監(jiān)督模型預訓練流程,如下圖:

首先是利用大的無監(jiān)督數據預訓練通用模型,優(yōu)化目標主要是語言模型(或其變種)。第二步,利用有監(jiān)督數據精調上一步得到的通用模型。這么做的目的是期望精調以后的通用模型更強調這個特定任務所包含的語言信息。這一步是可選的(所以圖中對應加了括號),有些模型框架下沒有這個步驟,比如BERT里面就沒有。第三步才是利用有監(jiān)督數據中對應的標注數據訓練特定任務對應的模型。

那這個流程接下來會怎么發(fā)展呢?

▌未來可期

上面我已經對四類方法做了分別的介紹,包括對它們各自前途的簡單判斷,也介紹了當下效果最好的模型預訓練流程。相信未來NLP的很多工作都會圍繞這個流程的優(yōu)化展開。我判斷這個流程會繼續(xù)發(fā)展為下面這個樣子:

詳細說明下每個步驟:

第一步還是利用大的無監(jiān)督數據預訓練通用模型。但這里面目前可以改進的點有很多,比如發(fā)展比Transformer更有效的特征抽取結構,現在的Evolved Transformer和Universal Transformer等都是這方面的探索。發(fā)展更有效更多樣化的預訓練模型目標函數。目前預訓練模型的目標函數主要是(Masked) LM和Next Sentence Prediction (NSP),還是挺單一的。面向文檔級背景或多輪這種長文本信息,未來應該會發(fā)展出更好的目標函數。比如有可能會發(fā)展出針對多輪對話這種數據的目標函數。

BERT主要面向的是NLU類型的任務,目前微軟提出的MASS、UNILM從不同的角度把BERT框架推廣到NLG類型的任務上了,細節(jié)我們之后會講到。GPT-2利用更大的模型獲得了更好的語言模型。更多更好的數據,更大的模型帶來的改進有沒有極限?目前還不知道,相信很多公司已經在做這方面的探索了。但這個游戲目前還是只有大公司能玩得起,訓練通用大模型太耗錢了。提升訓練效率,很自然的就是另一個很重要的優(yōu)化方向。

第二步是利用其他大任務的標注數據或已有結構化知識精調第一步獲得的通用模型。這一步不一定以單獨的形式存在,它也可以放到第一步中,在預訓練通用模型時就把這些額外信息注入進去,比如百度的ERNIE就是在預訓練時就把實體信息注入進去了。既然人類在漫長的AI研究史上積累了大量各式各樣的結構化數據,比如機器翻譯標注數據,沒理由不把它們用起來。相信未來會有很多知識融合(注入)這方面的工作。

第三步和前面流程的第二步相同,即利用當前任務數據進一步精調上一步得到的通用模型。這么做的目的是期望精調后的模型更強調這個特定任務所包含的語言信息。ELMo的實驗結論是,加入這一步往往能提升下一步的特定任務有監(jiān)督訓練的收斂速度,但僅在部分任務上最終模型獲得了效果提升(在另一部分任務上持平)。

另一種做法是把這一步與下一步的特定任務有監(jiān)督訓練放在一塊進行,也即在特定任務有監(jiān)督訓練時把語言模型作為輔助目標函數加入到訓練過程中,以期提升模型收斂速度,降低模型對已學到知識的遺忘速度,提升最終模型的效果。GPT的實驗結論是,如果特定任務有監(jiān)督訓練的數據量比較大時,加入輔助語言模型能改善模型效果,但如果特定任務有監(jiān)督訓練的數據量比較小時,加入輔助語言模型反而會降低模型效果。但ULMFiT上的結論剛好相反。所以就試吧。

利用多任務或者單任務建模方式在有監(jiān)督數據集上訓練特定任務模型。多任務的很多研究相信都能移植到這個流程當中。我們之后會介紹的微軟工作MT-DNN就是利用BERT來做多任務學習的底層共享模型。論文中的實驗表明加入多任務學習機制后效果有顯著提升。相信在這個方向還會有更多的探索工作出現。在單任務場景下,原來大家發(fā)展出的各種任務相關的模型,是否能在無監(jiān)督預訓練時代帶來額外的收益,這也有待驗證。

總結下,未來NLP的主要工作可能都會圍繞這個流程展開。對流程前面步驟的優(yōu)化帶來的收益比后面步驟大,也更難。所以諸君請自己拿捏吧~。

二、各類代表性工作

套用下前面對遷移學習分類的方式,把接下來要介紹的具體模型放到對應的模塊里,這樣邏輯會更清楚一些。

我們先介紹CoVe和CVT。

▌有監(jiān)督模型預訓練:CoVe

CoVe是在 McCann et al., Learned in Translation: Contextualized Word Vectors 這個論文中提出的。自然語言中的一詞多義非常常見,比如“蘋果手機”和“蘋果香蕉”里的“蘋果”,含義明顯不同。以Word2Vec為代表的詞表示方法沒法依據詞所在的當前背景調整表示向量。所以NLPer一直在嘗試找背景相關的詞表示法(Contextualized Word Representation)。CoVe就是這方面的一個嘗試。

CoVe首先在翻譯標注數據上預訓練encoder2decoder模型。其中的encoder模塊使用的是BiLSTM。訓練好的encoder,就可以作為特征抽取器,獲得任意句子中每個token的帶背景詞向量:

使用的時候,只要把和拼接起來就行。

論文作者在分類和匹配下游任務對CoVe的效果做過驗證,效果肯定是有一些提升了,但提升也不是很明顯。

總結下CoVe的特點:

預訓練依賴于有監(jiān)督數據(翻譯數據)。

CoVe結果以特征抽取的方式融合到下游任務模型中,但下游任務還是要自定義對應的模型。

▌自監(jiān)督學習同時訓練:CVT

CVT (Cross-View Training)在利用有監(jiān)督數據訓練特定任務模型時,同時會使用無監(jiān)督數據做自監(jiān)督學習。Encoder使用的是2層的CNN-BiLSTM,訓練過程使用標注數據和非標注數據交替訓練。利用標注數據訓練主預測模塊,同時構造多個輔助模塊,輔助模塊利用非標注數據擬合主模塊的預測概率。輔助模塊的輸入僅包含所有輸入中的部分信息,這個思想和dropout有點像,可以提高模型的穩(wěn)定性。不同的特定任務,輔助模塊的構造方式不同,如何選輸入中部分信息的方式也不同。

例如,對于序列標注任務,論文中以biLSTM第一層和第二層的狀態(tài)向量拼接后輸入進主預測模塊。而4個輔助模塊則使用了第一層的各個單向狀態(tài)向量作為輸入。使用的是第一層前向LSTM當前詞的狀態(tài)向量,使用的是第一層后向LSTM當前詞的狀態(tài)向量。使用的是第一層前向LSTM前一個詞的狀態(tài)向量,而使用的是第一層后向LSTM后一個詞的狀態(tài)向量。

作者也在多任務學習上驗證了CVT帶來效果提升。CVT使用多個標注數據和非標注數據交替訓練。使用標注數據訓練時,CVT隨機選擇一個任務,優(yōu)化對應任務的主模塊目標函數。使用非標注數據訓練時,CVT為所有任務產生對應的輔助模塊。這些輔助模塊同時被訓練,相當于構造了一些所有任務共用的標注數據。這種共用的訓練數據能提升模型收斂速度。作者認為效果提升的主要原因是,同時訓練多個任務能降低模型訓練一個任務時遺忘其他任務知識的風險。

總結下CVT的特點:

在訓練特定任務模型時加入無監(jiān)督數據做自監(jiān)督學習,獲得了精度的提升。其中輔助模塊的構建是關鍵。

嗯,需要為不同任務定制不同的輔助模塊。

應用于MTL問題效果比ELMo好。

▌無監(jiān)督模型預訓練

ELMo

ELMo (Embedding from Language Models) 的目的是找到一種帶背景的詞向量表示方法,以期在不同的背景下每個詞能夠獲得更準確的表示向量。

ELMo的使用過程分為以下三個步驟:

第一步是預訓練階段,ELMo利用2層的biLSTM和無監(jiān)督數據訓練兩個單向的語言模型,它們統(tǒng)稱為biLM。

第二步利用特定任務的數據精調第一步得到的biLM。作者發(fā)現這步能顯著降低biLM在特定任務數據上的PPL,結果如下圖。但對特定任務最終的任務精度未必有幫助(但也不會降低任務精度)。作者發(fā)現在SNLI(推斷)任務上效果有提升,但在SST-5(情感分析)任務上效果沒變化。

第三步是訓練特定的任務模型。任務模型的輸入是上面已訓練biLM的各層狀態(tài)向量的組合向量。

其中是經過softmax歸一化后的權重,是整體的scale參數。它們都是任務模型中待學習的參數。

可以以額外特征的方式,加入到特定任務的輸入和輸出特征中。作者發(fā)現,對于某些任務,把同時加入到輸入和輸出特征中效果最好,具體見下圖。

作者發(fā)現,biLM底層LSTM的輸出狀態(tài)對句法任務(如POS)更有幫助,而高層LSTM的輸出狀態(tài)對語義任務(如WSD)更有幫助。ELMo對(標注)數據量少的有監(jiān)督任務精度提升較大,對數據量多的任務效果提升就不明顯了。這說明ELMo里存儲的信息比較少,還是它主要功能是幫助有監(jiān)督數據更好地提煉出其中的信息?

總結下ELMo的特點:

把無監(jiān)督預訓練技術成功應用于多類任務,獲得了效果提升。

ELMo以特征抽取的形式融入到下游任務中,所以不同下游任務依舊需要使用不同的對應模型。

ELMo改進的效果依賴于下游任務和對應的模型,且改進效果也不是特別大。

ULMFiT & SiATL

ULMFiT (Universal Language Model Fine-tuning) 使用和ELMo類似的流程:

使用通用數據預訓練LM,模型使用了3層的AWD-LSTM。

在特定任務數據上精調LM,其中使用到差異精調和傾斜三角lr兩個策略。

以LM作為初始值,精調特定任務分類模型,其中使用到逐層解凍、差異精調和傾斜三角lr三個策略。經過AWD-LSTM之后,輸出給分類器的向量為三個向量的拼接:。

最后一層最后一個詞對應的向量;

最后一層每個詞向量做max pooling;

最后一層每個詞向量做mean pooling。

論文中提出了幾個優(yōu)化策略,能夠提升精調后模型的最終效果。

論文中的實驗主要針對各種分類任務,相比于之前最好的結果,ULMFiT把分類錯誤率降低了18-24%。

論文中也設計了實驗來說明流程中第二步(在特定任務數據上精調LM)的作用。結果表明第二步的加入,能夠讓第三步的分類任務在很少的數據量下獲得好的結果。只要使用1%~10%的標注數據,就能達到不加第二步時的模型效果。

作者也設計了去除實驗驗證論文中提出的三個策略的效果:差異精調(discr)、傾斜三角lr(stlr)、逐層解凍(Freez)。結果表明相比于其他人提出的策略,這幾個策略能獲得更好的結果。而且,相比于不使用discr和stlr機制的精調策略(Full),ULMFiT模型更穩(wěn)定,沒出現災難性遺忘。

之后的另一篇論文 An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models 建議了一些新的策略,解決精調時的災難性遺忘問題。模型稱為SiATL(Single-step Auxiliary loss Transfer Learning)。SiATL只包含兩個步驟:無監(jiān)督數據預訓練LM、精調分類模型。但在精調分類模型時,SiATL把LM作為輔助目標加入到優(yōu)化目標函數當中。SiATL的第二步相當于把ULMFiT的第二步和第三步一起做了。所以它們的流程其實是一樣的。

預訓練模型使用的是兩層LSTM+Linear,而分類模型在預訓練模型的上面增加了一層帶self-attention的LSTM和輸出層。SiATL建議的幾個策略:

論文發(fā)現輔助LM目標對于小數據集更有用,可能是輔助LM減輕了小數據集上的過擬合問題。其中的系數,論文實驗發(fā)現初始取值為0.2,然后指數下降到0.1效果最好。的取值需要考慮到和的取值范圍。這個結論和ULMFiT中驗證第二步流程作用的實驗結果相同,也側面說明了它們本質上差不多。

另一個發(fā)現是如果預訓練用的無監(jiān)督數據和任務數據所在領域不同,序貫解凍帶來的效果更明顯。這也是合理的,領域不同說明災難性遺忘問題會更嚴重,所以遷移知識時要更加慎重,遷移過程要更慢。序貫解凍主要就是用途就是減輕災難性遺忘問題。

論文還發(fā)現,和ULMFiT相比,SiATL在大數據集上效果差不多,但在小數據集要好很多。

總結下 ULMFiT 和 SiATL:

ULMFiT使用序貫訓練的方式組合特定任務LM和任務目標函數,而SiATL使用同時訓練的方式,也即加入輔助LM目標函數。

它們建議的策略都是在解決災難性遺忘問題,也都解決的不錯??梢钥紤]組合使用這些策略。

它們在小數據集上都提升明顯,只要使用 1%~10% 的標注數據,就能達到之前的效果。

雖然它們只在分類任務上驗證了各自的效果,但這些策略應該可以推廣到其他任務上。

GPT/GPT-2

前面介紹的工作中預訓練模型用的都是多層LSTM,而OpenAI GPT首次使用了Transformer作為LM預訓練模型。GPT使用12層的Transformer Decoder訓練單向LM,也即mask掉當前和后面的詞。

在做精調時,使用最高層最后一個詞的向量作為后續(xù)任務的輸入,類似SiATL也加入了輔助LM目標函數。

GPT的另一個大貢獻是為下游任務引入了統(tǒng)一的模型框架,也即不再需要為特定任務定制復雜的模型結構了。不同的任務只需把輸入數據做簡單的轉換即可。

GPT在多種類型的任務上做了實驗,12個任務中的9個任務有提升,最高提升幅度在9%左右,效果相當不錯。

針對預訓練、輔助LM和Transformer,論文中做了去除實驗,結果表明預訓練最重要,去掉會導致指標下降14.8%,而Transformer改為LSTM也會導致指標下降5.6%。比較詭異的是去掉輔助LM的實驗結果。去掉輔助LM,只在QQP (Quora Question Pairs)和NLI上導致指標下降。在其他任務上反而提升了指標。作者觀察到的趨勢是輔助LM對于大的數據集比小的數據集更有幫助。這也跟ULMFiT和SiATL中的結論相反。

總結下GPT的主要貢獻:

驗證了Transformer在Unsupervised Pretraining中的有效性。

驗證了更大的模型效果更好:6 --> 12 層。

為下游任務引入了通用的求解框架,不再為任務做模型定制。

之后OpenAI又訓練一個更大的模型,叫GPT-2。GPT-2把GPT中12層的Transformer提升到48層,參數數量是GPT的十幾倍,達到了15億。

GPT-2依舊使用單向LM訓練語言模型,但使用數量更多、質量更好、覆蓋面更廣的數據進行訓練。而且,GPT-2沒有針對特定模型的精調流程了。作者想強調的是,預訓練模型中已經包含很多特定任務所需的信息了,只要想辦法把它們取出來直接用即可,可以不用為特定任務標注數據,真正達到通用模型的能力。

那,沒有精調如何做特定任務呢?一些任務說明如下:

不做精調的GPT-2不僅在很多特定任務上已經達到了SOTA,還在生成任務上達到了嚇人的精度。

BERT

和GPT一樣,BERT的基本模型使用了Transformer,只是模型又變大了(12層變成了24層)。

相比于GPT的單向LM,BERT使用了雙向LM。但顯然預測時不能讓待預測的詞看到自己,所以需要把待預測詞mask掉。BERT建議了masked LM機制,即隨機mask輸入中的k%個詞,然后利用雙向LM預測這些詞。

但mask時需要把握好度。mask太少的話,訓練時每次目標函數中包含的詞太少,訓練起來就要迭代很多步。mask太多的話,又會導致背景信息丟失很多,與預測時的情景不符。而且,簡單的mask會帶來預訓練和精調訓練的不一致性:精調階段,輸入數據里是不mask詞的。

BERT建議了以下的策略,解決這些問題:

BERT的另一大貢獻,是引入了新的預訓練目標Next Sentence Prediction (NSP)。對于兩個句子A和B,NSP預測B是不是A的下一個句子。訓練時NSP的正樣本就是從文檔從隨機選的兩個臨近句子,而負樣本就是B是隨機從文檔中選取的,與A的位置沒關系。NSP可以學習句子與句子間的關系。

預訓練的目標函數是Masked LM和NSP的加和。

BERT的輸入詞向量是三個向量之和:

Token Embedding:WordPiece tokenization subword詞向量。

Segment Embedding:表明這個詞屬于哪個句子(NSP需要兩個句子)。

Position Embedding:學習出來的embedding向量。這與Transformer不同,Transformer中是預先設定好的值。

BERT也為下游任務引入了通用的求解框架,不再為任務做模型定制。對于分類和匹配任務,下游任務只要使用第一個詞[CLS]對應的最上層輸出詞向量作為分類器的輸入向量即可。對于抽取式QA和序列標注問題,使用每個詞對應的最上層輸出詞向量作為下游任務的輸入即可。

BERT的驚艷結果,引爆了NLP行業(yè)。BERT在11個任務上獲得了最好效果,GLUE上達到了80.4%,提升了整整7.6個點,把SQuAD v1.1 F1又往上提升了1.5個點,達到了93.2 。

BERT的去除實驗表明,雙向LM和NSP帶了的提升最大。

另一個結論是,增加模型參數數量可以提升模型效果。

BERT預訓練模型的輸出結果,無非就是一個或多個向量。下游任務可以通過精調(改變預訓練模型參數)或者特征抽取(不改變預訓練模型參數,只是把預訓練模型的輸出作為特征輸入到下游任務)兩種方式進行使用。BERT原論文使用了精調方式,但也嘗試了特征抽取方式的效果,比如在NER任務上,最好的特征抽取方式只比精調差一點點。但特征抽取方式的好處可以預先計算好所需的向量,存下來就可重復使用,極大提升下游任務模型訓練的速度。

后來也有其他人針對ELMo和BERT比較了這兩種使用方式的精度差異。下面列出基本結論:

總結下BERT的主要貢獻:

引入了Masked LM,使用雙向LM做模型預訓練。

為預訓練引入了新目標NSP,它可以學習句子與句子間的關系。

進一步驗證了更大的模型效果更好:12 --> 24 層。

為下游任務引入了很通用的求解框架,不再為任務做模型定制。

刷新了多項NLP任務的記錄,引爆了NLP無監(jiān)督預訓練技術。

MASS

BERT只能做NLU類型的任務,無法直接用于文本產生式(NLG)類型的任務,如摘要、翻譯、對話生成。NLG的基本框架是encoder2decoder,微軟的MASS (MAsked Sequence to Sequence pre-training)把BERT推廣到NLG任務。MASS的結構如下,它的訓練數據依舊是單句話,但是會隨機mask這句話中連續(xù)的k個詞,然后把這些詞放入decoder模塊的相同位置,而encoder中只保留未被mask的詞。MASS期望decoder利用encoder的信息和decoder前面的詞,預測這些被mask的詞。

比較有意思的是,BERT和GPT都是MASS的特例。當k=1時,也即隨機mask單個詞時,MASS就退化成BERT;當k=句子長度時,也即mask所有詞時,MASS就退化成GPT,或者標準的單向LM。

論文中使用了4層的Transformer作為encoder和decoder,跟encoder使用BERT,decoder 使用標準單向LM的框架BERT+LM做了效果對比,PPL上降低了不少。而且作者也對比了k取不同值時的效果變化,結果發(fā)現在多個任務上它取50%句子長度都是最優(yōu)的。

為什么MASS能取得比較好的效果?作者給出了以下解釋:

Encoder中mask部分tokens,迫使它理解unmasked tokens。

Decoder中需要預測masked的連續(xù)tokens,讓decoder能獲取更多的語言信息。

Decoder中只保留了masked的tokens,而不是所有的tokens,迫使decoder也會盡量從encoder中抽取信息。

作者也做了兩個去除實驗驗證上面的后兩條解釋。

總結下MASS的特點:

把BERT推廣到NLG類型任務,并且統(tǒng)一了BERT和傳統(tǒng)單向LM框架。

實驗表明MASS效果比BERT+LM好,但實驗使用的模型太小,不確定這種優(yōu)勢在模型變大后是否還會存在。

UNILM

UNILM (UNIfied pretrained Language Model)是微軟另一波人最近放出的論文。UNILM同時訓練BERT中的雙向LM、GPT中的單向LM和seq2seq中的LM。用的方法也很自然,核心思想在Transformer那篇論文中其實就已經在用了。

UNILM中的核心框架還是Transformer,只是用無監(jiān)督數據預訓練模型時,同時以雙向LM、單向LM和seq2seq LM為目標函數。這些目標函數共享一個Transformer結構,訓練也都使用了類似BERT中的[MASK]機制。

和BERT的雙向LM不同的是,單向LM在做self-attention時不能使用這個詞后面的詞。seq2seq LM在做decoder 預測時也有類似的約束,做self-attention時能使用encoder中的所有詞,以及decoder中當前詞(替換為[MASK]了)和前面的詞,而不能使用decoder中這個詞后面的詞。UNILM在做self-attention時通過mask機制來滿足這些約束,也即在softmax函數中把后面詞對應的向量元素值改為-∞。

seq2seq LM是把兩個句子拼起來(和BERT相同)直接輸入一個Transformer(只是預測encoder和decoder中被mask的詞時,對self-attention使用了不同的約束條件),所以encoder和decoder使用的是同一個Transformer。seq2seq LM的訓練樣本,和NSP任務類似,為連續(xù)的兩個句子,然后隨機mask掉兩個句子中的詞讓模型進行預測。

對詞隨機mask的機制和BERT類似,只是會以一定概率mask臨近的兩個或三個詞,具體說明如下:

訓練時目標函數的設定也參照BERT,只是要同時兼顧雙向LM、單向LM和seq2seq LM。作者使用的模型大小同,也即用了24層的Transformer。

精調階段,對于NLU類型的任務UNILM和BERT相同。對于NLG類型的任務,UNILM隨機mask decoder中的一些詞,然后再預測它們。以下是UNILM應用于生成式QA任務的做法,效果提升很明顯。

對于GLUE的所有任務,UNILM據說是首次不添加外部數據打贏BERT的模型!

總結下UNILM的特點:

預訓練同時訓練雙向LM、單向LM和seq2seq LM,使用mask機制解決self-attention中的約束問題。

可以處理NLU和NLG類型的各種任務。

在GLUE上首次不加外部數據打贏了BERT。

多任務學習:MT-DNN

MT-DNN (Multi-Task Deep Neural Network)是去年年底微軟的一篇工作,思路很簡單,就是在MTL中把BERT引入進來作為底層共享的特征抽取模塊。

預訓練就是BERT,精調時每個batch隨機選一個任務進行優(yōu)化。整體算法步驟如下:

MT-DNN在GLUE上效果比BERT好不少,當然主要原因可能是加入了額外的數據了。作者也對比了多任務與單任務的結果,多任務確實能給每個任務都帶來效果提升。

總結下MT-DNN的特點:

框架簡單明了:MT-DNN = BERT + MTL。

三、實踐、觀點、總結

▌實踐與建議

雖然前面介紹的很多模型都能找到實現代碼。但從可用性來說,對于NLU類型的問題,基本只需考慮ELMo,ULMFiT和BERT。而前兩個沒有中文的預訓練模型,需要自己找數據做預訓練。BERT有官方發(fā)布的中文預訓練模型,很多深度學習框架也都有BERT的對應實現,而且BERT的效果一般是最好的。但BERT的問題是速度有點慢,使用12層的模型,對單個句子(30個字以內)的預測大概需要100~200毫秒。如果這個性能對你的應用沒問題的話,建議直接用BERT。

對于分類問題,如果特定任務的標注數據量在幾千到一兩萬,可以直接精調BERT,就算在CPU上跑幾十個epoches也就一兩天能完事,GPU上要快10倍以上。如果標注數據量過大或者覺得訓練時間太長,可以使用特征抽取方式。先用BERT抽取出句子向量表達,后續(xù)的分類器只要讀入這些向量即可。

我們目前在很多分類問題上測試了BERT的效果,確實比之前的模型都有提升,有些問題上提升很明顯。下圖給出了一些結果示例。

愛因互動作為企業(yè)對話機器人服務提供商,我們會處理很多的QA (Query Answer)和QQ (Query Question)匹配任務。比如在常用的檢索機器人FAQBot中,用戶的一個query來了,FAQBot首先從標準問答庫中檢索出一些候選問題/答案,然后排序或匹配模塊再計算query跟每個候選問題/答案的匹配度,再按這些匹配度從高到低排序,top1的結果返回給用戶。上圖中給出了一個QQ 匹配的結果,原始模型的準確度為83.5%,BERT精調后的模型準確度提升到88.3%。

BERT當然可以直接用來計算兩個句子的匹配度,只要把query和每個候選句子拼起來,然后走一遍BERT就能算出匹配度。這樣做的問題是,如果有100個候選結果,就要算100次,就算把它們打包一起算,CPU上的時間開銷在線上場景也是扛不住的。但如果使用Siamese結構,我們就可以把候選句子的BERT向量表達預先算好,然后線上只需要計算query的BERT向量表達,然后再計算query和候選句子向量的匹配度即可,這樣時間消耗就可以控制在200ms以內了。

使用Siamese這種結構理論上會降低最終的匹配效果,之前也有相關工作驗證過在一些問題上確實如此。我們目前在自己的三個數據上做了對比實驗(見下圖),發(fā)現在兩個問題上效果確實略有下降,而在另一個問題上效果基本保持不變。我估計只要后續(xù)交互層設計的合理,Siamese結構不會比原始BERT精調差很多。

▌觀點

按理ELMo的想法很簡單,也沒什么模型創(chuàng)新,為什么之前就沒人做出來然后引爆無監(jiān)督模型預訓練方向?BERT的一作Jacob Devlin認為主要原因是之前使用的數據不夠多,模型不夠大。無監(jiān)督預訓練要獲得好效果,付出的代價需要比有監(jiān)督訓練大到1000到10w倍才能獲得好的效果。之前沒人想到要把數據和模型規(guī)模提高這么多。

為了讓預訓練的模型能對多種下游任務都有幫助,也即預訓練模型要足夠通用,模型就不能僅僅只學到帶背景的詞表示這個信息,還需要學到很多其他信息。而預測被mask的詞,就可能要求模型學到很多信息,句法的,語義的等等。所以,相對于只解決某個下游特定任務,預訓練模型要通用的話,就要大很多。目前發(fā)現只要使用更多(數量更多、質量更好、覆蓋面更廣)的無監(jiān)督數據訓練更大的模型,最終效果就會更優(yōu)。目前還不知道這個趨勢的極限在什么量級。

BERT雖然對NLU的各類任務都提升很大,但目前依舊存在很多待驗證的問題。比如如何更高效地進行預訓練和線上預測使用,如何融合更長的背景和結構化知識,如何在多模態(tài)場景下使用,在BERT之后追加各種任務相關的模塊是否能帶來額外收益等等。這些機會我在第一部分已經講到,就不再贅述了。

▌總結和一點感(敢)想

最后,簡單總結一下。

無監(jiān)督預訓練技術已經在NLP中得到了廣泛驗證。BERT成功應用于各種NLU類型的任務,但無法直接用于NLG類型的任務。微軟最近的工作MASS把BERT推廣到NLG類型任務,而UNILM既適用于NLU也適用于NLG任務,效果還比BERT好一點點。

相信未來NLP的很多工作都會圍繞以下這個流程的優(yōu)化展開:

在這個過程中,我們還收獲了諸多副產品

相對于biLSTM,Transformers在知識抽取和存儲上效果更好,潛力還可發(fā)掘。它們之間的具體比較,推薦俊林老師的“放棄幻想,全面擁抱Transformer:自然語言處理三大特征抽取器(CNN/RNN/TF)比較”,里面介紹的很清楚。

目前無監(jiān)督模型預訓練常用以下幾種目標函數:

一般的LM?;趖oken的交叉熵。

Masked LM。相比于一般的LM,masked LM能夠使用雙向tokens,且在模型訓練和預測時的數據使用方式更接近,降低了它們之間的gap。

Consecutive masked LM。Mask時不僅隨機mask部分離散的token,還隨機mask一些連續(xù)的tokens,如bi-grams、tri-grams等。這種consecutive mask機制是否能帶來普遍效果提升,還待驗證。

Next Sentence Prediction。預測連續(xù)的兩個句子是否有前后關系。

精調階段,除了任務相關的目標函數,還可以考慮把LM作為輔助目標加到目標函數中。加入LM輔助目標能降低模型對已學到知識的遺忘速度,提升模型收斂速度,有些時候還能提升模型的精度。精調階段,學習率建議使用linear warmup and linear decay機制,降低模型對已學到知識的遺忘速度。如果要精調效果,可以考慮ULMFiT中引入的gradual unfreezing和discriminative fine-tuning:機制。

使用數量更多、質量更好、覆蓋面更廣的無監(jiān)督數據訓練更大的模型,最終效果就會更優(yōu)。目前還不知道這個趨勢的極限在什么地方。

最后說一點自己的感想。

NLP中有一部分工作是在做人類知識或人類常識的結構化表示。有了結構化表示后,使用時再想辦法把這些表示注入到特定的使用場景中。比如知識圖譜的目標就是用結構化的語義網絡來表達人類的所有知識。這種結構化表示理論上真的靠譜嗎?人類的知識真的能完全用結構化信息清晰表示出來嗎?顯然是不能,我想這點其實很多人都知道,只是在之前的技術水平下,也沒有其他的方法能做的更好。所以這是個折中的臨時方案。

無監(jiān)督預訓練技術的成功,說明語言的很多知識其實是可以以非結構化的方式被模型學習到并存儲在模型中的,只是目前整個過程我們并不理解,還是黑盒。相信以后很多其他方面的知識也能找到類似的非結構化方案。所以我估計知識圖譜這類折中方案會逐漸被替代掉。當然,這只是我個人的理解或者疑惑,僅供他人參考。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3058

    瀏覽量

    48572
  • nlp
    nlp
    +關注

    關注

    1

    文章

    482

    瀏覽量

    21969
  • 遷移學習
    +關注

    關注

    0

    文章

    74

    瀏覽量

    5547

原文標題:雖被BERT碾壓,但還是有必要談談BERT時代與后時代的NLP

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【大語言模型:原理與工程實踐】大語言模型訓練

    大語言模型的核心特點在于其龐大的參數量,這賦予了模型強大的學習容量,使其無需依賴微調即可適應各種下游任務,而更傾向于培養(yǎng)通用的處理能力。然而,隨著學習容量的增加,對
    發(fā)表于 05-07 17:10

    遷移學習

    的基本原理和編程思想。理解在一個新的場景或數據集下,何時以及如何進行遷移學習。利用PyTorch加載數據、搭建模型、訓練網絡以及進行網絡微調操作。給定
    發(fā)表于 04-21 15:15

    基于訓練模型和長短期記憶網絡的深度學習模型

    作為模型的初始化詞向量。但是,隨機詞向量存在不具備語乂和語法信息的缺點;訓練詞向量存在¨一詞-乂”的缺點,無法為模型提供具備上下文依賴的詞向量。針對該問題,提岀了一種基于
    發(fā)表于 04-20 14:29 ?19次下載
    基于<b class='flag-5'>預</b><b class='flag-5'>訓練</b><b class='flag-5'>模型</b>和長短期記憶網絡的深度<b class='flag-5'>學習</b><b class='flag-5'>模型</b>

    如何實現更綠色、經濟的NLP訓練模型遷移

    NLP中,訓練模型Finetune是一種非常常見的解決問題的范式。利用在海量文本上訓練得到的Bert、GPT等
    的頭像 發(fā)表于 03-21 15:33 ?2130次閱讀

    使用 NVIDIA TAO 工具套件和訓練模型加快 AI 開發(fā)

    可以訪問訓練模型的完整源代碼和模型權重。 該工具套件能夠高效訓練視覺和對話式 AI 模型。由于
    的頭像 發(fā)表于 12-15 19:40 ?956次閱讀

    訓練數據大小對于訓練模型的影響

    BERT類模型的工作模式簡單,但取得的效果也是極佳的,其在各項任務上的良好表現主要得益于其在大量無監(jiān)督文本上學習到的文本表征能力。那么如何從語言學的特征角度來衡量一個訓練
    的頭像 發(fā)表于 03-03 11:20 ?1293次閱讀

    什么是訓練 AI 模型?

    訓練 AI 模型是為了完成特定任務而在大型數據集上訓練的深度學習模型。這些
    的頭像 發(fā)表于 04-04 01:45 ?1359次閱讀

    淺析4個計算機視覺領域常用遷移學習模型

    使用SOTA的訓練模型來通過遷移學習解決現實的計算機視覺問題。
    的頭像 發(fā)表于 04-23 18:08 ?1669次閱讀
    淺析4個計算機視覺領域常用<b class='flag-5'>遷移</b><b class='flag-5'>學習</b><b class='flag-5'>模型</b>

    什么是訓練AI模型

    訓練 AI 模型是為了完成特定任務而在大型數據集上訓練的深度學習模型。這些
    的頭像 發(fā)表于 05-25 17:10 ?944次閱讀

    NLP中的遷移學習:利用訓練模型進行文本分類

    遷移學習徹底改變了自然語言處理(NLP)領域,允許從業(yè)者利用預先訓練模型來完成自己的任務,從而大大減少了訓練時間和計算資源。在本文中,我們
    發(fā)表于 06-14 09:30 ?410次閱讀

    視覺深度學習遷移學習訓練框架Torchvision介紹

    Torchvision是基于Pytorch的視覺深度學習遷移學習訓練框架,當前支持的圖像分類、對象檢測、實例分割、語義分割、姿態(tài)評估模型
    的頭像 發(fā)表于 09-22 09:49 ?803次閱讀
    視覺深度<b class='flag-5'>學習</b><b class='flag-5'>遷移</b><b class='flag-5'>學習</b><b class='flag-5'>訓練</b>框架Torchvision介紹

    訓練模型的基本原理和應用

    訓練好的模型,這些模型通常在某些通用任務上表現出色,并且可以作為后續(xù)特定任務的起點,通過遷移學習或微調(Fine-tuning)等方式進行適
    的頭像 發(fā)表于 07-03 18:20 ?1789次閱讀

    大語言模型訓練

    能力,逐漸成為NLP領域的研究熱點。大語言模型訓練是這一技術發(fā)展的關鍵步驟,它通過在海量無標簽數據上進行訓練,使模型
    的頭像 發(fā)表于 07-11 10:11 ?316次閱讀

    訓練遷移學習的區(qū)別和聯(lián)系

    訓練遷移學習是深度學習和機器學習領域中的兩個重要概念,它們在提高
    的頭像 發(fā)表于 07-11 10:12 ?536次閱讀

    直播預約 |數據智能系列講座第4期:訓練的基礎模型下的持續(xù)學習

    鷺島論壇數據智能系列講座第4期「訓練的基礎模型下的持續(xù)學習」10月30日(周三)20:00精彩開播期待與您云相聚,共襄學術盛宴!|直播信息報告題目
    的頭像 發(fā)表于 10-18 08:09 ?62次閱讀
    直播預約 |數據智能系列講座第4期:<b class='flag-5'>預</b><b class='flag-5'>訓練</b>的基礎<b class='flag-5'>模型</b>下的持續(xù)<b class='flag-5'>學習</b>