BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Google AI Language, Next generation of language transfer & representation learning
Preface
自然語言理解 (Natural Language Understanding, NLU) 在 NLP 領域有著舉足輕重的地位,近年來隨著深度學習的蓬勃發展,NLU 有了不少新的突破,許多研究者針對任務的不同特性,設計不同的網路架構,雖然這樣的方法能在特定任務達到不錯的成效,但顯而易見地,模型架構缺乏彈性,針對不同任務對模型架構疊床架屋,使得模型無法廣泛地運用於各種任務中,因此人們開始思考,是否存在著一個架構能一體適用,解決所有 NLU 的任務,而遷移學習 (Transfer Learning) 則是一個不錯的出發點。
其實在早些年,NLP 就已廣泛應用遷移學習技術,例如透過大量語料進行非監督式預訓練詞向量 (Word Embedding),我們便可利用這些詞彙語意向量來幫助各項任務更有效率地學習;而這樣的方法廣泛地運用在所有的 NLP 任務中。
直到了2018年中,NLP 開始有了全新的突破,NAACL Best Paper, ELMo: Deep contextualized word representations 則為一例,ELMo 透過 Deep bi-LSTM 進行語言模型預訓練,除了詞彙能夠基於大量的語料,學習到更精準的語意知識外,詞彙的表達還能基於語境的不同,動態的改變其詞向量,實驗顯示,ELMo 於六項 NLU 任務中取得了 state-of-the-art 的成果,這驚人的結果,引起了所有 NLPer 的注目和討論,還有人認為 ELMo 可能是 NLP 近年來最偉大的研究,但就現在看來,ELMo 可能僅是拋磚引玉的一塊磚,NLP 在遷移學習的研究於 ELMo 提出後,如雨後春筍般地出現,如 GLoMo、OpenAI GPT、以及今天要介紹的BERT,都是重量級的研究。
其中,OpenAI GPT 基於 Google Brain Transformer 進行改良,先透過Transformer 進行語言模型預測,藉以訓練模型的大部分參數,在基於不同任務的輸出,微調輸出層,因此我們只需要重新訓練最後一層神經層,並 fine-tune 整個模型的參數即可,透過此方法,能讓訓練收斂加快,各項任務也能有效地進行學習。
BERT
綜觀 ELMo 和 OpenAI GPT 等方法,我們可以將近期 NLP 遷移學習分為兩大類, Feature-based Approaches 和 Fine-tuning Approaches,前者以 ELMo 為代表,目的是提取高質量的詞向量表示,後者以 OpenAI GPT 為代表,將模型參數先進行預訓練,再透過個別任務作Fine-tuning,本篇為 Fine-tuning Approaches 基於 OpenAI GPT 進行改良,下面將進行 BERT 的介紹。
作者認為 OpenAI GPT 雖取得巨大的成功,但也發現語言模型存在先天上的缺陷,語言模型要預測詞彙,是透過待預測詞彙前面(左側)所有詞彙資訊進行判斷,也就是說,語言模型無法參考待預測詞彙後面(右側)的資訊,雖然我們可利用雙向架構去兜出左到右、右到左的資訊,也就是讓待預測詞彙不僅可基於左側的詞彙來預測,也可透過右側資訊的進行預測,聽起來似乎問題解決了,邏輯上也十分合理,但實際上,左到右、右到左資訊仍是彼此獨立,意指,詞彙的預測無法同時一併考慮左和右的資訊,而是透過兩個獨立的結果拼湊而成,且也代表待預測詞彙沒有選擇權,強迫同時接受雙向的資訊,沒辦法利用一併考慮的情況下,淡化或深化左邊或右邊的資訊。
用生活化的比喻,就像汽車的左輪和右輪不是由同一個控制器所控制,因此當要轉彎時,左輪和右輪沒辦法同步溝通,而是分別作決策,因此會比使用同一個控制器來得不精準;BERT 考慮到這點,提出了類似克漏字(Cloze)的方法來取代傳統語言模型。
Task #1: Masked LM
作者提出了 Masked Language Model (Masked LM) 以克漏字為靈感,在任意段落中進行挖空,模型利用挖空的前後文來預測挖空部分應該填入的文字,如下所示,模型得預測 [MASK] 應填入哪個詞彙。
Potentially the most attractive thing about the iPhone XR is the price
Potentially the most [MASK] thing about the iPhone XR is the price
作者將語料中15%的文字進行遮蔽,並且考量在 Fine-tuning 階段不會有[MASK] token出現,恐會有不一致的情況,因此在遮蔽的部分進行如下的調整:
80% of the time: Replace the word with the [MASK] token, e.g., my dog is hairy → my dog is [MASK]
10% of the time: Replace the word with a random word, e.g., my dog is hairy → my dog is apple
10% of the time: Keep the word unchanged, e.g., my dog is hairy → my dog is hairy.
因為僅遮蔽 15% 的文字,因此在實驗中可以發現,訓練所需的收斂時間較長,不過從下圖可觀察,雖然剛開始 Left-to-Right 優於 Masked LM ,但很快地,隨著參數更新,後者會快速的超越前者的準確率。
Task #2: Next Sentence Prediction
NLP 任務中,如 QA、NLI、Textual Entailment 都是基於兩個句子進行語意理解,晉升到了 sentence level,語言模型便無法有效地直接獲得句子語意向量,因此作者提出了 Next Sentence Prediction,兩個句子A、B為一筆訓練資料,從大量語料而得,其中百分之五十的訓練資料資料,從語料中連貫的兩句子而得,也就是B是A的下一句,因此標籤為 IsNext,另外百分之五十則隨機給與兩個不連續的句子標籤為 NotNext,如下例所示:
Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP] Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP] Label = NotNext
Pre-training Procedure
Pre-training 語料採用 BooksCorpus (800M words)和 English Wikipedia (2,500M words),作者提到語料的選定 Document level 會比 sentence level 來得好,因為模型可以學習到跨句子的語意關聯,所以棄用 Billion Word Benchmark 語料。
預訓練的過程中,輸入向量如下表示,其中加入了 Position, Segment, Token embedding,並且加入[SEP]幫助模型分辨前句和後句的資訊,[CLS]則當特定任務為分類時會用到,否則無其他作用;我們在預訓練時同時進行 Masked LM 和 Next Sentence Prediction 兩項任務,並把兩者的 loss 加總作為最終的 loss,在 16 張 TPUs 環境下,33 億字語料訓練 40 個 epochs,約需4 天的時間。
若對於Transformer架構不熟悉,請參考下面介紹:
A Brief Overview : Vanilla Transformer v.s. Universal Transformer
Fine-tuning Procedure
Fine-tuning 會針對不同任務的特性在 last hidden state 作小幅度的調整,如下圖所示,超參數的設定基於不同任務會略有不同,作者發現,由於預訓練已打好不錯的基礎,因此各項任務在 Fine-tuning 的過程中,僅需 3-4 epochs 即可收斂。
Batch size: 16, 32
Learning rate (Adam): 5e-5, 3e-5, 2e-5
Number of epochs: 3, 4
Experiments
接下來我們來看實驗結果,作者刻意將 BERT_BASE 和 OpenAI GPT 參數量調整為一樣,以方便在相同參數下進行模型的優劣比較。
GLUE
GLUE 全名為 The General Language Understanding Evaluation (GLUE) 是一個基於多項 NLP 任務的綜合評比的 Benchmark,其中考驗著模型的泛化能力,以及能否藉由不同項目的語料來幫助其他任務的成果提升,GLUE是近期十分具有指標意義的 Benchmark,也代表著自然語言理解演進的程度,預期將是未來各方 NLP 研究單位的主戰場。
從下方實驗數據顯示,BERT 可以說是大獲全勝,且從 BERT_BASE 和 OpenAI GPT 相同的參數下比較,也能證明在 Masked LM & Next Sentence Prediction 的輔助下,的確帶來巨大的幫助。
SQuAD v1.1
Input Question: Where do water droplets collide with ice crystals to form precipitation?
Input Paragraph: … Precipitation forms as smaller droplets coalesce via collision with other rain drops or ice crystals within a cloud. …
Output Answer: within a cloud
SQuAD 為史丹佛大學所推出基於英文為基百科的機器閱讀理解語料,在微軟亞洲研究院前陣子提出的 nlnet 在 v1.1 & v2.0 排行榜,雙雙獲得第一名的表現後,BERT也開始刷榜,在 v1.1 把 nlnet 擠下,暫時取得第一名的頭銜,在使用單一模型的情況下,就超越 nlnet 的集成式模型。
不過這裡值得注意的是,BERT 並沒有在 SQuAD v2.0 排行榜出現,是否意味著 BERT 並不適用於答案可能不在段落的題目類型(v2.0),或者作者還在藏招,值得關注。
Named Entity Recognition
在 NER 的部分,作者在 CoNLL 2003 語料中進行測驗,CoNLL 2003 共有五個不同的實體類別,分別為Person, Organization, Location, Miscellaneous, Other,BERT 一舉突破了 CRF based 的作法,取得目前最佳的成績。
可參考 Chinese NER Using Lattice LSTM 理解更多關於 NER 的知識。
SWAG
SWAG為 EMNLP 2018 所釋出的資料集,任務為給定一個指定句子和四個候選答案,模型要去預測四個選項中,哪個是指定句子最有可能接續的資訊,如下例所示。
A girl is going across a set of monkey bars. She
(i) jumps up across the monkey bars.
(ii) struggles onto the bars to grab her head.
(iii) gets to the end and stands on a wooden plank.
(iv) jumps up and does a back flip.
從實驗結果發現,BERT 不僅遠超過 ESIM+ELMo,還超越單一人類專家所標註的答案。
Ablation Studies
Effect of Pre-training Tasks
從實驗數據發現,BERT 最大的突破在於 Masked LM,而當任務為 sentence-level 時,NSP(Next sentence prediction) 起到了不錯的功效。
Effect of Model Size
實驗數據顯而易見,模型越多層、參數越多,語言模型的 perplexity(ppl) 就越好,任務表現也越好。
Conclusion
Google AI Language 基於 OpenAI GPT 提出 BERT 模型架構,前者可視為Transformer Decoder ,其預測只參考待測詞彙左側的資訊,後者則為Transformer encoder,可同時參考雙向的資訊,BERT 透過克漏字的概念解決了 GPT 在傳統語言模型預訓練時只能採用 left-to-right 的缺陷,並且透過 Next sentence prediction 幫助 sentence-level 任務的語意學習,實驗結果可說是大獲全勝。
不過這裡需要平反一下,雖然實驗數據上獲得驚人的結果,但其模型架構、學習策略、輸入表示,我認為高達百分之七十與 OpenAI GPT 相同,所以就創新的角度來說,其實 GPT 才是這波 NLP 遷移學習在 Fine-tuning Approaches 的領航者;相信這波 NLP 的遷移學習熱還會繼續,希望能將自然語言理解推展到另一個不同的境界。
最後還是要提一下 BERT 和 GPT 的實用性,不得不說在如此深度具龐大參數量的模型,需要具備大量的運算資源,以 1.5 GB 語料在 NVIDIA GTX1080ti 運算環境為例,預訓練所需時間仍要超過一個月的時間;這樣的運算成本,恐難以在低成本的開發環境下負荷;期待未來的研究發展,有更多朝向輕量化模型架構的研究,如此一來,NLP 技術的推進,就更能普及在全球的智能產品中。