Cover image source: BERT: how Google changed NLP (and how to benefit from this)

本篇文章假設已經對 Self-attentionTransformer 模型有基本概念,若還不熟悉可以先閱讀前篇 Self-attention & Transformer 筆記

本篇筆記是參考 台大李宏毅老師 【機器學習 2021】自督導式學習 (Self-supervised Learning) (一) – 芝麻街與進擊的巨人【機器學習 2021】自督導式學習 (Self-supervised Learning) (二) – BERT 簡介 上課內容

BERT 是什麼

  • BERT 全名是 Bidirectional Encoder Representations from Transformers,其架構就是 TransformerEncoder
  • 訓練任務:
    訓練任務分為兩種:克漏字填空 (Masking Input)預測下一個句子 (Next Sentence Prediction)
    1. 克漏字填空: 訓練時 Input 時隨機遮罩 token (ex. 中文中的方塊字),接著將經過 BERT 層後的向量過 Linear Transform 後,得到可能出現字的可能性,最後對 mask 處原本的字最小化 cross entropy (分類問題)
    2. 預測下一個句子: 將 [CLS] 向量經過 BERT 層後得到的結果過 Linear Transform 後得到二元問題的解答 (YES / NO),代表兩句子是否相接
  • 常見的 special token 包括
    • [CLS]: 分類任務時其最後一層的向量會被視為整個輸入序列的向量
    • [SEP]: 區隔兩句子
    • [UNK]: 沒有出現在字典中,字典中,無法被轉成 token 的內容
    • [PAD]: zero padding 遮罩,將長度不一的輸入序列補齊方便做 batch 運算
    • [MASK]: 未知遮罩,僅在 training 階段會用到
  • RoBERTa: A Robustly Optimized BERT Pretraining Approach 中,作者點出 BERT 訓練中的 預測下一個句子 是無用的; 後來有人提出 SOP (Sentence order prediction) ALBERT: A Lite BERT for Self-supervised Learning of Language Representations 解決問題
  • 雖然乍看訓練任務是填空,但 Pre-train 結果只需要進行稍微的 Fine-tune 後便能針對特定任務達到很好的結果

案例: Extraction-based Question Answering

  • 目的:給定一段敘述,從敘述中找到該問題的答案
  • 過程:將敘述 $D$ 和 問題 $Q$ 經過 QA 模型後會得到 $s$ 和 $e$,答案即是第 $s$ 個字到第 $e$ 個字
  • 訓練在找兩個向量 ($s$ 和 $e$),分別與敘述句經過 BERT 層轉後的向量進行內積 (inner product),接著將敘述句所對應的所有向量過 Soft-max 得到最高機率的即為結果

為什麼 BERT 使用克漏字的方法有用?

一種解釋是,原輸入向量經過 BERT 層轉換後得到的向量 (下稱 embedding),其隱含輸入內容的「意思」,意思越相近的字其向量越接近

Multi-lingual BERT

  • 用 104 種語言的資料訓練 base model 後,即使用英文的資料做訓練,即便面對中文的題目也能應付
  • 一種解釋是,在訓練 base model 的過程中,不同語言的 embedding 很接近,對模型而言不同語言並沒有太大差異

延伸閱讀