何謂BERT?
BERT (Bidirectional Encoder Representations from Transformers)
是一種理解上下文的語言代表模型
簡述BERT
- BERT其實就是Transformer中很多層的Encoder
- 是Google以無監督的方式利用大量的無標註文本集結而成的語言代表模型(LM)。
- 透過自注意力機制、雙向深度模型以及大量的無標註文本訓練而成
預訓練任務
Google在預訓練BERT的過程中,讓他同時進行兩項任務
- 克漏字填空 (Masked Language Model, MLM)
- 後文預測 (Next Sentence Prediction, NSP)
兩項任務為了達成的目的:
- MLM: 為了讓BERT更能夠表現出每個詞彙在不同情境下的repr.
- NLS: 為了讓BERT更清楚的表現出兩個句子間的關係
何謂repr.?
repr.
: 指的是一個可以用來代表某詞彙(在某個語境下)的多維連續向量(continuous vector)。
這些能夠適應不同情境以及表現兩句子間關係的repr.就是近年來盛行的contextual word representation
,跟以往沒有上下文資訊的Word2Vec
、Glove
的詞嵌入向量有極大的不同。
除此之外,BERT在做完tokenizer後的token有五個特殊角色,分別是:
CLS
: 在做分類任務時其最後一層的 repr. 會被視為整個輸入序列的 repr.
SEP
: 兩個句子的文本之間插入這個 token 以做區隔
UNK
: 用來取代沒有出現在 BERT 字典裡頭的字
PAD
: 採用zero padding時將長度不一的輸入序列補齊以方便做 batch 運算
MASK
: 未知遮罩,僅在預訓練階段會用到
用PyTorch執行程式碼的時候,關注的是圖中的三種id tensors:
tokens_tensor
: 用tokenizer轉換來代表每個token的index
segments_tensor
: 用來區分兩個句子。第一句為0,第二句為1。SEP
為0
masks_tensor
: 用來決定自注意力機制關注的位置。0代表讓BERT不關注,通常為paddding,1代表讓BERT關注該位置。
當實際應用時,每個batch內的輸入序列長短不一,為了要變成矩陣讓GPU平行運算,我們會採用zero-padding的方式來保證它們長度都一致。所以 PAD
處的segments_tensor
以及masks_tensor
都是 0。
總結
簡而言之,用一句話來形容BERT:
BERT 是一個強大的語言代表模型,給它一段文本序列,它能回傳一段相同長度且蘊含上下文資訊的 word repr. 序列,對下游的 NLP 任務很有幫助