MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

近代最強NLP模型-BERT

何謂BERT?

BERT (Bidirectional Encoder Representations from Transformers)

是一種理解上下文的語言代表模型

簡述BERT

  1. BERT其實就是Transformer中很多層的Encoder
  2. 是Google以無監督的方式利用大量的無標註文本集結而成的語言代表模型(LM)。
  3. 透過自注意力機制雙向深度模型以及大量的無標註文本訓練而成

預訓練任務

Google在預訓練BERT的過程中,讓他同時進行兩項任務

  • 克漏字填空 (Masked Language Model, MLM)
  • 後文預測 (Next Sentence Prediction, NSP)

兩項任務為了達成的目的:

  • MLM: 為了讓BERT更能夠表現出每個詞彙在不同情境下的repr.
  • NLS: 為了讓BERT更清楚的表現出兩個句子間的關係

何謂repr.?

repr.: 指的是一個可以用來代表某詞彙(在某個語境下)的多維連續向量(continuous vector)。

這些能夠適應不同情境以及表現兩句子間關係的repr.就是近年來盛行的contextual word representation,跟以往沒有上下文資訊的Word2VecGlove的詞嵌入向量有極大的不同。

除此之外,BERT在做完tokenizer後的token有五個特殊角色,分別是:

CLS: 在做分類任務時其最後一層的 repr. 會被視為整個輸入序列的 repr.

SEP: 兩個句子的文本之間插入這個 token 以做區隔

UNK: 用來取代沒有出現在 BERT 字典裡頭的字

PAD: 採用zero padding時將長度不一的輸入序列補齊以方便做 batch 運算

MASK: 未知遮罩,僅在預訓練階段會用到

用PyTorch執行程式碼的時候,關注的是圖中的三種id tensors:

  1. tokens_tensor: 用tokenizer轉換來代表每個token的index

  2. segments_tensor: 用來區分兩個句子。第一句為0,第二句為1SEP為0

  3. masks_tensor: 用來決定自注意力機制關注的位置。0代表讓BERT不關注,通常為paddding,1代表讓BERT關注該位置。

當實際應用時,每個batch內的輸入序列長短不一,為了要變成矩陣讓GPU平行運算,我們會採用zero-padding的方式來保證它們長度都一致。所以 PAD處的segments_tensor以及masks_tensor都是 0。

總結

簡而言之,用一句話來形容BERT:

BERT 是一個強大的語言代表模型,給它一段文本序列,它能回傳一段相同長度且蘊含上下文資訊的 word repr. 序列,對下游的 NLP 任務很有幫助

[引述自進擊的 BERT:NLP 界的巨人之力與遷移學習]

參考