從BERT、XLNet到MPNet,細看NLP預訓練模型發展變遷史


轉載來源:https://zhuanlan.zhihu.com/p/146325984
alt
20 世紀以來,自然語言處理(NLP)領域的發展湧現了許多創新和突破。NLP 中許多之前機器不可能完成的任務,如閱讀理解、人機對話、自動寫新聞稿等,正逐漸成爲現實,甚至超越了人類的表現。

如果總結過去 20 年裏,無數先輩辛勞付出帶來的璀璨成果,以下 3 個代表性工作列入 NLP 名人堂,應該實至名歸:
1)2003 年 Bengio 提出神經網絡語言模型 NNLM,從此統一了 NLP 的特徵形式——Embedding;
2)2013 年 Mikolov 提出詞向量 Word2vec,延續 NNLM 又引入了大規模預訓練(Pretrain)的思路;
3)2017 年 Vaswani 提出 Transformer 模型,實現用一個模型處理多種 NLP 任務。

基於 Transformer 架構,2018 年底開始出現一大批預訓練語言模型,刷新衆多 NLP 任務,形成新的里程碑事件。本文將跨越 2018-2020,着眼於 3 個預訓練代表性模型 BERT、XLNet 和 MPNet,從以下 4 個章節介紹 NLP 預訓練語言模型的發展變遷史:

1.BERT 原理及 MLM 簡述
2.XLNet 原理及 PLM 簡述
3.MPNet 原理及創新點簡述
4.NLP預訓練模型趨勢跟蹤
附錄:快速上手BERT的4大工具包

1.BERT 原理及 MLM 簡述

alt
自谷歌 2018 年底開源 BERT,NLP 界的遊戲規則某種程度上被 “顛覆” 了;一時間,這個芝麻街的可愛小黃人形象,成爲衆多 NLPer 及其他 DL、ML 研究者們的擁躉。

“BERT 一把梭 “,“遇事不決就 BERT”,“BERT 在手,天下我有”,表達了使用者們對 BERT 的心聲。也因爲 BERT,NLP 的准入門檻大幅下降,一些較淺層的 NLP 任務如文本分類、相似匹配、聚類某種程度上可以被認爲是完全解決。
BERT 四大下游任務微調
alt

BERT 爲什麼會有如此引人注目的優良效果?下面我們再來回顧下 BERT 到底是什麼。

1.1 Masked Language Model & Next Sentence Predict**

BERT 本質上是一個自編碼(Auto Encoder)語言模型,爲了能見多識廣,BERT 使用 3 億多詞語訓練,採用 12 層雙向 Transformer 架構。注意,BERT 只使用了 Transformer 的編碼器部分,可以理解爲 BERT 旨在學習龐大文本的內部語義信息。

具體訓練目標之一,是被稱爲掩碼語言模型的 MLM。即輸入一句話,給其中 15% 的打上 “mask” 標記,經過 Embedding 輸入和 12 層 Transformer 深度理解,來預測 “mask” 標記的地方原本是哪個字。

input:   欲把西[mask]比西子,淡[mask]濃抹總相宜
output:  欲把西[湖]比西子,淡[妝]濃抹總相宜

例如我們輸入 “欲把西 [mask] 比西子,淡 [mask] 濃抹總相宜” 給 BERT,它需要根據沒有被 “mask” 的上下文,預測出掩蓋的地方是 “湖” 和“妝”。

MLM 任務的靈感來自於人類做完形填空。挖去文章中的某些片段,需要通過上下文理解來猜測這些被掩蓋位置原先的內容。

訓練目標之二,是預測輸入的兩句話之間是否爲上下文(NSP)的二分類問題。繼續輸入 “欲把西[湖] 比西子,淡 [妝] 濃抹總相宜”,BERT 將預測這兩句話的組合是否合理(這個例子是“yes”)。(隨後的研究者對預訓練模型探索中證明,NSP 任務過於簡單,對語言模型的訓練作用並不是很大)

通過這兩個任務和大規模語料訓練,BERT 語言模型可以很好學習到文本之間的蘊含的關係。

1.2 Self-Attention

接下來簡單介紹 BERT 以及 XLNet、MPNet 所使用 Transformer 的核心模塊:自注意力機制

alt

自注意力機制重點在於學習輸入序列自身的內部信息。具體地,每個 tokentoken 可以觀察到序列中其他所有 tokentoken 的信息,並通過” 注意力 “交互,其餘的 tokentoken' 會產生不同大小地權重(整個過程類似加權)。上例中,“西子”和 “西湖” 關係緊密,因此它們之間的 attention 權重更大(大於 “西子” 和“淡妝”)。最終自注意力層的輸出涵蓋了序列所有 tokentoken 的語義信息,實現了雙向編碼上下文。

同時,這種雙向性使得模型可以同時觀測序列的所有位置,解決了 RNN 等遞歸模型無法高效並行的瓶頸。

1.3 Denoising Auto Encoder

由於架構採用 12 層雙向 Transformer 且訓練目標包含還原 maskmask 位置的信息,BERT 被稱爲去噪自編碼語言模型(DAE)

而在 BERT 之前,NLP 領域的語言模型幾乎是 Auto Regression(自迴歸)類型,即當前位置的字符預測 TiTi需要編碼之前 T(0:i1)T(0:i-1) tokens 的語義信息,使得模型訓練 / 預測只能單向進行。

雖然 ELMO 採用了 BiLSTM,但只是前向、後向兩次輸出的簡單拼接,包含的全局語義信息依然較弱。

1.4 BERT 缺點

雖然效果好,BERT 的缺點也很明顯。從建模本身來看,隨機選取 15% 的字符 mask 忽視了被 mask 字符之間可能存在語義關聯的現象,從而丟失了部分上下文信息。同時,微調階段沒有 mask 標記,導致預訓練與微調的不一致

2.XLNet 原理及 PLM 簡述

和 BERT 不同,XLNet 本質上是用自迴歸語言模型來同時編碼雙向語義信息的思路,可以克服 BERT 存在的依賴缺失和訓練 / 微調不一致的問題。同時爲了彌補自迴歸模型訓練時無法同時看到上下文的缺陷,XLNet 曲線救國地提出了 PLM 排列語言模型的訓練方式。

2.1 排列語言模型 - Permutation Language Model

對於一個長度爲 N 的序列,我們知道其存在 N!N! 種因式分解順序,通過一次採樣一種序列的因式分解組合,每個 token 總是能夠在不同的序列中觀察到其他所有 token;同時模型參數對於所有的因式分解順序共享,因此從期望的角度上看,XLNet 模型能夠雙向地編碼上下文。

alt
例如,初始序列爲 (x1,x2,x3,x4)(x1,x2,x3,x4),這裏的 x3x3 只能關注到前面的 (x1,x2)(x1,x2) ,但在某種因式分解排列(x4,x2,x1,x3)(x4,x2,x1,x3)中, x3x3 具備了關注 (x4,x2,x1)(x4,x2,x1)的能力。另外,XLNet 的原始輸入和 BERT 相同,依然是正常排序的(x1,x2,x3,x4)(x1,x2,x3,x4)

2.2 雙流自注意力

那 XLNet 是如何在保持輸入順序不變的同時,對序列進行亂序編碼的呢?

簡單而言,通過 Attention 掩碼機制,將當前 token 及其之後的 token(不該看到的部分)嵌入信息用 attention-mask 掩蓋。具體實現上,使用了一種雙流自注意力機制。

例如某個序列的因式分解順序爲 (x2,x1,x4,x3)(x2,x1,x4,x3)(x2,x1,x3,x4)(x2,x1,x3,x4),如果需要預測第三個位置的 token,傳統的自迴歸模型通過 (x2,x1)(x2,x1) 的編碼來預測後面的 token,概率表達式爲 P(xt(x2,x1))P(xt|(x2,x1))。然而這樣會帶來一個問題:x2 和 x1 的編碼和需要預測的下一個 token 是無關的,xt 既可以是 x4 也可以是 x3,即 P(x3|x2,x1) = P(x4|x2,x1),這顯然不合理(傳統 RNN 是按正常的序列進行遞歸預測,位置是正確的,所以不存在這個問題)。因此 XLNet 需要引入待預測 token 的位置信息,例如 P(x4x2,x1,pos4)P(x4|x2,x1,pos4)P(x3x2,x1,pos3)P(x3|x2,x1,pos3) ,確保生成合理的結果。

然而這又帶來了新的矛盾。對於某個因式分解順序 (x2,x1,x4,x3)(x2,x1,x4,x3),在預測 x4 的時候,模型不能編碼自身的 token-embedding,只能編碼前面的 (x2,x1)(x2,x1)以及自身的 position-embedding,否則訓練就沒有意義了;然而在預測 x3 的時候,又需要用到 x4 的完整的編碼信息。如果繼續沿用 BERT 的自注意力機制必然存在問題,因此 XLNET 將自注意力機制拆分爲 Query 流和 Content 流。Query 流中當前 token 只能關注到前面的 token 和自身的位置信息,Content 流中當前 token 可以關注到自身。

具體來看,XLNET 將序列拆分爲 2 部分,序列的後部分(約佔句長的 1/K,K 爲超參數)爲需要預測的部分,前部分爲已知上下文。已知的上下文不做預測,因此只計算 content 流注意力,每個 token 都編碼之前 token 以及自身的完整信息。從預測部分開始,每個 token 同時計算 Query 流和 Content 流注意力:Query 流的輸出用於預訓練做預測,Content 流的輸出提供給後續待預測 token 計算 Query 流,這就保證了當預測當前 token 時,它無法看到自身編碼;當前 token 預測結束後,將其 Content 流作爲上下文部分的編碼提供給後續需要預測的 token。預訓練過程計算 2 種注意力,微調過程去除了 Query 流,只保留 Content 流,因爲不需要對 token 進行詞表空間的預測,而是需要編碼整個上下文語義用於下游任務

alt

2.3 雙向 AR Model

前面提到 Auto Regression 模型的缺點是隻能單向編碼,但它能夠編碼被預測的 token 之間的聯繫,即克服了 BERT 被 mask 字符間信息丟失的缺點。其次,通過上文的 PLM 模型彌補了自迴歸語言模型只能單向編碼的缺點。AR 模型在預訓練和下游任務中都沒有對輸入序列進行損壞(遮蓋部分 token,引入噪聲),消除了模型在預訓練和微調過程中的差異。

雖然在期望上看,PLM 幾乎實現了雙向編碼功能的自迴歸模型,但是針對某一個因式分解序列來說,被預測的 token 依然只能關注到它前面的序列,導致模型依然無法看到完整序列信息和位置信息。

3.MPNet 原理及創新點簡述

結合 BERT、XLNet 的思路,南京大學和微軟在 2020 年共同提出了新的預訓練語言模型 MPNet:Masked and Permuted Pre-training for Language Understanding

MPNet 的創新點在於 4 個字:位置補償(position compensation),大家先留個印象,下文會再詳細介紹。

論文開篇,作者針對上文 MLM、PLM 各自特點,希望用一種統一的模型既保留二者的優點,又彌補它們的不足,這就是 MPNet。

3.1 統一視角

MLM、PLM 回顧,(a)、(b) 中左邊和右邊等價
alt

首先,作者通過重新排列和切分輸入序列中的 tokens,將 MLM 和 PLM 統一爲非預測部分(non-predicted)和預測部分(predicted),如圖 (a),(b) 右側。如此一來,MLM 和 PLM 就擁有了相似的數學表達公式,僅在條件部分有細小差異。
alt

3.2 模型架構

alt

爲緩解 BERT-mask 可能丟失依賴信息的問題,MPNet 沿用了 XLNet 的自迴歸結構,同時爲彌補 XLNet 無法捕捉全部序列位置信息的缺陷,添加了「位置補償」:針對需要預測的 token,額外添加了它們的位置信息。使得自迴歸過程中,在任意一個位置 i,除了可以看到之前部分的 token 編碼,還能看到序列所有 token 的位置編碼(類似於 BERT)。

例如,對於一個長度爲 6 的 token 序列 x=(x1,x2,x3,x4,x5,x6)x=(x 1, x 2, x 3, x 4, x 5, x 6),採樣得到一個因式分解序列 xz=(x1,x3,x5,x4,x6,x2)x z=(x 1, x 3, x 5, x 4, x 6, x 2);假設非預測部分爲 c=3,x(z<=c)=(x1,x3,x5)c=3,x(z<=c)=(x1,x3,x5),待預測部分爲 x(z>c)=(x4,x6,x2)x(z>c)=(x4,x6,x2) 。對於 z>cz>c部分,作者在待預測的 tokens 左邊額外添加了 mask-token M(z>c)M(z>c),最終整個 token 的輸入序列由三部分組成:(x(z<=c),M(z>c),x(z>c))=(x1,x3,x5,[M],[M],[M],x4,x6,x2)(x(z<=c), M(z>c), x(z>c))=(x 1, x 3, x 5,[M],[M],[M], x 4, x 6, x 2) ,[M] 表示遮蓋該 token;對應的位置序列爲:(z(<=c),z(>c),z(>c))=(p1,p3,p5,p4,p6,p2,p4,p6,p2)(z(<=c), z(>c), z(>c))=(p 1, p 3, p 5, p 4, p 6, p 2, p 4, p 6, p 2)

3 個 [M] 和對應位置 position-embedding 的加入,就是位置補償。例如在序列 (x1,x3,x5,[M],[M],[M],x4,x6,x2)(x 1, x 3, x 5,[M],[M],[M], x 4, x 6, x 2)預測 x4x4時,不僅能看到 (x1,x3,x5)(x1,x3,x5)的 token-embedding,還能看到 (x1,x3,x5,x4,x6,x2)(x1,x3,x5,x4,x6,x2)的 position-embedding;依次遞歸預測 (x6,x2)(x6,x2)
alt

3.3 MPNet 優勢

MPNet 使用自迴歸編碼,避免了 BERT 做 Mask 時可能丟失被 Mask 的 token 的彼此關聯信息和 pretrain(有 mask)、finetune(無 mask)不一致的問題;通過位置補償,又解決了 XLNet 無法看到全局位置信息的缺陷。取其精華,確實是挺巧妙的一種思路。

alt
觀察輸入信息的佔比,MPNet 輸入的信息量是最大的;從直觀上理解,模型每次可以接受到更多的文本特徵,從而容易訓練出更優結果。

3.4 SOTA 結果

作者在權威的語義理解評估數據集 GLUE 上的實驗結果表面,MPNet 確實比它的前輩 BERT 和 XLNet 略勝一籌。另外,作者表示 MPNet 在訓練時加入了全詞掩碼 whole word mask 以及相對位置編碼等已被證明有效的 trick,加上和 RoBERTa 訓練一樣的 160GB 訓練語料,取得這樣的結果應該說是情理之中了。
alt
末尾的消融實驗,可以看到位置補償和 PLM 對實驗結果的提升都很關鍵。
alt

4.NLP 預訓練模型趨勢跟蹤

從目前來看,大規模語料預訓練 + finetune 的方式,應該會是 NLP 接下去幾年的主流。各種基於語言模型的改進也是層出不窮。雖然玩法種類各異,我們還是可以瞥見一些具有突破性的方向。

4.1 土豪系列 - T5、GPT3、MegatronLM

alt

前期 BERT 到 RoBERTa,GPT 到 GPT2 效果的提升,已經證明更多數據可以跑出更強大更通用的預訓練模型。去年底到今年,英偉達、谷歌、Open-AI 相繼放出巨無霸模型 MegatronLM(83 億參數)、T5(110 億)、GPT3(1500 億),不斷刷榜令人咋舌的同時也彰顯了巨頭們的實力。

相信未來,巨無霸模型依然會成爲大公司的研究目標之一,卻讓普通科研人員可望不可及。

4.2 小而美系列 - DistillBERT、TinyBERT、FastBERT

沒有前排巨頭們的經濟實力,普通公司和科研機構沿着相反賽道 - 模型輕量化下足了功夫。如何在儘可能少的參數量下,取得和大模型接近的效果,同時訓練 / 預測速度翻倍,是很實際很有價值的課題。

這其中,有代表性的工作如華爲諾亞方舟實驗室發佈的 TinyBERT、北大的 FastBERT 都取得了矚目的效果。例如 FastBERT 在 BERT 的每一層都接入一個分類器,通過樣本自適應機制自動調整每個樣本的計算量(容易的樣本通過一兩層就可以預測出來,較難的樣本則需要走完全程)。
alt

圖中 “Speed” 代表不確定性的閾值,和推理速度成正比。在 Speed=0.2 時,FastBERT 速度可以提升 1-10 倍,且精度下降全部在 0.11 個點之內。

除了知識蒸餾,常規的模型輕量化一般包含層數裁剪、精度量化等手段。

4.3 潛力股系列 - few shot learning

在實際業務場景中,對於中小 AI 企業往往容易出現數據量不足的問題。例如用戶需要訂製一個 FAQ 問答機器人,有 100 個標準問,但表示每個問句只有 2-3 條同義句…
戰略上,“客戶就是上帝 “的精神激勵我們不能虛,要迎難而上。戰術上,除了花高成本找標註團隊造數據外,遷移學習、小樣本學習可能會非常有幫助。受到人類具有快速從少量(單)樣本中學習能力的啓發(例如生活在北方的人可能沒有見過榴蓮,一旦看過一次榴蓮的照片,就認識了!),讓模型在少量樣本中學習獲得有力的泛化能力,成爲近年的研究熱點之一。

感興趣的同學可以參考阿里的這篇 paper:Few-Shot Text Classification with Induction Network

5. 附錄 - 快速上手 BERT 的 4 大工具包

預訓練語言模型的代表 BERT,已經成爲 NLP 領域的重要工具,不同機構 / 個人也分別開發了輕鬆使用 BERT 的工具包。筆者結合自身經驗,簡單概括了一下:
5.1 肖涵 - bert-as-service

顧名思義,將 BERT 模型直接封裝成一個服務,堪稱上手最快的 BERT 工具。作者是 xxx 肖涵博士。
alt

按照 GIthub 上的教程,下載 BERT 權重並安裝工具包,三行代碼即可輕鬆使用 BERT 獲得文本的向量特徵,完成下游 NLP 各項任務。bert-as-service 是跨平臺的服務,不受限於 OS、深度學習框架,且作者對於併發做了大量優化與加速,可以滿足日常實驗甚至公司的實際業務需求。

5.2 Google - BERT 源碼

BERT 源碼官方倉庫,可以學習 BERT 各模塊的底層實現細節。Google 開源了權重的同時,也開源了預訓練、子任務微調的腳本,是學習 BERT 不可略過的學習教程。代碼基於 tensorflow,對 TF 熟練的同學會更快上手。
alt

當前,倉庫中還發布了 2/4/6/8… 層不同大小的 BERT,以緩解 BERT 資源開銷大、inference 緩慢帶來的問題。中文 BERT 可以參考哈工大崔一鳴實在智能徐亮等開源的權重。

5.3 huggingface - transformers

有了 TF 版,pytorch 怎甘落後。機構 huggingface 開發的 transformers 工具包,堪稱預訓練模型大禮包,囊括了 10 幾種火熱模型。
alt

種類齊全且 api 接口實現統一、調用簡單,是 pytorch 框架與 BERT 的最佳組合。transformers 的 src 源碼也是學習 BERT 等模型原理的絕佳資料。

5.4 蘇劍林 - bert4keras

接下來自然而然該 Keras 出場了!作爲 tf2.0 的官方高階 api,Keras 的簡潔特性始終擁有超高人氣。
alt

來自追一科技的蘇神蘇劍林,在業餘時間自己實現了 bert4keras 框架,且提供了詳細教程、衆多下游任務微調腳本(分類、文本生成、QA、圖片標題生成等)。始終走在 BERT 任務的前沿。

除以上工具包,github 上還有衆多用戶開源的 BERT 相關工具,按需參考使用即可。

Reference

[1] Devlin J, Chang M W, Lee K, et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

[2] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need [C]//Advances in Neural Information Processing Systems. 2017: 5998-6008.

[3]Zhilin Yang, Zihang Dai, Yiming, et.al. XLNet: Generalized Autoregressive Pretraining for Language Understanding[C]. arXiv preprint arXiv:1906.08237, 2019.

[4]Kaitao Song, Xu Tan, Tao Qin, Tie-Yan Liu, et.al. MPNet: Masked and Permuted Pre-training for Language Understanding [C]. arXiv preprint arXiv:2004.09297, 2020.

[5]Weijie Liu, PengZhou, QiJu, et.al. FastBERT: a Self-distilling BERT with Adaptive Inference Time[C]. arXiv preprint arXiv:2004.02178, 2020.

[6] 張俊林 - XLNet: 運行機制及和 Bert 的異同比較

[7] 李如 - FastBERT:又快又穩的推理提速方法

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