【論文解讀】BERT和ALBERT

1.前言

最近重新閱讀了BERT和ALBERT文章,所以寫下自己的一些感悟。這兩篇文章都是Google發出來的。其中BERT是2018年,在Transformer的基礎上進行擴展;而ALBERT發表在2020年ICLR上,它是基礎BERT來進行改進。

  • BERT論文
  • ALBERT論文

2. BERT

BERT全稱是Bidirectional Encoder Representations from Transformers,它通過連接從左到右和從右到左的文本,設計了一個預處理的深度雙向表達模型。在fine-tuned階段,只需要增加簡單的輸出層,就可以在BERT模型基礎上達到SOTA的效果。

BERT在GLUE數據集上能夠達到80.4%,在MultiNLI上則有86.7%,在SQuAD v1.1則有93.2%。

2.1 引入

在NLP場景中,預處理的模型往往能夠提升下游任務的效果。在natural language inference(語言推斷)、relation classification、NER和QA任務中,預處理的語言模型都是有效果的。

預處理的語言模型到下游任務中,主要有兩種策略方法:

  • feature-based方法:類似於ELMO那樣,設計了一個比較精細的結構,作爲額外的特徵進行輸入。
  • fine-tuning 方法:類似於Transformer和GPT那樣的模型,它們可以在下游任務中進行簡單的調節參數,使得模型適應於下游任務。

這些方法都是單方向(unidirectional)的語言模型。

BERT引入了兩個預處理時的學習目標,包括:Masked language model(MLM)、next sentence predicton(NSP)。

  • MLM:隨機掩蓋一部分的tokens,然後對這些詞語進行預測。這可以使得模型因爲不知道是要預測哪些詞語,所以必須要學習“從左到右”和“從右到左”的文本信息。
  • NSP:輸入兩個句子,判斷這兩個句子是否是連貫性的句子。

2.2 以前的工作

2.2.1 feature-based 方法

預處理得到的詞向量能夠作爲模型的輸入,這會帶來大量的特徵信息,提升之後的任務效果。

在ELMO中,生成了比較傳統的詞向量。它們提出上下文敏感的特徵,能夠表徵複雜語境下的詞語語義。

2.2.2 fine-tuning 方法

在有監督的下游任務微調模型之前,預先訓練一些關於LM目標的模型架構。這種方法就是提前訓練好了一個模型(提前訓練的模型通常是用無監督的方法訓練的),在下游任務中幾乎不需要從頭開始學習模型參數。GPT模型就是這種做法。

2.2.3 遷移學習方法

在有監督的數據集中訓練一個模型,然後把訓練好的模型遷移到另一個數據集中進行訓練學習。這種方法也不需要模型從新訓練,但是需要大量的有監督數據集。

2.3 BERT架構

論文中訓練了兩個基礎的BERT:

名稱 Transformer的層數LL 隱藏層大小HH self-attention head的數量AA 總參數數量
BERT_base 12 768 12 110M
BERT_large 24 1024 16 340M

可以看到BERT模型的參數量是很大的。它在輸入表達中構建了三層的詞語嵌入,同時設計了兩個預訓練時的任務(MLM,NSP)

  • BERT的輸入:
    輸入表達
    (1)Token embedding:句子中每個詞語的詞向量輸入,使用了wordpiece方法。[CLS]和[SEP]代表的是輸入句子的開頭和結尾;[SEP]則分割了兩個輸入句子
    (2)Segment embedding:句子向量,在代碼實現中,把第一個句子設計成0,第二個句子設計成1,然後隨機初始化
    (3)Position embedding:詞語的位置向量。

接下來介紹兩個預訓練的任務:MLM,SNP

2.3.1 MLM

爲了實現真正的深度雙向模型,所以使用了隨機掩碼。使用mask的原因是爲了防止模型在雙向循環訓練的過程中“預見自身”。於是,文章中選取的策略是對輸入序列中15%的詞使用[MASK]標記掩蓋掉,然後通過上下文去預測這些被mask的詞語。但是爲了防止模型過擬合地學習到【MASK】這個標記,對15%mask掉的詞進一步優化:

  • 以80%的概率用[MASK]替換:my dog is hairy ----> my dog is [MASK]
  • 以10%的概率隨機替換:my dog is hairy ----> my dog is apple
  • 以10%的概率不進行替換:my dog is hairy ----> my dog is hairy

2.3.2 NSP

爲了讓模型能夠學習到句子之間關係,則預訓練任務中加入了“預測下一句”的任務,這是一個二值分類任務。也即是說輸入句子中包括了兩個句子A和B。

  • 50%的B句子是A句子的下一個句子
  • 另外50%的句子則是從數據集中隨機抽取出來的。

例如例子:

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

2.4 實驗

接下來看一下實驗部分。首先需要說明BERT在不同數據集中輸出的部分都不一致。
BERT輸出部分

  • (a)圖主要用來適應兩個句子的輸入。獲取[CLS]位置的輸出,把它作爲句子向量,然後預測類別。(適合句子推斷等任務
  • (b)圖主要用來適應單個句子的輸入。獲取[CLS]位置的輸出,把它作爲句子向量,然後預測類別。(適合句子分類等任務
  • (c)圖主要用來適應QA任務,輸入的是question和paragraph,輸出找到的answer。
  • (d)圖主要用來做序列標註。

2.4.1 BERT模型的效果

BERT模型的效果
上面可以看出,對比幾個模型,BERT的效果都大於現有的模型

NER任務
在CoNLL-2003的NER任務中,也比傳統的LSTM+CRF要高。

2.4.2 驗證性實驗

(1)主要驗證MLM的效果。

  • no NSP:沒有使用NSP任務訓練,僅僅使用MLM任務
  • LTR & NO NSP:把MLM任務換成left to right(LTR)任務,也就是放棄了隨機mask,改成按照順序預測每一個詞語
  • +BiLSTM:在LTR & NO NSP任務上,輸出層加了BiLSTM。
    驗證MLM
    從圖上的實驗效果可以看出,使用MLM的模型會比LTR模型的效果要好很多。這側面證實了MLM可以讓模型保持雙向的上下文內容的學習。

(2)參數實驗
參數實驗
BERT的層數L越多,隱藏層大小H越多,效果越好

(3)MNLI數據集上的收斂速度
MNLI數據集上的收斂速度
MLM的收斂速度確實比LTR模式稍慢。然而,就絕對準確度而言,MLM幾乎立刻就開始超越LTR模式

(4)BERT當feature-based來用(在Conll-2003數據集上)
BERT當feature-based來用
實驗中在BERT輸出之後加一層BLSTM進行分類。如果把所有層的輸出加起來,得到的效果最好。

3.ALBERT

4. 參考

(1)BERT源碼分析PART II:https://blog.csdn.net/Kaiyuan_sjtu/article/details/90288178

(2)BERT論文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
(3)ALBERT論文:《ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》

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