本篇文章主要介紹邱錫鵬老師在2020年發表的一篇預訓練模型的綜述:「Pre-trained Models for Natural Language Processing: A survey」 [1]。node
該綜述系統地介紹了nlp中的預訓練模型。主要的貢獻包括:git
-
1.深刻盤點了目前主流的預訓練模型,如word2vec,ELMo,BERT等。 -
2. 提出了一種預訓練模型的分類體系,經過四種分類維度來劃分目前已有的預訓練模型。包括: -
表徵的類型,即:是否上下文感知 -
編碼器結構,如:LSTM、CNN、Transformer -
預訓練任務類型,如:語言模型LM,帶掩碼的語言模型MLM,排列語言模型PLM,對比學習等 -
針對特定場景的拓展和延伸。如:知識加強預訓練,多語言預訓練,多模態預訓練和模型壓縮等 -
3. 如何將PTMs學到的知識遷移到下游的任務中。 -
4. 收集了目前關於PTMs的學習資料。 -
5. 指明PTMs將來的研究方向,如:侷限、挑戰、建議。
因爲篇幅緣由,本文主要針對前面兩點進行梳理,即「目前主流的預訓練模型」和「預訓練模型的分類體系」。github
咱們創建了天然語言處理、機器學習等討論組,歡迎你們加入討論。人數達到上限,添加下方好友手動邀請,注意必定要備註,否則沒法經過。web
1. 背景
「nlp、cv領域的傳統方法極度依賴於手動特徵工程」。例如nlp中的log-linear、CRF模型等,cv中各類抽取特徵的模型,如sift特徵等。深度學習中本質上是一種表示學習,可以必定程度上避免手動的特徵工程。究其緣由,主要得益於深度學習中一系列很強大的特徵提取器,如CNN、RNN、Transformer等,這些特徵提取器可以有效地捕獲原始輸入數據中所蘊含的特色和規律。面試
「nlp領域的發展比cv領域相對緩慢的緣由是什麼呢」?相比於cv領域,「nlp領域的劣勢在於有監督數據集大小很是小」(除了機器翻譯),致使深度學習模型容易過擬合,不能很好地泛化。可是相反,nlp領域的優點在於,存在大量的無監督數據集,若是可以充分利用這類數據進行訓練,那麼勢必可以提高模型的能力以及在下游任務中的表現。nlp中的預訓練模型就是這樣一類可以在大規模語料上進行無監督訓練,學習獲得通用的語言表徵,有助於解決下游任務的nlp模型。算法
「那麼什麼是好的語言表徵呢」?做者引用了Bengio的話,「好的表徵可以表達非特定任務的通用先驗知識,可以有助於學習器來解決AI任務.」 express
"a good representation should express general-purpose priors that are not task-specific but would be likely to be useful for a learning machine to solve AI-tasks."微信
「nlp領域好的文本表徵則意味着可以捕捉蘊含在文本中的隱性的語言學規則和常識性知識.」網絡
"capture the implicit linguistic rules and common sense knowledge hiding in text data, such as lexical meanings, syntactic structures, semantic roles, and even pragmatics." 架構
目前主流的語言表徵方式採用的是「分佈式表徵」(distributed representation),即低維實值稠密向量,每一個維度沒有特定的含義,可是「整個向量表達了一種具體的概念」。預訓練模型是學習分佈式表徵的重要途徑之一,它的好處主要包括:
-
在大規模語料上進行預訓練可以學習到 「通用的語言表示」,並有助於下游任務。 -
提供好的模型 「參數初始化」,提升泛化性和收斂速度。 -
在 「小數據集」上能夠看做是一種 「正則化」,防止過擬合。
2. 預訓練分類體系
下面將圍繞四種分類方式來介紹目前主流的預訓練模型,這些分類方式包括:
-
「表徵的類型」,即:學習到的表徵是不是上下文感知的; -
「編碼器結構」,如:LSTM、Transformer; -
「預訓練任務類型」,如LM,MLM,PLM; -
「針對特定場景的拓展」,如跨語言預訓練,知識加強,多模態預訓練,模型壓縮等。
這些分類方式是交叉的,也就是說同一個模型能夠劃分到多個分類體系下。
先一睹爲快,這幅圖是該綜述的精華之一。下面將圍繞上述4種分類體系來介紹預訓練任務的工做。
2.1 表徵類型
根據表徵類型的不一樣能夠分爲:「非上下文感知的表徵」 (Non-Contextual Representation)和「上下文感知的表徵」(Contextual Representation)。上下文能夠從字面上來理解,即:這個詞所在的上下文,如句子,段落等。
-
「非上下文感知的詞嵌入」。缺點是: 「靜態的」,不隨上下文變化而變化,無論這個詞位於哪一個句子中,詞的表示都是惟一的,沒法解決一詞多義問題。也沒法解決 「out-of-vocabulary」問題,這種狀況下,通常只能經過character-level或者sub-word embedding來解決,即經過拆解詞粒度爲字符粒度來解決泛化性問題。 -
「上下文感知的詞嵌入」:詞嵌入會隨着詞所在的 「上下文」不一樣而動態變化,可以解決一詞多義問題。形式化的,給定文本 ,每一個token 是個詞或子詞,爲了造成上下文感知的嵌入, 的表示須要 「依賴於整個文本。」 即: 。 稱爲token 的上下文感知的詞嵌入或動態詞嵌入,由於其融入了整個文本中的 「上下文信息」。 能夠稱之爲 「上下文感知的Encoder」。
如上圖,將非上下文和上下文結合在一塊兒。造成通用的NLP任務的架構。即:「非上下文感知的詞嵌入」(如word2vec訓練的embeddings),「輸入到上下文感知的Encoder」(例如:Transformer,可以捕獲句子中詞之間的依賴關係),每一個詞的表示都會融入句子中其它上下文詞的信息,獲得「上下文感知的詞嵌入」。同一個詞在不一樣的語句中會獲得不一樣的表示。
根據「表徵類型的不一樣」,做者將預訓練模型的發展「主要劃分爲了兩代」:
-
第一代預訓練模型因爲「不是致力於解決下游任務」,主要致力於「學習好word embeddings自己,即不考慮上下文信息(context-free),只關注詞自己的語義(semantic meanings),」,同時爲了計算的考慮,這些模型一般很是淺。如「Skip-Gram, GloVe」等。因爲是上下文無關的,這些方法一般沒法捕獲高階的概念(high-level concepts),如一詞多義,句法結構,語義角色,指代消解。表明性工做包括:「NNLM」[2],「word2vec」[3],「GloVe」[4]。
-
第二代預訓練模型致力於學習「contextual」 word embeddings。第一代預訓練模型主要是word-level的。很天然的想法是將預訓練模型拓展到「sentence-level」或者更高層次,這種方式輸出的向量稱爲contextual word embeddings,即:依賴於上下文來表示詞。此時,預訓練好的「Encoder」須要在下游任務「特定的上下文中」提取詞的表徵向量。表明性工做包括兩方面,
「1. 僅做爲特徵提取器」(feature extractor),
-
特徵提取器產生的上下文詞嵌入表示,在下游任務訓練過程當中是「固定不變」的。至關於只是把獲得的上下文詞嵌入表示餵給下游任務的模型,做爲「補充的特徵」,只學習下游任務特定的模型參數。
表明性工做包括:
(1) 「CoVe」[5]. 用帶注意力機制的「seq2seq」從「機器翻譯任務」中預訓練一個LSTM encoder。輸出的上下文向量(CoVe)有助於提高一系列NLP下游任務的性能。
(2) 「ELMo」[6]. 用「兩層的Bi-LSTM」從「雙向語言模型任務BiLM」(包括1個前向的語言模型以及1個後向的語言模型)中預訓練一個「Bi-LSTM Encoder」。可以顯著提高一系列NLP下游任務的性能。
「2.微調」 (fine-tuning),
在下游任務中,「上下文編碼器」的參數也會進行微調。即:把預訓練模型中的「encoder」模型結構都提供給下游任務,這樣下游任務能夠對「Encoder」的參數進行fine-tune。
表明性工做有:
-
(1) 「ULMFiT」[7] (Universal Language Model Fine-tuning):經過在文本分類任務上微調預訓練好的語言模型達到了state-of-the-art結果。這篇也被認爲是「預訓練模型微調」模式的開創性工做。提出了3個階段的微調:在通用數據上進行語言模型的預訓練來學習「通用語言特徵」;在目標任務所處的領域特定的數據上進行語言模型的微調來學習「領域特徵;「在目標任務上進行微調。文中還介紹了一些」微調的技巧」,如區分性學習率、斜三角學習率、逐步unfreezing等。
-
(2) 「GPT」[8](Generative Pre-training) :使用「單向的Transformer」預訓練「單向語言模型」。單向的Transformer裏頭用到了masked self-attention的技巧(至關因而Transformer原始論文裏頭的Decoder結構),即當前詞只能attend到前面出現的詞上面。之因此只能用單向transformer,主要受制於單向的預訓練語言模型任務,不然會形成信息leak。
-
(3) 「BERT」 [9](Bidirectional Encoder Representation from Transformer):使用雙向Transformer做爲Encoder(即Transformer中的Encoder結構),引入了新的預訓練任務,帶mask的語言模型任務MLM和下一個句子預測任務NSP。因爲MLM預訓練任務的存在,使得Transformer可以進行「雙向」self-attention。
除此以外,還有些挺有意思的工做研究 「上下文嵌入」 中 「所融入的知識」 ,如語言知識、世界知識等 [10] [11] [12] 。
2.2 上下文編碼器架構
對於上下文感知的Encoder,根據「架構」的不一樣,能夠進一步分爲「3種」,
-
「卷積模型」 (convolutional models):經過卷積操做來匯聚目標詞的「鄰居的局部信息」,從而捕獲目標詞的語義。優勢在於容易訓練,且可以很捕獲「局部上下文信息」。典型工做是EMNLP 2014的文章TextCNN[13],卷積網絡應用於nlp中特徵提取的開創性工做。還好比Facebook在ICML2017的工做[14]。
-
「序列模型」 (Sequential models):以序列的方式來捕獲詞的上下文信息。如LSTMs、GRUs。實踐中,一般採起bi-directional LSTMs或bi-directional GRUs來同時捕獲「目標詞雙向的信息」。優勢在於可以捕獲「整個語句序列」上的依賴關係,缺點是捕獲的「長距離依賴較弱」。典型工做是NAACL 2018的文章:「ELMo」[6]。
-
「圖模型」 (Graph-based models):將詞做爲圖中的結點,經過預約義的詞語之間的語言學結構(e.g., 句法結構、語義關係等)來學習詞語的「上下文表示」。缺點是,構造好的圖結構很困難,且很是依賴於專家知識或外部的nlp工具,如依存關係分析工具。典型的工做如:NAACL 2018上的工做[15]。
做者還提到,「Transformer其實是圖模型的一種特例」。這個觀點「醍醐灌頂」,也解釋了Transformer應用於圖神經網絡中的可行性。即:句子中的詞構成一張全鏈接圖,圖中任意兩個詞之間都有連邊,連邊的權重衡量了詞之間的關聯,經過「self-attention來動態計算」,目標是讓模型自動學習到圖的結構(實際上,圖上的結點還帶了詞自己的屬性信息,如位置信息等)。值得注意的是,Transformer在預訓練中的應用通常會拆解爲3種方式,「單向的」 (即:Transformer Decoder,使用了masked self-attention防止attend到future信息),如GPT, GPT-2;「雙向的」 (即:Transformer Encoder,兩側都能attend),如Bert,XLBert等;或者「單雙向都使用」(即:Transformer)。這些編碼器的示意圖以下:
卷積編碼器只能編碼「局部的信息」到目標詞上;序列模型可以捕獲整個語句上的依賴關係,但「長距離依賴」較弱;圖編碼器任意兩個詞都有鏈接,可以捕獲「任意詞之間的依賴關係」,「不受距離影響。」
2.3 預訓練任務
預訓練任務對於學習通用的表徵很是重要。甚至能夠說是「最重要的一環」,引導着表徵學習的整個過程。做者將預訓練任務分爲了3種,
-
「監督學習」 (supervised learning):從"輸入-輸出pair"監督數據中,學習輸入到輸出的映射函數。 -
「無監督學習」 (unsupervised learning):從無標籤數據中學習內在的知識,如聚類、隱表徵等。 -
「自監督學習」 (self-supervised learning):監督學習和無監督學習的折中。訓練方式是監督學習的方式,可是輸入數據的 「標籤是模型本身產生的」。核心思想是,用輸入數據的一部分信息以某種形式去預測其另外一部分信息(predict any part of the input from other parts in some form)。例如BERT中使用的MLM就是屬於這種,輸入數據是句子,經過句子中其它部分的單詞信息來預測一部分masked的單詞信息。
在nlp領域,除了機器翻譯存在大量的監督數據,可以採用監督學習的方式進行預訓練之外(例如CoVe利用機器翻譯預訓練Encoder,並應用於下游任務),大部分預訓練任務都是使用「自監督學習」的方式。下面圍繞自監督學習,來介紹主流的預訓練任務。
2.3.1 語言模型 (LM)
最著名的預訓練任務是語言模型 (Language Modeling),語言模型是指一類可以求解句子機率的機率模型,一般經過幾率論中的鏈式法則來表示整個句子各個單詞間的聯合機率。
形式化的,給定文本序列, ,其聯合機率 能夠被分解爲:
其中, 是特殊的token,用於標識句子的開頭 (此處應該也要有個標識句子結尾的特殊token)。 是詞典。
上述式子是典型的機率論中的鏈式法則。鏈式法則中的每一個部分 是給定上下文 條件下,當前要預測的詞 在整個詞典上的條件機率分佈。這意味着「當前的單詞只依賴於前面的單詞,即單向的或者自迴歸的,這是LM的關鍵原理」,也是這種預訓練任務的特色。所以,LM也稱爲auto-regressive LM or unidirectional LM。
對於上下文 ,能夠採用神經編碼器 來進行編碼,而後經過一個預測層來預測單詞 的條件機率分佈,形式化的:
其中, 是預測層 (好比softmax全鏈接層),用於輸出當前單詞 在整個詞典上的條件機率分佈。目標損失函數爲:
LM的「缺點」在於,除了自己的信息以外,每一個單詞的編碼「只融入了其所在句子左側的上下文單詞的信息」。而實際上,每一個單詞左右兩側上下文信息都是很是重要的。「爲何不能同時融入左右兩側的單詞信息呢?「主要是由於咱們的學習目標是預測下一個詞,若是讓當前詞同時融入兩側的信息,會形成」label的leak問題」。解決這個問題的方法是採用bidirectional LM (Bi-LM)即:分別考慮從左到右的LM和從右到左的LM,這兩個方向的LM是分開建模的。也就是說,訓練過程當中,「不會在一個LM預測下一個詞的時候,用到另外一個LM的encode的信息」。最後訓練完成後,每一個單詞能夠把兩個 和 的「輸出拼接」在一塊兒來造成最終的表徵。
2.3.2 帶掩碼的語言模型(MLM)
MLM主要是從BERT開始流行起來的,可以解決單向的LM的問題,進行雙向的信息編碼。MLM就比如英文中的完形填空問題,須要藉助語句/語篇全部的上下文信息才能預測目標單詞。具體的作法就是隨機mask掉一些token,使用特殊符號[MASK]來替換真實的token,這個操做至關於告知模型哪一個位置被mask了,而後訓練模型經過其它沒有被mask的上下文單詞的信息來預測這些mask掉的真實token。具體實現時,其實是個多分類問題,將masked的句子送入上下文編碼器Transformer中進行編碼,「[MASK]特殊token位置對應的最終隱向量」輸入到softmax分類器進行真實的masked token的預測。損失函數爲:
其中, 表示句子 中被mask掉的單詞集合; 是除了masked單詞以外的其它單詞。
「MLM的缺點有幾大點:」
-
會形成pre-training和fine-tuning之間的 「gap」。在fine-tuning時是不會出現pre-training時的特殊字符[MASK]。爲了解決這個問題,做者對mask過程作了調整,即:在隨機挑選到的15%要mask掉的token裏頭作了進一步處理。其中,80%使用[MASK] token替換目標單詞;10%使用隨機的詞替換目標單詞;10%保持目標單詞不變。除了解決gap以外,還有1個好處,即: 「預測一個詞彙時」,模型並不知道輸入對應位置的詞彙是否爲正確的詞 (10%機率),這就迫使 「模型更多地依賴於上下文信息去預測目標詞」,而且賦予了模型必定的 「糾錯」能力。 -
MLM 「收斂的速度比較慢」,由於訓練過程當中,一個句子只有15%的masked單詞進行預測。 -
MLM不是標準的語言模型,其有着本身的 「獨立性假設」,即假設mask詞之間是相互獨立的。 -
自迴歸LM模型可以經過聯合機率的鏈式法則來計算句子的聯合機率,而MLM只能進行 「聯合機率的有偏估計」(mask之間沒有相互獨立)。
MLM的變體有不少種。
-
「Sequence-to-Sequence MLM (Seq2Seq MLM)」: 將MLM分類任務變成seq2seq序列自迴歸預測任務,採用encoder-decoder的方式。原始的語句中有一段「連續出現的單詞」被mask掉了。encoder的輸入是masked的句子,decoder以自迴歸的方式來依次地預測masked tokens。這種預訓練任務很適合用於「生成式任務」。表明性工做有:微軟的 「MASS」[16] 和 Google的「T5」[17] 。這種預訓練認爲可以有效提升seq2seq類型的下游任務的表現。其損失函數爲:
是句子 被masked的n-gram span,是連續出現的單詞。基於encoder端的輸入序列 以及decoder已經解碼的部分 來自迴歸地預測下一個時間步 的單詞。
-
「Enhanced MLM (E-MLM)」:加強版MLM。
-
「RoBERTa」 [18]:Facebook 2019提出的方法。改進了BERT種靜態masking的方法,採用了動態masking的方法。 -
「UniLM」 [19]:微軟提出的方法。UniLM拓展mask prediction任務到三種語言模型任務中,單向預測、雙向預測、 「seq2seq預測。」 -
「XLM」 [20]: 將MLM應用到翻譯語言模型中,即「雙語料句子對「構成一個句子,而後使用MLM。 -
「SpanBERT」 [21]:Facebook提出的方法。改進了BERT中掩碼最小單元爲token所致使的強相關字詞被割裂開來的問題,使用了span masking來隨機掩蓋一段連續的詞。同時額外提出了一種 「邊界學習目標」 (Span Boundary Objective) ,但願被掩蓋的詞可以融入邊界的信息,即基於邊界以外的兩個單詞的向量和masked單詞的位置向量來預測masked單詞。這個改進對於 「抽取式問答」任務有很大的幫助。 -
「ERNIE」 [22]:百度提出的 ERNIE,將外部知識融入到MLM中。引入了命名實體Named Entity外部知識來掩蓋實體單元,進行訓練。
2.3.3 排列語言模型(PLM)
PLM在XLNet[23]中被提出。動機來源主要在於上文闡述的MLM的幾大缺點,如預訓練和微調階段的gap,mask詞之間的獨立性假設等。在傳統的單向自迴歸語言模型LM中,句子的聯合機率因子分解是按照從左到右或者從右到左的方式分解成條件機率的鏈式乘積的,這能夠看做是其中兩種聯合機率的因子分解序。實際上,句子的聯合機率的因子分解序還能夠有不少種,能夠任意的排列組合進行因子分解。PLM就是對聯合機率進行因子分解獲得排列,分解獲得的排列只決定了模型自迴歸時的預測順序,不會改變原始文本序列的天然位置。即:PLM只是針對語言模型建模不一樣排列下的因子分解排列,並非詞的位置信息的從新排列。
「那麼爲何這種方式每一個位置可以編碼原始語句中雙向的上下文信息呢?」 首先,前提是,模型的參數在全部的分解序下是共享的。其次,在每種因子分解序對應的排列語句下,對某個位置,會編碼排列句子中出如今該位置前面的其它詞的信息;那麼在全部的因子分解下,每一個詞都有機會出如今該位置的左側,那麼整體上該詞就會編碼全部詞的信息。
理想優化的目標是全部因子分解序獲得的排列上的指望對數似然。
其中, 是全部的因子分解序集合。 表明某種因子分解序 中,第 個位置的序號對應的原序列中的詞。好比,原始句子 ,某個因子分解序 ,即 ,則 ,所以,這個因子分解序對應的排列句子爲 。實際實現的時候,做者沒有預測全部的 個詞,只把每一個排列句的尾部的詞進行預測來減小計算量。
進一步,強調下實現上的亮點。實際實現的過程當中,仍然採用原始輸入語句,即保持原始句子的天然序,而模型內部會自動進行排列操做,對transformer進行適當的「attention mask」操做就能達到在因子分解序上進行自迴歸預測的目的。然而,預測的時候若是沒有考慮「目標詞在原始序列中的位置信息」的話,會致使預測的目標詞無論在排列句子中的哪一個位置,其分佈都是同樣的(「雖然輸入語句天然序不變,可是建模的時候不進行考慮的話,至關於對隨機擾動的序列進行建模預測,直觀上感受這樣顯然無效」)。做者作了改進,在預測
詞自己時,要利用到其在原始句子的「位置編碼信息」,即:
2.3.4 降噪自編碼器(DAE)
DAE在原始文本上加了噪聲,即corrupted input做爲輸入,目標是基於corrupted input來恢復原始的文本。MLM屬於DAE的一種形式,除此以外「DAE還有其它的形式」。下面的這些細類別,綜述參考的是Facebook2019的文章BART[24]。
-
「Token masking」:隨機抽樣token,並用[MASK] 特殊字符替換。BERT屬於這種。 -
「Token Deletion」:隨機刪除token。和masking的區別在於,模型還須要預測 「被刪除的單詞的真實位置。」 -
「Text Infilling」: 「連續的一些token」被替換爲單一的[MASK],模型須要進行缺失文本的填充。和SpanBERT比較像,區別在於SpanBert mask 掉幾個詞就填上幾個mask ,在這裏做者mask掉的span 都只是填上一個mask, 目的是爲了讓模型本身去學習多少個token被mask了。 -
「Sentence Permutation」:對文檔的 「語句順序」進行隨機擾動。 -
「Document Rotation:」 隨機選擇某個token,而後讓文檔進 「行rotation」從而使得被選中的詞做爲第一個詞(例如:12345,選中3時,變成34512),這樣是爲了讓模型可以識別文檔的真正起始詞。
2.3.5 對比學習(CTL)
前面介紹的方法主要是基於上下文的PTMs,即:基於數據自己的上下文信息構造輔助任務。這裏做者介紹的另外一大類的預訓練方法是基於對比的方法,即:經過「對比」來進行學習。很像learning to rank中的pairwise方法。CTL全稱:Contrastive Learning,假設了「觀測文本對」之間的語義比「隨機採樣的文本對」之間的語義更近。所以優化的目標是:
是觀測的文本類似對, 是負樣本對。上述損失其實是二路的softmax,實際上又等價於learning to rank中的BPR Loss,只須要把分子除到分母上,就能夠整理成相似BPR的形式了,即:
得分函數 可使用神經網絡編碼器來構造。一般有兩種方式:各自編碼後求點擊類似性做爲分數,或者逐元素操做後送入到編碼器進行打分,
基於「對比的方法」主要包括以下一些具體的預訓練任務類型,只不過下面這些對比的方法和上面的優化目標在形式上差別挺大的。
-
「Deep InfoMax」:最大化總體表示和局部表示之間的互信息。表明性工做是ICLR2020的 「InfoWord」 [25]: 最大化一個句子的全局表徵和其中一個ngram的局部表徵之間的Mutual Information。 -
「Replaced Token Detection (RTD):」 給定上下文條件下,預測某個token是否被替換。這裏頭,可能「對比體如今要讓模型去學習替換前和替換後的區別。在RTD任務中,和MLM不一樣的是,輸入序列中全部的token都可以獲得訓練和預測,所以比較高效,同時能解決[MASK] token帶來的預訓練和fine-tuning之間的gap。表明性方法google在ICLR2020提出的 「ELECTRA」 [26]。ELECTRA利用基於MLM的generator來對句子的某些token進行合理的替換,而後用discriminator來判斷這些token 「是真實的」, 「仍是被generator替換了」。最後預訓練完,只保留discriminator進行下游任務的fine-tuning。另外一個表明性工做是facebook在ICLR2020提出的 「WKLM」 [27],替換的時候是entity-level而不是token-level。具體而言,將entity替換爲同類型的其它entity,而後訓練模型進行判斷。 -
「Next Sentence Prediction (NSP):」 判斷文檔中的兩個句子是否是連在一塊兒的。即連貫性判斷任務。採樣的時候,對某個句子,50%的時候其真實的句子做爲下一句;50%的時候隨機選擇某個句子做爲下一句,模型須要理解句子之間的關係。出發點是但願可以理解句子對之間的關係,這也是BERT中的第二個預訓練任務。惋惜的是, 「這個任務被其它工做懟的很慘」,基本上的結論都是用處不大。可能的緣由在 「ALBERT」中有解釋,大概就是隨機選擇句子太trivial了,只須要基於句子對之間的主題是否一致就可以把負樣本判斷出來,而不是句子間的連貫性判斷。至關於,只須要判斷句子對是來自同一篇文檔裏頭(相同主題)的仍是來自不一樣篇文檔裏頭的,而咱們的目的是對同一篇文檔裏頭,句子之間的連貫性也可以很好的判斷。顯然,NSP任務須要作必定的改進。 -
「Sectence Order Prediction (SOP):」 「ALBERT」 [28] 中提出的預訓練任務。具體而言,將同一篇文檔裏頭的連貫句子對做爲正樣本,而把連貫的句子對的順序顛倒後做爲負樣本。這樣就能強迫模型真正的學習到句子之間的連貫性,而不只僅是經過句子之間的主題差別來判斷的。另外,阿里的 「StructBERT」 [29] 也採用了該任務。
再整體看下不一樣模型在架構和預訓練任務上的區別,「本篇綜述的精華總結之二:」
還給了不一樣模型在GLUE上的綜合表現,能夠看到google出品的XLNet,T5,ELECTRA以及Facebook提出的RoBERTa綜合實力上是最強的。不過除這些以外,截止至2020.11.27號,最新榜單[30] 裏頭,排名是這樣的,能夠看出技術迭代速度之驚人。
2.4 預訓練的延伸方向
預訓練模型延伸出了不少新的研究方向。包括了:
-
基於 「知識加強」的預訓練模型,Knowledge-enriched PTMs -
「跨語言或語言特定的」預訓練模型,multilingual or language-specific PTMs -
「多模態」預訓練模型,multi-modal PTMs -
「領域特定」的預訓練模型,domain-specific PTMs -
「壓縮」預訓練模型,compressed PTMs
2.4.1 基於知識加強的預訓練模型
PTMs主要學習通用語言表徵,可是缺少領域特定的知識。所以能夠考慮把外部的知識融入到預訓練過程當中,讓模型同時捕獲「上下文信息」和「外部的知識」。早期的工做主要是將知識圖譜嵌入和詞嵌入一塊兒訓練。從BERT開始,涌現了一些融入外部知識的預訓練任務。表明性工做如:
-
「SentiLR」[31] : 引入word-level的語言學知識,包括word的詞性標籤(part-of-speech tag),以及藉助於SentiWordNet獲取到的word的情感極性(sentiment polarity),而後將MLM拓展爲label-aware MLM進行預訓練。包括:給定sentence-level的label,進行word-level的知識的預測 (包括詞性和情感極性); 基於語言學加強的上下文進行sentence-level的情感傾向預測。做者的作法挺簡單的,就是把sentence-level label或word-level label進行embedding而後加到token embedding/position embedding上,相似BERT的作法。而後,實驗代表該方法在下游的情感分析任務中可以達到state-of-the-art水平。
-
「ERNIE (THU)」[32] : 將知識圖譜上預訓練獲得的entity embedding融入到文本中相對應的entity mention上來提高文本的表達能力。具體而言,先利用TransE在KG上訓練學習實體的嵌入,做爲外部的知識。而後用Transformer在文本上提取文本的嵌入,將文本的嵌入以及文本上的實體對應的KG實體嵌入進行異構信息的融合。學習的目標包括MLM中mask掉的token的預測;以及mask文本中的實體,並預測KG上與之對齊的實體。
相似的工做還包括KnowBERT, KEPLER等,都是經過實體嵌入的方式將知識圖譜上的結構化信息引入到預訓練的過程當中。
-
「K-BERT」[33] : 將知識圖譜中與句子中的實體相關的三元組信息做爲領域知識注入到句子中,造成樹形拓展形式的句子。而後能夠加載BERT的預訓練參數,不須要從新進行預訓練。也就是說,做者關注的不是預訓練,而是直接將外部的知識圖譜信息融入到句子中,並藉助BERT已經預訓練好的參數,進行下游任務的fine-tune。這裏頭的難點在於,異構信息的融合和知識的噪音處理,須要設計合適的網絡結構融合不一樣向量空間下的embedding;以及充分利用融入的三元組信息(如做者提到的soft position和visible matrix)。
2.4.2 跨語言或語言特定的預訓練模型
這個方向主要包括了跨語言理解和跨語言生成這兩個方向。
對於「跨語言理解」,傳統的方法主要是學習到多種語言通用的表徵,使得同一個表徵可以融入多種語言的相同語義,可是一般須要對齊的弱監督信息。可是目前不少跨語言的工做不須要對齊的監督信息,全部語言的語料能夠一塊兒訓練,每條樣本只對應一種語言。表明性工做包括:
-
「mBERT」 [34] :在104種維基百科語料上使用MLM預訓練,即便沒有對齊最終表現也很是不錯,沒有用對齊的監督信息。 -
「XLM」 [20]:在mBERT基礎上引入了一個翻譯任務,即:目標語言和翻譯語言構成的雙語言樣本對輸入到翻譯任務中進行對齊目標訓練。這個模型中用了對齊的監督信息。 -
「XLM-RoBERTa」 [35]:和mBERT比較像,沒有用對齊的監督信息。用了更大規模的數據,且只使用MLM預訓練任務,在XNLI, MLQA, and NER.等多種跨語言benchmark中取得了SOA效果。
對於「跨語言生成」,一種語言形式的句子作輸入,輸出另外一種語言形式的句子。好比作機器翻譯或者跨語言摘要。和PTM不太同樣的是,PTM只須要關注encoder,最後也只須要拿encoder在下游任務中fine-tune,在跨語言生成中,encoder和decoder都須要關注,兩者一般聯合訓練。表明性的工做包括:
-
「MASS」 [16]:微軟的工做,多種語言語料,每條訓練樣本只對應一種語言。在這些樣本上使用Seq2seq MLM作預訓練。在無監督方式的機器翻譯上,效果不錯。 -
「XNLG」 [36]:使用了兩階段的預訓練。第一個階段預訓練encoder,同時使用單語言MLM和跨語言MLM預訓練任務。第二個階段,固定encoder參數,預訓練decoder,使用單語言DAE和跨語言的DAE預訓練任務。這個方法在跨語言問題生成和摘要抽取上表現很好。
2.4.3 多模態預訓練模型
多模態預訓練模型,即:不只僅使用文本模態,還可使用視覺模態等一塊兒預訓練。目前主流的多模態預訓練模型基本是都是文本+視覺模態。採用的預訓練任務是visual-based MLM,包括masked visual-feature modeling and visual-linguistic matching兩種方式,即:視覺特徵掩碼和視覺-語言語義對齊和匹配。這裏頭關注幾個關於image-text的多模態預訓練模型。這類預訓練模型主要用於下游視覺問答VQA和視覺常識推理VCR等。
-
「雙流模型」:在雙流模型中文本信息和視覺信息一開始先通過兩個獨立的Encoder(Transformer)模塊,而後再經過跨encoder來實現不一樣模態信息的融合,表明性工做如:NIPS 2019, 「ViLBERT」[37]和EMNLP 2019, 「LXMERT」[38]。
-
「單流模型」:在單流模型中,文本信息和視覺信息一開始便進行了融合,直接一塊兒輸入到Encoder(Transformer)中,表明性工做如:「VisualBERT」 [39],「ImageBERT」[40]和「VL-BERT」 [41]。
2.4.4 模型壓縮方法
預訓練模型的參數量過大,模型難以部署到線上服務。而模型壓縮可以顯著減小模型的參數量並提升計算效率。壓縮的方法包括:
-
「剪枝」(pruning):去除不那麼重要的參數(e.g. 權重、層數、通道數、attention heads)
-
「量化」(weight quantization):使用佔位更少(低精度)的參數
-
「參數共享」(parameter sharing):類似模型單元間共享參數
-
「知識蒸餾」(knowledge diistillation):用一些優化目標從原始的大型teacher模型中蒸餾出一個小的student模型。一般,teacher模型的輸出機率稱爲soft label,大部分蒸餾模型讓student去擬合teacher的soft label來達到蒸餾的目的。蒸餾之因此work,核心思想是由於「好模型的目標不是擬合訓練數據,而是學習如何泛化到新的數據」。因此蒸餾的目標是讓學生模型學習到教師模型的泛化能力,理論上獲得的結果會比單純擬合訓練數據的學生模型要好。
固然,模型壓縮一般還會結合上述多種方法,好比剪枝+蒸餾的融合方法。常見的知識蒸餾的 PTMs以下表所示。
想深刻了解BERT蒸餾原理的話,推薦參考rumor大神的文章,BERT蒸餾徹底指南|原理/技巧/代碼,裏面詳細介紹了上表中涉及到的各類蒸餾方法,同時對蒸餾作了不少細緻的總結。如:蒸餾的提高來源:一方面來源於從「精調階段蒸餾->預訓練階段蒸餾」,另外一方面則來源於「蒸餾最後一層知識->蒸餾隱層知識->蒸餾注意力矩陣」;溫度參數 以及soft label和hard label的loss比例 的設置;蒸餾的代碼實戰等。
總結
本文是對邱錫鵬老師2020年的一篇預訓練模型survey的簡單梳理。主要針對survey中提到的四大類預訓練模型的分類體系作了梳洗,「這四大類預訓練模型分類體系爲:」
-
表徵的類型,即:是否上下文感知; -
編碼器結構,如:LSTM、CNN、Transformer; -
預訓練任務類型,如:語言模型LM,帶掩碼的語言模型MLM,排列語言模型PLM,對比學習等。 -
針對特定場景的拓展和延伸。如:知識加強預訓練,多語言預訓練,多模態預訓練和模型壓縮等。
這篇綜述文章信息量很是足,關於其餘部分,以下游任務中的應用,預訓練的技巧,將來方向等將在之後的文章中進行分享。
參考
-
[1] Qiu X, Sun T, Xu Y, et al. Pre-trained models for natural language processing: A survey[J]. arXiv preprint arXiv:2003.08271, 2020. -
[2] NNLM:Yoshua Bengio, R´ejean Ducharme, Pascal Vincent, and Christian Jauvin. A neural probabilistic language model. Journal of machine learning research, 3(Feb):1137–1155, 2003. -
[3] Tomas Mikolov, Ilya Sutskever, Kai Chen, Gregory S. Corrado, and Jeffrey Dean. Distributed representations of words and phrases and their compositionality. In NeurIPS, 2013. -
[4] Jeffrey Pennington, Richard Socher, and Christopher D. Manning. GloVe: Global vectors for word representation. In EMNLP, 2014. -
[5] Bryan McCann, James Bradbury, Caiming Xiong, and Richard Socher. Learned in translation: Contextualized word vectors. In NeurIPS, 2017. -
[6] Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, and Luke Zettlemoyer. Deep contextualized word representations. In NAACL-HLT, 2018. -
[7] Jeremy Howard and Sebastian Ruder. Universal language model fine-tuning for text classification. In ACL, pages 328339, 2018. -
[8] Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. Improving language understanding by generative pre-training. 2018. -
[9] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. BERT: pre-training of deep bidirectional transformers for language understanding. In NAACL-HLT, 2019. -
[10]ICLR 2019: What do you learn from context? probing for sentence structure in contextualized word representations. -
[11] NIPS 2019: Visualizing and measuring the geometry of BERT. -
[12] ACL 2019: How can we know what language models know? -
[13] Yoon Kim. Convolutional neural networks for sentence classification. In EMNLP, pages 1746–1751, 2014. -
[14] Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N Dauphin. Convolutional sequence to sequence learning. In ICML, pages 1243–1252, 201728015059046. -
[15] Diego Marcheggiani, Joost Bastings, and Ivan Titov. Exploiting semantics in neural machine translation with graph convolutional networks. In NAACL-HLT, pages 486–492, 2018. -
[16] Kaitao Song, Xu Tan, Tao Qin, Jianfeng Lu, and Tie-Yan Liu. MASS: masked sequence to sequence pre-training for language generation. In ICML, volume 97 of Proceedings of Machine Learning Research, pages 5926–5936, 2019. -
[17] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. Exploring the limits of transfer learning with a unified text-to-text transformer. arXiv preprint arXiv:1910.10683, 2019. -
[18] Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. RoBERTa: A robustly optimized BERT pretraining approach. arXiv preprint arXiv:1907.11692, 2019. -
[19] NIPS 2019, Unified language model pre-training for natural language understanding and generation. -
[20] NIPS 2019, Cross-lingual language model pretraining -
[21] ACL2020, SpanBERT: Improving pretraining by representing and predicting spans. -
[22] 2019, ERNIE: enhanced representation through knowledge integration -
[23] NIPS2019, XLNet: Generalized Autoregressive Pretraining for Language Understanding -
[24] 2019, BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension -
[25] ICLR 2020, A mutual information maximization perspective of language representation learning -
[26] ICLR 2020, ELECTRA: Pre-training text encoders as discriminators rather than generators. -
[27] ICLR2020, WKLM, Pretrained encyclopedia: Weakly supervised knowledge-pretrained language model. -
[28] ICLR2020, ALBERT: A lite BERT for self-supervised learning of language representations -
[29] ICLR 2020, StructBERT: Incorporating language structures into pre-training for deep language understanding. -
[30] GLUE Leaderboard:https://gluebenchmark.com/leaderboard -
[31] 2020, SentiLR: Linguistic knowledge enhanced language representation for sentiment analysis. -
[32] ACL 2019, ERNIE: enhanced language representation with informative entities. -
[33] AAAI2020, K-BERT: Enabling language representation with knowledge graph. -
[34] Multilingual BERT: https://github.com/google-research/bert/blob/master/multilingual.md -
[35] 2019. Unsupervised cross-lingual representation learning at scale. -
[36] AAAI2020:Cross-lingual natural language generation via pre-training. -
[37] NIPS 2019:ViLBERT: Pretraining task-agnostic visiolinguistic representations for vision-and-language tasks. -
[38] EMNLP 2019:LXMERT: learning crossmodality encoder representations from transformers. -
[39] 2019 VisualBERT: A simple and performant baseline for vision and language -
[40] 2020 ImageBERT: Cross-modal pre-training with large-scale weak-supervised image-text data -
[41] 2019 VL-BERT: Pre-training of Generic Visual-Linguistic Representations -
[42] NLP算法面試必備!史上最全!PTMs:NLP預訓練模型的全面總結:https://zhuanlan.zhihu.com/p/115014536 -
[43] BERT蒸餾徹底指南|原理/技巧/代碼:https://mp.weixin.qq.com/s/rxwHFjl0FEPWEcfMcwXL8w
- END -

2020-11-29

2020-11-30

2020-11-27

本文分享自微信公衆號 - NewBeeNLP(NewBeeNLP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。