BERT時代與後時代的NLP(二)

泰岳语义工厂發表於2019-06-27

BERT時代與後時代的NLP(二)

本文轉載自 知乎專欄 智慧對話機器人技術


上一篇文章提到了對遷移學習和模型訓練的思考,及對未來工作方向的粗略預測,本篇將對各類代表性工作做具體介紹。

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

BERT時代與後時代的NLP(二)我們先介紹CoVe和CVT。

有監督模型預訓練:CoVe

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

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

BERT時代與後時代的NLP(二)

使用的時候,只要把 BERT時代與後時代的NLP(二)BERT時代與後時代的NLP(二) 拼接起來就行。

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

總結下CoVe的特點:

  • 預訓練依賴於有監督資料(翻譯資料)。

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

自監督學習同時訓練:CVT

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

BERT時代與後時代的NLP(二)

例如,對於序列標註任務,論文中以biLSTM第一層和第二層的狀態向量拼接後輸入進主預測模組。而4個輔助模組則使用了第一層的各個單向狀態向量作為輸入。 BERT時代與後時代的NLP(二) 使用的是第一層前向LSTM當前詞的狀態向量, BERT時代與後時代的NLP(二) 使用的是第一層後向LSTM當前詞的狀態向量。 BERT時代與後時代的NLP(二) 使用的是第一層前向LSTM前一個詞的狀態向量,而 BERT時代與後時代的NLP(二) 使用的是第一層後向LSTM後一個詞的狀態向量。

BERT時代與後時代的NLP(二)

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

總結下CVT的特點:

  • 在訓練特定任務模型時加入無監督資料做自監督學習,獲得了精度的提升。其中輔助模組的構建是關鍵。

  • 嗯,需要為不同任務定製不同的輔助模組。

  • 應用於MTL問題效果比ELMo好。

無監督模型預訓練

ELMo

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

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

BERT時代與後時代的NLP(二)

第一步是預訓練階段,ELMo利用2層的biLSTM和無監督資料訓練兩個單向的語言模型,它們統稱為biLM。

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

其中 BERT時代與後時代的NLP(二) 是經過softmax歸一化後的權重BERT時代與後時代的NLP(二) 是整體的scale引數。它們都是任務模型中待學習的引數

BERT時代與後時代的NLP(二) 可以以額外特徵的方式,加入到特定任務的輸入和輸出特徵中。作者發現,對於某些任務,把 BERT時代與後時代的NLP(二) 同時加入到輸入和輸出特徵中效果最好,具體見下圖。

BERT時代與後時代的NLP(二)

作者發現,biLM底層LSTM的輸出狀態對句法任務(如POS)更有幫助,而高層LSTM的輸出狀態對語義任務(如WSD)更有幫助。ELMo對(標註)資料量少的有監督任務精度提升較大,對資料量多的任務效果提升就不明顯了。這說明ELMo裡儲存的資訊比較少,還是它主要功能是幫助有監督資料更好地提煉出其中的資訊?

總結下ELMo的特點:

  • 把無監督預訓練技術成功應用於多類任務,獲得了效果提升。

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

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

ULMFiT & SiATL

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

  1. 使用通用資料預訓練LM,模型使用了3層的AWD-LSTM。

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

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

  • 最後一層最後一個詞對應的向量;

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

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

BERT時代與後時代的NLP(二)

論文中提出了幾個最佳化策略,能夠提升精調後模型的最終效果。

BERT時代與後時代的NLP(二)
BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

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

論文還發現,和ULMFiT相比,SiATL在大資料集上效果差不多,但在小資料集要好很多。

BERT時代與後時代的NLP(二)

總結下 ULMFiT 和 SiATL:

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

  • 它們建議的策略都是在解決災難性遺忘問題,也都解決的不錯。可以考慮組合使用這些策略。

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

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

GPT/GPT-2

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

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

BERT時代與後時代的NLP(二)

GPT的另一個大貢獻是為下游任務引入了統一的模型框架,也即不再需要為特定任務定製複雜的模型結構了。不同的任務只需把輸入資料做簡單的轉換即可。

BERT時代與後時代的NLP(二)

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

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

BERT時代與後時代的NLP(二)

總結下GPT的主要貢獻:

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

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

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

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

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

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)
BERT時代與後時代的NLP(二)

BERT

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

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

BERT時代與後時代的NLP(二)

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

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

BERT時代與後時代的NLP(二)

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

  • Token Embedding:WordPiece tokenization subword詞向量。

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

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)
BERT時代與後時代的NLP(二)

總結下BERT的主要貢獻:

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

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

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

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

  • 重新整理了多項NLP任務的記錄,引爆了NLP無監督預訓練技術。

MASS

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

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

  • Decoder中需要預測masked的連續tokens,讓decoder能獲取更多的語言資訊。

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

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

BERT時代與後時代的NLP(二)

總結下MASS的特點:

  • 把BERT推廣到NLG型別任務,並且統一了BERT和傳統單向LM框架。

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

UNILM

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

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

BERT時代與後時代的NLP(二)

和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任務類似,為連續的兩個句子,然後隨機mask掉兩個句子中的詞讓模型進行預測。

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

對於GLUE的所有任務,UNILM據說是首次不新增外部資料打贏BERT的模型!

BERT時代與後時代的NLP(二)

總結下UNILM的特點:

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

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

  • 在GLUE上首次不加外部資料打贏了BERT。

多工學習MT-DNN

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

BERT時代與後時代的NLP(二)

預訓練就是BERT,精調時每個batch隨機選一個任務進行最佳化。整體演算法步驟如下:

BERT時代與後時代的NLP(二)

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

BERT時代與後時代的NLP(二)

總結下MT-DNN的特點:

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

泰嶽語義工廠
泰嶽語義工廠

泰嶽語義工廠是神州泰嶽推出的NLP服務的開放SaaS平臺,旨在為企業客戶和行業應用開發商提供最專業、最快捷、價效比最高的NLP技術和服務。該專欄聚焦於介紹神州泰嶽智慧語義認知技術和泰嶽語義工廠提供的NLP服務。

http://www.nlpai.cn/
專欄二維碼

相關文章