一起讀論文 | 文本分類任務的BERT微調方法論

導讀:今天爲大家解讀一篇復旦大學邱錫鵬老師課題組的研究論文《How to Fine-Tune BERT for Text Classification?》。這篇論文的主要目的在於在文本分類任務上探索不同的BERT微調方法並提供一種通用的BERT微調解決方法。這篇論文從三種路線進行了探索:(1) BERT自身的微調策略,包括長文本處理、學習率、不同層的選擇等方法;(2) 目標任務內、領域內及跨領域的進一步預訓練BERT;(3) 多任務學習。微調後的BERT在七個英文數據集及搜狗中文數據集上取得了當前最優的結果。作者們發佈了實現代碼,有興趣的朋友也可以跑一跑實驗。

點評:這篇論文從實戰上爲大家提供了寶貴的BERT微調經驗及方法論,當需要應用BERT到具體的現實任務上時,可以參照這篇論文提供的調參路線進行優化。推薦大家讀一讀這篇論文。

在這裏插入圖片描述

研究背景及目的

大量任務表明在大規模語料庫上預訓練的模型對於文本分類及其他NLP任務的性能提升非常有幫助。其中一種預訓練模型是詞向量,如word2vec、GloVe等靜態詞向量以及CoVe、ELMo等語境化詞向量。另一種預訓練模型是句子級別上的向量化表示,如ULMFiT。其他的還有OpenAI GPT及BERT。

雖然BERT在許多自然語言理解任務上取得了驚人的成績,但是它的潛力還尚未被完全探索出來。很少有研究來進一步改進BERT在目標任務上的性能。這篇論文的主要目的就是通過探索多種方式最大化地利用BERT來增強其在文本分類任務上的性能。

這篇論文的主要貢獻在於:

  • 提出了一種通用的微調預訓練BERT模型的解決方法,有三個步驟:(1)進一步在任務內訓練集或領域內數據集上預訓練BERT;(2)在有多個相關任務的情況下用多任務學習方法微調BERT;(3)在目標任務上微調BERT
  • 探索了在目標任務上BERT的微調方法:長文本預處理,BERT層選擇,分層學習率,災難性遺忘,low-shot學習問題
  • 在一箇中文新聞分類數據集上及7個英文分類數據集上取得了當前最優的結果

研究內容、方法及結果分析

這篇論文主要按照以下三種方式對BERT進行了微調,路線如下圖所示:
在這裏插入圖片描述

微調策略

採用多種方式在目標任務上微調BERT顯然是非常有必要的。BERT不同的層可以捕獲到不同級別的語法及語義信息,哪些信息是目標任務所需要的呢?如何選擇優化算法以及學習率呢?當把BERT適應到某個目標任務時,需要考慮到因素有:(1)長文本序列的預處理(BERT最大序列長度爲512);(2)選擇哪些BERT層;(3)過擬合問題。

這篇論文分別對這三個因素進行了實驗分析:

1. 處理長文本

BERT能夠處理的最大序列長度是512,把BERT應用到文本分類任務上面臨的第一個問題就是如何處理長度大於512的文本。這篇論文嘗試的方法有:

  • 截斷法 (truncation methods):(1) head-only: 只保留前510個tokens;(2) tail-only: 只保留尾510個tokens;(3) head+tail: 根據經驗選擇前128個tokens與後382個tokens。
  • 層次法 (hierarchical methods): 輸入文本首先被分割成 k = L / 510 k=L/510 個切片,然後輸入到BERT中得到 k k 個切片的表徵。每個切片的表徵就是最後一層的 符號 [CLS] 的隱藏層狀態。可以使用 mean pooling、max pooling與self-attention的方式把所有的切片的表徵合併起來。

在這裏插入圖片描述

上表的結果顯示,head+tail的截斷法在IMDb和Sogou數據集上表現最好。後續的實驗也是採用這種方式進行處理。

2. BERT不同層的特徵

BERT的每一層能夠捕獲到輸入文本的不同特徵。這篇論文探索了不同層的特徵的有效性,實驗結果如下表所示:
在這裏插入圖片描述
3. 災難性遺忘

Catastrophic forgetting的意思是在學習新知識的過程中,已習得的知識會丟失。這個問題在遷移學習中非常普遍。這篇論文探索了BERT是否也會遭遇這個問題。驗證方法是用不同的學習率微調BERT。結果如下圖所示:
在這裏插入圖片描述
實驗結果表明:更低的學習率,如 2e-5,能夠使得BERT克服這個問題。學習率越大,如 4e-4,導致無法收斂。

4. 逐層降低學習率

爲不同的BERT設置不同的學習率及衰減因子,BERT的表現如何?把參數 θ \theta 劃分成 { θ 1 , , θ L } \{\theta^1,\dots,\theta^L\} ,其中 θ l \theta^l 包括了BERT第 l l 層的參數。按照如下規則進行更新:
θ t l = θ t 1 l η l θ l J ( θ ) \theta_t^l = \theta_{t-1}^l - \eta^l\cdot\nabla_{\theta^l}J(\theta)
其中, η l \eta^{l} 代表第 l l 層的學習率。設置基礎學習率爲 η L \eta^L ,使用 n k 1 = ξ η k n^{k-1}=\xi\cdot\eta^k ,衰減因子 ξ 1 \xi\leq1 。當 ξ < 1 \xi<1 是,靠下的層比靠上面的層的學習率要低;當 ξ = 1 \xi=1 時,所有層的學習率一樣,此時等價於正常的SGD算法。實驗結果如下:
在這裏插入圖片描述
實驗結果表明:較低的BERT層賦予較低的學習率能夠有效地微調BERT,推薦的恰當的設置是: ξ = 0.95 \xi=0.95 與 lr = 2.0 e 5 =2.0e-5

進一步預訓練

對於特定領域的文本分類任務,其數據分佈會不同於在通用領域的語料庫中進行預訓練的BERT模型的數據分佈,需要針對此特定領域的數據用Masked Language Model及Next Sentence Prediction進一步預訓練BERT。此時,會有三種可行的預訓練的方法:

  • Within-task pretraining(目標任務內的預訓練):在目標任務的訓練集上預訓練BERT;
  • In-domain pre-training(領域內預訓練):在來自於與目標任務相同的領域的數據集上對BERT進行預訓練;
  • Cross-domain pre-training(跨領域預訓練):在來自於與目標任務相同或不同的領域的數據集上對BERT進行預訓練。

1. Within-task pretraining
在這裏插入圖片描述實驗結果表明:進一步預訓練對於提升BERT在目標任務上的表現非常有用,在100K訓練步後能夠取得最優性能。

2. In-domain 與 cross-domain pretraining

在這裏插入圖片描述
這篇論文與其他模型進行了比較,結果如下表所示:
在這裏插入圖片描述

多任務微調

所有任務都會共享BERT層及Embedding層,唯一不共享的層就是最終的分類層,每個任務都有各自的分類層。
在這裏插入圖片描述
這篇論文還額外進行了兩個實驗:少樣本學習及在BERT Large模型是哪個進行進一步預訓練。

Few-Shot Learning

這篇論文評估了BERT-FiT與BERT-ITPT-FiT兩種模型在不同數量的訓練集上的表現。結果如下:
在這裏插入圖片描述
實驗表明:BERT能夠爲小規模數據打來顯著的性能提升。

BERT Large模型上進一步預訓練

這篇論文進一步探索了BERT Large模型是否也會有跟BERT Base模型一樣的結果。實驗結果如下:
在這裏插入圖片描述
實驗結果表明:在特定任務上微調BERT Large模型能夠獲得當前最優的結果。


想要了解更多的自然語言處理最新進展、技術乾貨及學習教程,歡迎關注微信公衆號「語言智能技術筆記簿」或掃描二維碼添加關注。
在這裏插入圖片描述