32. Transformer + 預訓練 : 集大成的 Bert 模型

柯頌竹
Programming with Data
4 min readFeb 4, 2021

前面一章我們提到的 ELMo,於 2018 年上半年由獨立的研究團隊提出後,在 NLP 領域原本就有相當完整的研發與技術能量的 Google 團隊,馬上就將 ELMo 的預訓練結合原有的 Attention / Transformer 等技術,於 2018 年 10 月提出了承先啟後的,在 NLP 發展史中最重要的模型之一 : Bert (Bidirectional Encoder Representation from Transformers),即使到今天為止,在 Kaggle 的 NLP 競賽中,Bert 與它的衍生模型都還是目前的主流模型之一。

BERT 的簡介:架構 — 輸入

常用的 BERT 模型有兩種:

  • BERT BASE — 和 OpenAI Transformer 大小差不多(12層)
  • BERT LARGE — 研發用非常大的模型(24層)

BASE/LARGE 有 12/16 Attention Head, 784/1024 Hidden Unit。

第一個 input token 有一個特殊的 Classification Token [CLS],Input token 不斷往上走,每一層都有 self-attention 層和 Feed-forward 層,然後在交給下一個 Encoder。

編碼方式 : 複合型嵌入式編碼

Bert 訓練前須要將輸入的文句編碼,是綜合下列三種編碼而成

  • Token Embeddings : 傳統的詞向量,再加上一些標記符號(如:[CLS]起點[SEP]分句),以符合這類預訓練的詞向量模型
  • Segment Embeddings : 用來區別不同的句子,以符合後續句的訓練任務
  • Position Embeddings : 標記句中文字的順序,以符合Attention / Transformer 這類訓練需求

預訓練任務 1 : 掩碼語言模型(Masked Language Model)

目標單字在 Attention / Transformer 訓練時需要放在題目中,而在 ELMo 需要在答案中,如果兩者之中都有目標單字,就會造成目標值的洩漏(Leakage)。

因此,訓練 Bert 的關鍵在於綜合上述兩者的資料集,我們稱之為掩碼語言模型,我們可以把這種任務理解成語言上的「克漏字填充」題,也就是將目標單字轉換為一個標記 [Mask],放在訓練題目中,這樣就不會有目標值洩漏的問題。

但是如果全部的資料通通這樣標記,可能造成目標單字的出現頻率降低,而無法讓 loss 適當地收斂,因此需要加入一部份沒有轉換成 [Mask] 的原句,以及故意將目標字改成錯誤單字的偽造句,需要調整三者的比例,才能取得較優秀的 Bert 模型訓練結果。

預訓練任務 2 : 後續句預測(Next Sentence Prediction)

因為訓練任務中,還有 QA(問答句)任務與 NLI(蘊含推理,判斷上下句間為蘊含 (Entailment)、矛盾 (Contradiction) 或中立(Neutral))任務,因此需要輸入前後不同的兩句,因此我們在前面編碼時需要加上這一段。

BERT 的其他應用

BERT 的作者號稱還可做以下這些 NLP 應用:分類,蘊涵,相似度比較,多選等,以下是簡單架構示意圖:

後記

正因為掩碼語言模型的[Mask]出現頻率問題(會很常在訓練文本中出現,但是在答案中從來不出現),因此過高的比例會影響表現,因此 Google 團隊在後續的XLNet模型中使用亂序模型 (Permutation Language Modeling)技術修正了此一問題。

--

--

柯頌竹
Programming with Data

熱愛自由行、參觀各種形式的展覽,踏上過20個國家的領土。歡迎詢問各種在歐洲自由行的問題。偶爾分享一下資料分析的讀書筆記。