最前沿的12個NLP預訓練模型

1 引言

17年transformer被提出,18年迎來了ELMo和BERT的橫空出世,19年預訓練模型不出意外地開始了全面的爆發。

所以,預訓練模型也成爲了NLPer繞不過去的一個技術棧,這篇文章將會梳理一下我學習過的12個預訓練模型。這是一篇review性質的文章,跳過了一些基礎的知識,可能會對一些沒用過預訓練模型的讀者不大友好。

預訓練模型,在我看來,相對傳統模型做的革新,主要體現在以下三個方面:

(1)通用的特徵提取器

早期NLP模型設計的一個重要步驟,就是考慮如何提取語料特徵。這個環節會佔用算法工程師大量的精力,也是影響模型效果的關鍵因素。

在預訓練模型中,我們只需要簡單粗暴地使用transformer,不需要太多地關注具體任務,就能夠達到SOTA級的特徵提取器的效果。

除此之外,transformer的設計思想由於其通用性,還可以拓展應用到其它領域,例如CV領域。

(2)動態化的詞向量

在詞向量方法剛出現的時候,例如NNLM,word2vec,Glove模型,他們針對每個特定字詞所生成的詞向量是一成不變的。對於存在一詞多義現象的字詞,這種靜態的詞向量很難在所有的場景下,都準確完整地表示出字詞的信息。

所以,我們需要一種能夠根據上下文語境進行動態調整,準確表示字詞意思的詞向量。預訓練模型藉助attention機制,就能夠動態生成這種基於上下文的詞向量。

(3)針對不同下游任務的強泛化性

傳統的構建模型的思路,就是根據任務的具體類型,選擇相應的模型。這樣因地制宜、對症下藥是沒有問題的,但是我們要考慮到,在工業界工程落地,存在着各種各樣的特殊情況和限制條件,比如說訓練語料不足、算法工程師水平不夠。

所以我們有時候需要一個“傻瓜式”的即插即用的模型,不需要太多的訓練工作、不需要太多的調參工作、不需要太多的模型選型和優化工作。預訓練模型就是這樣一個強泛化性的模型,它只需要少量的訓練數據和模型優化工作,就能夠在新的下游任務中獲得不錯的效果,有時候甚至不需要訓練和優化就能夠直接拿來使用。

介紹完了預訓練模型最顯著的創新點,我們先對下文將要介紹的12個預訓練模型做個一句話概覽,先有個簡單直觀的印象:

(1)transformer是主流預訓練模型的基本單元,是一個強大的特徵提取器,後續的模型大多是基於transformer的優化和改進。

(2)ELMo基於傳統的RNN模型框架,是一個雙向模型。它會根據上下文語境,動態地生成詞向量。

(3)BERT可以理解爲集合了transformer優點(特徵提取)和ELMo優點(雙向)的模型,是最經典的預訓練模型,是預訓練模型的里程碑。

(4)transformer-XL將transformer作爲基本單元應用於RNN模型,改善了transformer輸入序列長度受限(長文本)的問題。

(5)XLNet是基於transformer-XL的模型,論文的主要創新點是雙流機制和序列亂序方法。XLNet同時也使用了大量的語料,構建了更大的模型,也取得了比BERT更好的效果。但是通過大語料、大模型這種類似軍備競賽的方式刷新SOTA的方法,也逐漸開始氾濫。

(6)ERNIE是百度提出的模型,它基於BERT,百度利用其強大的語料庫優勢進行訓練,把ERNIE推到了中文NLP任務SOTA的地位,並保持了很長一段時間。

(7)ERNIE2.0在ERNIE的基礎上,使用多任務學習的方法,進一步提升了模型的泛化性和通用性。

(8)GPT是一個早期模型,可以理解爲將RNN的基本單元替換爲transformer,是一個單向模型。

(9)GPT-2也是一個使用大語料訓練的大模型,它在文本生成任務上的表現讓人驚豔了一把,也因爲不肯開源被學術界工業界口誅筆伐(現在已經開源了)。

(10)RoBERTa在BERT的基礎上,致力於將調參發揮到極致。

(11)ALBERT使用詞向量因式分解和層間參數共享兩個方法,在降低模型規模方向上,做了顯著有效的嘗試。

(12)TinyBERT利用知識蒸餾技術降低模型規模,也獲得了很好的效果。

2 Transformer

預訓練模型始於transformer,興於BERT。

模型典型結構

                        圖2.1transformer架構

transformer的架構如圖2.1所示,和傳統的seq2seq模型一樣,它由encoder和decoder構成。在這裏,我們只需要重點關注encoder,因爲後續大多數模型使用的是encoder的結構,而不是decoder的。

                                        圖2.2transformer單元

transformerencoder是一個多層模型,圖2.2呈現的是transformer encoder的一層,我們將它稱之爲transformer單元。這也是我們學習transformer論文時要重點關注的內容。後續有些論文提及的“transformer”大部分指的是transformer單元,而不是整個transformer模型。transformer單元在示意圖中常常被縮寫成TRM。

模型層結構:

(1)transformer的encoder由6層transformer單元組成。

(2)每層transformer單元包含8個頭(header),每個herder輸出的向量的維度是64,所以每個字詞token通過模型輸出的向量的維度是512(64*8)。

(3)query/key/value的維度和單個header輸出的維度一致,均爲64。

(4)每個transformer單元包含2個相同的子層,每個子層包含多頭自注意力層(self-attention sublayer)和全連接前饋神經網絡層(FFN)。

模型創新點

(1)傳統的NLP模型大多是基於RNN序列模型結構的,這個結構會導致數據處理時延過長,影響模型的線上性能。transformer採用了類似CNN的結構,能夠同時並行處理整個序列的所有token,極大地改善了模型的效率。

(2)模型使用了多頭自注意力機制:(a)多頭:多頭結構類似於CNN的多channel機制,是提高泛化性和健壯性的一個機制;(b)自注意力:自注意力機制和傳統注意力機制的思路基本一致,讓字詞token輸出的向量都和前一層的上下文相關聯,也就是讓上下文也參與到詞向量的構建過程中,從而解決了一詞多義的問題。

圖2.3 多頭機制

                                                                   圖2.4 自注意力機制

注:論文認爲,在self-attention的過程中,每個token只能看到前文的信息,不能看到後文的信息。所以transformer使用了sequence mask,在self-attention時將後文的所有token給屏蔽了。因此,transformer是一個單向的模型

(3)使用了基於歐拉公式的位置嵌入機制。讓模型更容易捕捉到位置信息。在偶數位置,使用正弦編碼,在奇數位置,使用餘弦編碼。

                             圖2.5 位置嵌入信息

模型其它特性

(1)使用了殘差網絡。

(2)使用了層歸一化。

 

3 ELMo

ELMo是一個繼承傳統NLP模型架構的新模型,依舊是一個RNN體系下的模型,模型能夠根據上下文語境,動態地生成詞向量。

模型典型結構

(1)模型使用了多層RNN結構,每層都使用的都是標準的Bi-LSTM,上一層的輸出作爲下一層相同單元的輸入。

(2)在下游任務需要用到特定層的輸出時,模型將抽取目標層的兩個單向LSTM網絡輸出的向量concat後交給下游任務。

(3)在應用到特定任務時,ELMo可以添加到原始任務模型的input端(將token輸入ELMo,輸出詞向量後再輸入原始任務模型),也可以添加到output端。

                                                圖3.1 ELMo模型

模型創新點

(1)模型在詞向量embedding的過程中引入了上下文特徵,同一個詞會根據不同的上下文語境,通過注意力機制動態地改變其生成的詞向量,這改善了傳統的靜態詞向量的一詞多義的問題。

(2)ELMo是一個雙向網絡,使用Bi-LSTM結構,能夠獲取上文和下文的信息。

模型各層輸出詞向量的特性

(1)模型各層的輸出,抽取的特徵有不同的側重點,有的側重語義信息,有的側重語法信息。

(2)論文建議使用各層輸出向量的加權和作爲模型的最終輸出向量。各層的權重值,是一個非常重要的參數,它根據下游任務的需要,有側重點地挑選不同層所抽取出的特性信息,並進行合併,最終傳遞給特定的下游任務中。

(3)高層的Bi-LSTM輸出,能夠更多地捕捉到語義信息(以及上下文信息)。

(4)低層的Bi-LSTM輸出,能夠更多地捕捉到語法信息。

模型其它特性

(1)ELMo模型的侷限性:Bi-LSTM是一個不完全的雙向網絡。因爲每次只訓練單向的網絡,然後把兩個單向網絡的輸出concat起來,而不是同時訓練雙向網絡。所以ELMo模型輸出的向量,是將前向/後向網絡學習到的向量concat的結果,而不是同時學到上文和下文的信息,屬於淺層的雙向網絡。

(2)在應用到特定任務時,ELMo可以添加到原始任務模型的input端(將token輸入ELMo,輸出詞向量後再輸入原始任務模型),也可以添加到output端。

(3)模型使用了dropout方法。

(4)模型使用了L2正則項。較小的λ會讓各層的權重,有更大的波動。ELMo模型傾向使用較小的λ。

 

4 BERT

BERT不是第一個預訓練模型,BERT也不是效果做好的預訓練模型,但是它是一個里程碑,標識着NLP進入預訓練模型時代。

模型典型結構

(1)BERT可以理解爲transformer和ELMo的結合體。

(2)使用了transformer的特徵提取機制。

(3)引入了ELMo的雙向機制。

模型創新點

transformer和BERT的論文作者是同一個團隊,在BERT論文裏,作者更側重於論述如何訓練BERT模型,以及如何讓BERT模型去適配下游任務。

(1)將transformer的mask機制由只mask下文改進爲mask上下文的隨機token,也就將單向網絡改進爲雙向網絡。

(2)提出了兩種預訓練任務:masked language model(masked LM),NSP(next sentence predict)。

(3)給出了應用於不同下游任務的語料改造建議。

masked LM任務及其侷限性

(1)模型隨機挑選輸入序列15%的token進行mask。模型的任務就是預測這些被mask的token。

(2)侷限性一:由於在預測階段,模型包含[MASK]這種token,但是在預測階段不會出現[MASK]這種token,這導致了訓練階段和預測階段的MASK不一致性

(3)侷限性二:在訓練階段,模型對上下文所有語料進行隨機mask。在文本生成這類特定任務裏,模型只看得到上文,而看不到下文,這也導致了訓練階段和預測階段的單雙向模型不一致性

NSP任務

(1)輸入語料時兩個句子的concat,NSP的目標是預測第一句文本在原文中的下一句,是否是語料中的第二句。

(2)[cls]對應位置的輸出向量,用於表示預測結果的label。

(3)NSP任務在後續的很多論文中都被證明效果不佳,具體內容在相應的論文裏再進行進一步描述。

模型輸入參數的構建

inputrepresentation的構成(相加):Token Embd(原始詞向量),Segment Embd(不同句子的分段標註信息),Position Embd(位置信息)

                                                        圖4.1 模型輸入參數的構建

針對不同下游任務的語料改造

針對不同的下游任務,網絡上的大牛們給出了直觀的改造示意圖,如圖4.1和4.2所示。

                                                                       圖4.2 下游任務改造1

                                               圖4.3 下游任務改造2

對於下游任務,需要說明2點:

(1)BERT在自然語言生成任務上效果不佳,估計和訓練-預測階段模型的差異性有關。

(2)對於很多任務,即使不經過fine-tune,模型也是能用的,所以BERT模型具有極強的泛化性

 

5 Transformer-XL

Transformer單元是一個類似CNN的結構,那麼也就有着類似“感受野”的屬性。在Transformer模型函數裏,有一個“最大序列長度”的配置,默認配置成512,也就是說此時模型只能接受長度不長於512的輸入序列。所以,輸入transformer模型的序列的長度是受到限制的。

爲了改善transformer在長文本任務中表現不佳的情況,transformer-XL模型就被提出來了。

模型結構和創新點

(1)transformer-XL以RNN網絡爲基礎架構。

(2)transformer-XL以transformer爲基本單元(segment)。

(3)使用了新的attention機制,以解決不同單元(segment)之間的信息傳遞的問題。

(4)使用了相對位置編碼機制,以解決不同單元(segment)之間的絕對位置編碼的混淆問題。

新的attention機制

(1)傳統transformer的token接受下一層的token(傳統transformer只有一個segment)的輸出作爲attention機制的入參。

(2)Transformer-XL模型的token接受的輸入,不僅僅是同一個segment中的前一層的輸出,還包含前一個segment的前一層的輸出(還可以對模型進行修改,使用更早sengment的輸出)。

(3)Query使用的是本segment的目標token的輸出,Key和Value使用的是前sengment的輸出和本segment的輸出。

                                                           圖5.1 segment間信息傳遞示意圖

相對位置編碼

使用相對位置編碼,而不是絕對位置編碼。是爲了和跨segment的attention機制相配合,否則會引起位置上的混亂。

基於相對位置編碼的attention機制的分數計算

 

圖5.2 基於相對位置編碼的attention機制的分數計算

其中:

(1)R(i-j)表示一個相對位置編碼。

(2)u和v是需要訓練得到的向量。由於在相對位置的座標系中,q的位置可以理解爲一個初始位置,所以u和v在所有的attention中都是一樣的。

(3)c項和d項的W(k)是不一樣的,一個和上下文語義相關,一個和位置信息相關。

完整的單層Transformer-XL信息流

模型其它特性

(1)Transformer-XL能夠捕捉的最長距離,等於N*L(sengment最大長度N,Transformer的層數L)。

(2)不同於傳統RNN模型的只使用最後時刻輸出的向量,Transformer使用了整個序列時刻的輸出。

6 XLNet

類似於transformer和BERT的一脈相承,transformer-XL和XLNet的作者也是同一個團隊。

作爲第一個跟進BERT的預訓練模型,XLNet當年還是火過一陣的,它在長文本和NLG任務上有着良好的表現。

模型典型結構

XLNet繼承了transformer-XL的結構特性:

(1)以transformer-XL爲基本單元(segment)的RNN網絡;

(2)使用相對位置編碼,這個結構尤其適用於長文本序列場景。

模型創新點

XLNet的創新點有兩個:

(1)雙流機制

(2)序列亂序方法

雙流機制

(1)模型將語句包含的信息,分爲語義(上下文)信息和位置信息兩個方面。

(2)在預測目標token的時候,傳統的語言模型是僅僅使用了上文的語義信息和位置信息,XLNet除此之外還使用了目標token的位置信息。

(3)通過雙流機制來實現(見圖6.1):(a)內容流h:包含上文序列所有token的語義信息和位置信息;(b)查詢流g:包含上文序列所有token的語義信息和位置信息,還包含當前token的位置信息。

(4)第一層的g是一個可訓練的向量w,第一層的h是embedding詞向量。

(5)雙流的Q/K/V矩陣是同一組。

圖6.1 雙流機制(a)內容流attention(b)查詢流attention

序列亂序方法

(1)計算語言模型的條件概率時,先對輸入語句進行亂序排列,再計算單向序列的條件概率分佈。由於亂序後的目標token,可能會學到上文和下文隨機token的信息(下文亂序後可能成爲上文),所以XLNet形式上是單向網絡,實際上是雙向網絡。

(2)對於長度爲T的序列,亂序後全排列共有T!種情形。

(3)由於文本序列的向量,編碼進了位置信息,所以亂序後模型依舊知道token的次序。

(4)爲了提高運算速度和減少內存消耗,模型僅通過序列的前c個token預測後續的token。序列長度和待預測token的長度的比值K是一個超參數,需要配置。之所以選擇通過前序的詞,預測後續的詞,是因爲後續的詞在條件概率語言模型中,能夠包含更多的信息。

(5)當前segment在使用到前序segment的信息時,雖然前序的segment是亂序的,但是由於其token包含位置信息,所以前序segment的次序會被糾正爲正常序列。

模型其它特性

(1)棄用了[MASK],緩解了pre-train和fine-tine之間不匹配的現象。

在BERT模型中,被MASK的待預測token,不會使用到其它被MASK的token的信息,因爲其他token被替換成了[MASK]。

但是在XLNet模型中,待預測的token可能會使用到任意token的信息,所有亂序後的位置位於待預測token前面的token信息都將被完整地用到。同時由於文本序列有被多次亂序後,所以待預測token可能會學習到所有上下文的信息。

(2)XLNet認爲NSP沒有效果,所以沒有采用NSP進行pre-train。

(3)BERT使用segment encoding來標註拼接到一個輸入序列裏的兩個分句。XLNet做了改進,使用s+和s-來表示兩個位置的token是否屬於同一個segment。s+和s-是可訓練向量。所以:(1)XLNet不關注目標token是來源於哪個分句,只關注兩個token是否來源於同一個分句。這提升了模型的泛化能力。(2)模型因此能夠適用於多個(多於2個)分句的場景。

(4)使用了span-predict的pre-train方法。

(5)在pre-train過程中,使用了正序和倒序(bidirectional data input pipeline)輸入數據的技巧。

 

7 ERNIE

ERNIE是百度提出的基於BERT的預訓練模型。作爲掌握着最多中文語料的互聯網公司,百度毫無疑問在訓練語料上有着先發優勢,ERNIE的確也在很長一段時間內佔據着中文NLP的SOTA地位。

模型特點和創新點

ERNIE的優勢來源於兩個方面:

(1)輸入語料包含了知識特徵,讓模型能夠更好地學習到知識。

(2)使用了大量的異構的無監督語料。包括中文維基百科、百度百科、百度新聞、百度貼吧的語料。

除此之外,ERNIE使用對話語言模型(DLM ,Dialogue Language Model)作爲預訓練任務。

知識的學習

(1)通過知識掩碼策略來學習知識,包括短語mask和專名mask。BERT在mask過程中,是以token爲粒度隨機mask的,ERNIE是以短語或專名爲粒度。

(2)通過一個三階段的策略對模型進行訓練:第一階段使用標準mask(15%的token被mask)。在這個階段裏,高級的語義知識很難被學習到;第二階段使用短語mask;第三階段使用專名mask。

DLM預訓練任務

模型使用DLM (Dialogue Language Model)任務進行預訓練:

(1)BERT輸入序列的每個token,其向量由三個部分組成:token embd,位置embd,segment embd。ERNIE將segment embd替換爲dialogue embd

                                                                              圖7.1 DLM輸入數據構建

(2)通過將Q或R替換成一個隨機的句子,來構建負樣本。

(3)這個思路還可以用於多輪對話。

模型其它特性

(1)進行了完形填空任務的對比實驗,在一些對比示例裏,模型發現BERT傾向於拷貝上下文裏的詞,而ERNIE模型學習到了知識,則會根據知識和上下文來填空。

(2)模型對中文語料做了繁簡轉換的預處理,對英文語料做了大寫轉小寫的預處理。

(3)模型使用了17964個單詞的詞表。

 

8 ERNIE2.0

ERNIE的一大特點是使用了異構的無監督語料,提高了模型的泛化性。ERNIE2.0使用多任務進行預訓練,在提高泛化性的路上又往前走了一步。

模型創新點

ERNIE2.0論文的貢獻主要在兩個方面:

(1)提出了序列多任務學習的預訓練任務機制。

(2)定製和引入了多種預訓練任務。

序列多任務學習

(1)通過序列多任務學習,模型能夠學習到詞彙、語法、語義信息。

(2)序列多任務學習需要解決的兩個問題:(a)如何在不忘記之前學到的知識的前提下,進行持續訓練(這是continual learning存在的問題)。(b)如何以一個高效的方式進行訓練。

(3)序列多任務學習包含兩個階段:(a)不斷的利用大量的、包含先驗知識的語料,構建無監督預訓練任務;(b)利用序列多任務學習方法,不斷地更新模型。

(4)序列多任務學習結構,和多任務學習、持續學習結構的對比:

                                                  圖8.1 序列化多任務學習/多任務學習/持續學習

(5)不同於持續學習和多任務學習,序列多任務學習在引入新的訓練任務時,先利用之前學習到的參數對模型進行初始化,再同時訓練新任務和舊任務。

(6)模型通過將所有的任務按需分配給不同的迭代輪次,達到高效訓練的目的(文章沒有提及分配的標準和方法)。

(7)序列多任務學習的模型裏,有兩個損失函數。一個是句子級別的損失函數,一個是token級別的損失函數。

論文中定製的三大類預訓練任務

(1)側重詞彙的任務,能夠讓模型學習到詞語信息,包括:知識mask任務,大寫字詞預測任務,字詞-文章關係的預測任務。

(2)側重結構的任務,能夠讓模型學習到語法信息,包括:語句重排序任務(通過一個n!分類的模型),語句距離任務。

(3)側重語義的任務,能夠讓模型學習到語義信息,包括:文章關係任務,信息檢索相關性任務。

(4)這些任務都是基於無監督或者弱監督的,因此這些語料數量巨大且不需要人爲標註。

(5)模型的輸入向量,除了token embd、位置embd、segment embd(sentence embd),還有task embd。

模型其它特性

(1)在pre-train階段使用序列多任務學習方法,在fine-tune階段根據特定任務進行微調。

(2)區分大小寫字詞的模型適用於NER任務,不區分大小寫的模型適用於其它任務。

(3)字詞-文章關係的預測任務裏,如果一個字詞在一篇文章裏多次出現,那麼這個字詞常常與這篇文章的主題相關。

(4)句子順序任務和相鄰句任務,能夠讓模型學習到結構化的信息。文章級別的語義相似度任務和句子間的論述關係任務,能夠讓模型學習到語義信息。

 

9 GPT

GTP是一個很早期的模型,在transformer之後,在BERT、XLNet、ERNIE之前。

模型典型結構

(1)GPT使用transformer的decoder作爲模型的基本單元,是一個單向模型,可以理解爲單向版本的BERT。

(2)GPT使用語言模型的條件概率作爲輔助目標函數(auxiliary objective)。並且發現在大語料場景下,模型效果得到改善,但是小語料場景下效果有限。

因爲這兩個特性,GPT很適合NLG任務

針對不同下游任務的改造

和BERT類似,GPT針對不同類型的下游任務,需要對輸入序列進行改造:

圖9.1 GPT針對不同下游任務的改造

模型其它特性

(1)在ablation study中,嘗試不進行pre-train,直接在特定任務上fine-tune,發現效果很差。

(2)使用了7000多本書的語料進行訓練。

 

10 GPT-2

GPT-2就是那個因爲聲稱“危險到不能公佈”拒絕開源,從而被業界學術界推上風口浪尖的模型。他的成名作就是那個“獨角獸的故事”。

圖10.1 GPT-2寫的關於獨角獸的故事

模型特徵

GPT-2的模型架構和GPT基本一致,但是卻“大”了很多:

(1)使用了大語料。

(2)使用了大模型。

“大”語料

(1)使用了大量的、多領域、高質量的訓練語料,例如爬蟲得到的網頁文本。

(2)在使用爬蟲獲取網頁文本時,特別關注了語料的質量。

(3)使用了網頁內容提取器:Dragnet,Newspaper。

(4)在大語料場景下,byte-level語言模型的效果不如word-level語言模型的效果。

“大”模型

(1)擴展最大序列長度,從512到1024個token。

(2)使用大batch:512。

(3)擴展詞表大小到50257個。

模型的通用性和泛化性

論文還特別強調了預訓練模型的通用性和泛化性:

(1)多任務學習是提高模型框架通用性的一種可靠方法。

(2)使用大量且多樣的語料進行pre-train後,能夠直接用於(zero-shot)多個不同領域的下游任務。

模型其它特性

(1)使用了Byte-Pair Encoding (BPE)方法。使用BPE方法使得模型不會受到預處理、分詞、詞表大小等方面的限制。

(2)層歸一化被移到了每個sub-block的輸入處。

(3)殘差網絡在入口處,先使用了激活函數。

(4)在最後一個自注意力模塊後加一個層歸一化。

(5)根據殘差網絡路勁的模型深度的累積和,定義殘差網絡的初始值:乘以1/sqrt(N),其中N是殘差網絡的層數。

 

11 RoBERTa

我們經常自稱爲“調參工程師”,但是自嘲歸自嘲,實際上調參試錯的確是我們工作中不可缺少的一個環節。

模型技巧和經驗

論文沒有太多很驚豔的創新點,但是它的調參技巧卻是我們能夠學習和借鑑的:

(1)使用全新的、更多的、多樣性的語料。

(2)訓練更長的時間。

(3)使用更大的batch:使用大batch能夠提高收斂速度和下游任務表現。

(4)棄用NSP。

(5)利用更長的句子進行訓練:在訓練週期的前90%,只使用達到最大長度的語料進行訓練。

(6)在訓練的過程中,動態改變mask的位置(BERT模型中,所有epoch的輸入語料的mask都是相同的。RoBERTa中每個epoch的輸入語料的mask都是不同的)。

(7)使用Byte-Pair Encoding (BPE)方法。BPE是一種介於char-level和word-level的方法,屬於subword方法的一種,即能夠緩解word-level的未登錄詞的問題,又能夠改善char-level的詞表達效果不佳的問題。

(8)論文強調了,BERT對語言模型的mask思路,在當前公開的訓練目標函數方法中,是最有效地一個。

 

12 ALBERT

在BERT之後出現的一些預訓練模型,都以BERT作爲baseline,並且聲稱模型效果超越了BERT。但是我們必須注意到,大部分這些模型的規模,都是超過BERT的。

這種類似軍備競賽的研究方法,在工業界的意義是不大的,因爲即使模型的效果再好,也無法部署上線,只能跑跑離線任務。

所以,這份筆記的最後兩篇論文,都是和簡化模型工作有關的。這節我們先介紹ALBERT模型。

模型創新點

(1)兩個提高模型參數效率的方法:詞嵌入向量的因式分解,層間參數共享。

(2)SOP (Sentence-Order Prediction)預訓練任務。

模型參數效率提升

在工業界,我們在部署預訓練模型時,會遇到以下三個難點:

(1)內存不足。

(2)在分佈式場景,訓練速度無法提高,原因傳輸大量的參數需要很大的通信帶寬。

(3)模型規模增加後,反而引起效果的下降(泛化性不足)。

爲了提高模型參數的效率,ALBERT基於BERT模型基礎框架,提出了兩個方法:

(1)詞嵌入向量的因式分解。

(2)層間參數共享。

此外,參數的減少,可以視爲一種正則化方法,能夠提升模型的效果。

詞嵌入向量的因式分解

(1)傳統的BERT模型,詞向量的維度和模型隱藏層的維度是一致的。

(2)由於詞向量沒有包含上下文信息,而模型隱藏狀態向量有包含上下文信息,所以隱藏狀態向量應該比詞向量包含更多的信息。因此,將兩者的維度綁定到一起是不合理的,隱藏狀態向量的維度應該遠大於詞向量的維度。

(3)所以將詞向量維度降維成E,隱藏狀態維度H保持不變,同時訓練一個E*H轉換矩陣。在詞向量和隱藏狀態向量交互時,先將詞向量乘以轉換矩陣升維到隱藏狀態的維度。

(4)因式分解後,模型需維護一個V*E(詞表大小V*詞向量維度E)的矩陣,和一個E*H(詞向量維度E*隱藏狀態維度H)的矩陣。

層間參數共享

傳統的BERT有12層,每層有FFN和attention兩個子層,模型訓練好後,它們的參數是不一樣的。在“層間參數共享”方法裏,部分層(子層)的參數可以是共享的,這樣就節約了存儲參數的空間。

經過煉丹實踐,得出以下經驗:

(1)共享FFN層的參數,會導致模型效果下降。

(2)共享attention層的參數,模型效果不會下降(詞向量維度E=128時)或者輕微下降(詞向量維度E=768時)。

(3)我們可以將L層模型分爲N組,每組包含M層,進行組內參數的共享。

NSP任務和SOP任務

除此之外,BERT的NSP方法也經常被一些論文所詬病,ALBERT對NSP效果不佳的原因做了分析,並提出了一個新的訓練任務Sentence-Order Prediction (SOP)自監督方法:

(1)NSP的設計思路實際上是將主題預測連貫性預測這兩個任務混雜在同一個任務裏。主題預測任務比連貫性預測任務更容易學習訓練,並且在MASK語言模型的訓練過程中已經學到了不少主題預測的信息。

(2)在NSP任務中,負例爲選自不同文檔的句子concat,這種負例構建方法即不利於主題預測任務,又不利於連貫性預測任務。

(3)句間連貫性對於NLU是很重要的,所以我們提出了SOP自監督方法,SOP方法的關注點是句子間的連貫性(inter-sentence coherence)

(4)模型利用句子順序損失函數去優化模型,這避免模型引入主題預測任務的干擾,而只專注於連貫性預測任務。

(5)在SOP方法中,我們判定兩個順序不是原文順序的句子caocat爲負例。

 

13 TinyBERT

近年來,模型蒸餾也是一個很熱門的領域,TinyBERT就是一個很有名的將模型蒸餾方法應用於transformer上的模型。

模型創新點

(1)TinyBERT模型提出了一個用於transformer模型的知識蒸餾方法。

(2)TinyBERT模型提出了一個兩階段的學習框架:通用知識蒸餾階段,基於特定任務的蒸餾階段。

基於transformer的知識蒸餾方法

(1)在兩個方面對模型進行了簡化:層數,向量維度。

(2)設計了三種損失函數:embd層的輸出,每個transform層的隱藏狀態和注意力矩陣,最後一層的logits輸出。

(3)BERT學習到的注意力權重包含了潛在的語言信息,在從教師網絡BERT到學生網絡TinyBERT的轉換中,語義信息也被傳遞了。

(4)

其中m=0表示表示embd層,m=M+1表示輸出層。

(5)

其中λ是一個人爲定義的超參數,表示對應蒸餾層的重要程度。在實驗中,λ取值爲1的時候模型的效果最好。

(6)

在TinyBERT模型的注意力矩陣的損失函數中,注意力矩陣是沒有做歸一化的,因爲實驗表明不做歸一化能夠讓模型收斂更快且表現更好。

(7)

對於兩個模型維度不同的向量,在求損失函數時,要將學生模型的向量乘上一個可訓練的矩陣,讓它的向量維度和教師模型一致。

(8)

在輸出層,採用交叉熵作爲損失函數。其中t是溫度參數,在本實驗中,t取值爲1時效果最好。

(9)不同的下游任務,重點使用模型的不同層的輸出向量的信息。

兩階段的蒸餾框架

(1)在通用知識蒸餾階段,縮減層數和維度,會導致模型效果的下降。

(2)模型在fine-tune蒸餾階段使用了數據增強。

數據增強

論文還提出了一個數據增強方法:

(1)先mask文本中的一個字詞,使用語言模型BERT預測出這個位置最有可能的M個字詞,作爲候選集。

(2)使用一個門限p去決定,是否將這個被mask的字詞隨機替換爲備選集中的一個字詞。如果詞語由多個字組成,那麼使用GloVe的固定詞向量進行替換,而不使用BERT模型輸出的候選集中的字詞。

(3)對文本中的每個詞,重複地執行以上步驟,這樣能得到一個新的文本。

論文提及的其它一些Tips

(1)簡化模型的主流技術有:量化、權重剪枝、知識蒸餾。

(2)有的知識蒸餾實例,會利用教師模型的參數對學生模型進行初始化。

 

14 總結

先上一張網絡上大佬做的預訓練模型的關係圖,看署名是清華的大佬做的。

                                                                       圖14.1 預訓練模型家譜

自從18年BERT問世後,19年各種預訓練模型就層出不窮,新論文發表的速度,甚至都快於我們看論文的速度。

所以,如何去學習瞭解新的預訓練模型,我在這裏講下我的心得體會,從理論和實踐兩方面來講。

理論方面,transformer/BERT/ELMo這三篇論文建議仔細看完,這三篇論文算是預訓練模型的基礎入門文章。精讀完這三篇,後續閱讀新的預訓練模型論文時,只要關注模型的改進點就可以了,一般3~4小時就能看完一篇新論文。另外transformer-XL和XLNet兩篇論文的技巧思路也很棒,也建議看看。

實踐方面,如果是自學的話,肯定會遇到一些內容文章裏沒講明白直接跳過了,我們就會很疑惑這個模塊到底是怎麼實現的。那麼這時候看源代碼就很重要了,網絡上很多講解文章,都是重理論輕實踐,在創新點理論方面分析得很到位透徹,對於原論文一筆帶過的實現細節卻不甚瞭解。所以無論如何,大家在看了論文之後,還是要找個模型的源碼去研究下的。雖然我們不造輪子,但是我們要知道輪子是怎麼造的。雖然去了解輪子是怎麼造的,不會提高我們的績效,也需要我們在加班之餘擠出一些些寶貴的時間,但是九層之臺,起於累土,打好基礎還是很重要的。

最後吐個槽,現在很多論文裏模型的優質效果都是大語料堆出來的,所以我一直覺得搞AI,語料數據就等同於錢,你要是錢多了,模型想怎麼搞怎麼搞,結果都差不到哪去。這個在學術界,就是有些論文的結果是靠語料提高的,實際上模型在改進創新方面沒什麼貢獻。在工業界,很多團隊都把重點放在模型本身上,而不注重語料數據的獲取和清洗。

 

15 參考資料

[1] Vaswani A,Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neuralinformation processing systems. 2017: 5998-6008.

[2] Peters M E,Neumann M, Iyyer M, et al. Deep contextualized word representations[J]. arXivpreprint arXiv:1802.05365, 2018.

[3] Devlin J,Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformersfor language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

[4] Dai Z, YangZ, Yang Y, et al. Transformer-xl: Attentive language models beyond afixed-length context[J]. arXiv preprint arXiv:1901.02860, 2019.

[5] Yang Z, DaiZ, Yang Y, et al. XLNet: Generalized Autoregressive Pretraining for LanguageUnderstanding[J]. arXiv preprint arXiv:1906.08237, 2019.

[6] Sun Y, WangS, Li Y, et al. ERNIE: Enhanced Representation through KnowledgeIntegration[J]. arXiv preprint arXiv:1904.09223, 2019.

[7] Sun Y, WangS, Li Y, et al. Ernie 2.0: A continual pre-training framework for languageunderstanding[J]. arXiv preprint arXiv:1907.12412, 2019.

[8] Radford A,Narasimhan K, Salimans T, et al. Improving language understanding by generativepre-training[J]. URL https://s3-us-west-2. amazonaws.com/openai-assets/researchcovers/languageunsupervised/language understandingpaper. pdf, 2018.

[9] Radford A,Wu J, Child R, et al. Language models are unsupervised multitask learners[J].OpenAI Blog, 2019, 1(8).

[10] Liu Y, OttM, Goyal N, et al. Roberta: A robustly optimized bert pretraining approach[J].arXiv preprint arXiv:1907.11692, 2019.

[11] Lan Z, ChenM, Goodman S, et al. Albert: A lite bert for self-supervised learning oflanguage representations[J]. arXiv preprint arXiv:1909.11942, 2019.

[12] Jiao X, YinY, Shang L, et al. Tinybert: Distilling bert for natural languageunderstanding[J]. arXiv preprint arXiv:1909.10351, 2019.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章