【NLP 自然語言處理】Bert 簡介&將 Bert 加入 tf.Keras Model(附程式碼)

用自己的話彙整多篇 Bert 教學,挑選能夠方便加在各式神經網絡架構的方法

JiunYi Yang (JY)
資料探員 Data Agent
4 min readAug 7, 2021

--

起源與影響

BERT(Bidirectional Encoder Representations for Transformers)是由 Wikipedia(25億字), BooksCorpus(8億字) 等未經標籤的大量文本資料作為 input,訓練而成的模型。由於他在廣泛的 NLP task 都有良好的表現(如 Question Answering (SQuAD v1.1), Natural Language Inference (MNLI)等)已在 ML 社群引起轟動並改變許多人建構 NLP 模型的方式,同時它也啟發了後續更多語言模型的出現(如 Google’s TransformerXL, OpenAI’s GPT-2, XLNet, ERNIE2.0, RoBERTa 等)

重點介紹

(1) BERT 的構造是由多個 Transformer encoders 相疊而成 (multi-layer bidirectional Transformer encoder)

  • BERT base–12 layers (transformer), 12 attention heads, & 110 million parameters
  • BERT Large–24 layers, 16 attention heads and, 340 million parameters

(2) BERT 與他的前代模型(OpenAI GPT)差異最大的部分是在於使用了 Bidirectional 的概念

  • Bidirectional: BERT 的 self-attention layer 是雙向的,也就是訓練時會從 token(一個字符)的上、下文學習
  • 上下文很重要是因為,同樣的字擺在不同的上下文位置,會有不同含意(contextual)

(3) Pre-training steps 對 BERT 的優異表現來說相當關鍵

文本前處理

文本資料在進入 BERT 模型做訓練前有先經過前處理:‌

(a) 句子開頭以 [CLS] 做標記、斷句時以 [SEP] 做標記

(b) Input Embedding 是 3 個部分的加總:Token, Segment, Position

  • Token: 文字本身 WordPiece Token

使用 WordPiece Tokenization:以一個字作為單位,再反覆加入頻次高的組合字到模型中(ex: 音, 樂, 符, 音樂, 音符, 樂符, …)

  • Segment: 文字屬於起頭句還是結尾句
  • Position: 文字在句中的位置

Pre-training

在 pre-training 階段時是同時訓練兩個 task:

  • Masked Language Model:把句子中的其中一個字蓋住,讓模型預測(最符合上下文語意)最可能是填入什麼字
  • Next Sentence Prediction:給模型前一句,模型預測出下一句接續什麼最符合語意

使用 BERT 並在自己的模型中微調

Bert 可以用於以下任務:

  1. 單句分類 Single Sequence Classification
  2. 對句分類 Sequence Pair Classification
  3. 問答任務 Question-Answering
  4. 單句貼標 Single Sequence Tagging:對句中的每個文字都貼標,ex: NER (Named Entity Recognition)

Fine-tuning 時的注意事項:

  1. 文本資料量大於 10 萬時,超參數的影響較小
  2. 在資料量充足的情況下,pre-training steps 越多,精確度越好

將 Bert 加入 tf.Keras Model

接著呼叫寫好的 class:

可以看到將 Bert 加在 input layer 後的模型架構:

--

--

JiunYi Yang (JY)
資料探員 Data Agent

Master @ NCCU MIS.Founder @ jiunyiyang.me .Data Scientist & Digital Ads Optimizer.Feel free to PM me at: m.me/Abao.JiunYiYang or linkedin.com/in/jiunyiyang