BERT 論文筆記

weixin_34402408發表於2019-01-18

BERT:Pre-training of Deep Bidirectional Transformer for Language Understanding

谷歌AI團隊釋出,在機器閱讀理解SQuAD1.1跑出的成績,在兩個指標上全面超越人類。

GLUE基準80.04%(7.6%絕對提升),MultiNLI準確率86.7%(5.6%絕對提升)

BERT= Bidirectional Encoder Representation from Transformers

Pre-training Objective : MLM(Masked Language Model), 隨機mask input中一些tokens,目標就是根據context去預測mask位置原始的詞彙id

除了MLM,引入next sentence prediction 任務聯合訓練pair級別的特徵表示

貢獻點:

1、證明了bidirectional對文字特徵表示的重要性

2、證明了預訓練的特徵表示能夠消除很多繁重的任務相關的網路結構

3、11個NLP任務上,提升了state of art水平

應用預訓練模型的兩個方案:

1、Feature based

ELMo方法希望通過語言模型提取上下文敏感的表示特徵,把任務相關的結構和上下文word embedding結合起來.

2、Fine-tuning

在有監督的fine-tune指定任務前,先通過語言模型LM的目標,預訓練模型

BERT核心

模型架構

雙向的叫Transfer Encoder

單向的叫Transfer Decoder

BERT vs OpenAI GPT vs ELMo

242402-2b8d7a952d9837e8.png
image.png
輸入表示Input Representation

多個Sentence可以拼成一個sentence

token Representation = token embedding + segment(句) + position embedding

1)tokens embedding用WordPiece embedding(Wu et al., 2016),3w token詞彙

2)positional embedding支援序列長度到512個tokens

3)Segment embedding,第一句所有token都用A代替,第二句都用B代替

Pre-training 任務

不用傳統的左向右或者右向左的LM來預訓練 BERT,採用兩個新的無監督的預測任務來實現預訓練。

1)任務一:Masked LM

15%的比例,在每個sequence中,隨機的mask掉 WordPiece中的tokens;同時也只predict被mask掉的位置上的words

這個方法有2個缺點downsides:
A:因為[MASK]字元在fine-tuning階段根本不會存在,所以在pre-training階段用[MASK]代替原來的word參與訓練,會到只pre-training和fine-tuning階段mismatch。
解決辦法是:在整體15%的隨機中,有80%用[MASK]替換選中的word,10%用一個隨機的word代替選中的word,剩下10%的比例保持選中的word不變

B:因為在每一輪訓練(each batch)只有15%的tokens會被預測,pre-training階段的模型收斂就需要迭代更多的steps(相比於單向的模型,預測所有的word被預測)

2)任務二:Next Sentence Prediction

理解2個text sentence之間的relationship,這個relation是不能直接用LM模型學習到的。

構建有一個2分類任務binarized next sentence prediction task,訓練資料可以從任何一個單語種的語料庫中生成:對於AB兩個sentence,50%的概率B就是實際在A後面的sentence,另外50%的概率B是從語料中隨機選擇的一個sentence。

最終這個任務的Accuracy達到97%~98%

Pre-training過程

資料:BooksCorpus(800M words) + English Wikipedia(2500M words)

Wikipedia的資料只取text段落,忽略列表、表格等

從語料中,抽樣2個spans作為sentence,第一個sentence作為A Embeding,第二個作為B Embeding;50%的概率B是實際的sentence,另外50% B是隨機sentence.

抽樣時保證A+B的長度<512 tokens

LM masking:在用wordpiece 分詞(tokenization)後,均勻按15%的比例(rate)mask掉其中的tokens。沒有任何特殊的操作。

batchsize = 256 sequence(256*512tokens = 128,000 tokens/batch)

steps=1,000,000 (40 epochs / 3.3 billion word corpus)

Adam lr=1e-4, beta1=0.9 beta2=0.999

L2 weight decay = 0.01

lr adj step = 10,000 steps, linear decay

dropout p=0.1 all layers

activation = gelu (不是relu)

Loss = mean masked LM Likelihood + mean next sentence prediction likelihood

Fine-tuning過程
242402-bd4f48f4b2554e43.png
image.png
A:sequence Level的分類任務

為了得到一個固定維度的整句特徵表示,直接取第一個token([CLS])的final hidden state(Transformer output),記作C。後面唯一需要加一個分類層W

P= softmax(CW)

BERT 和 W的所有引數,一起finetune

B:span-level 和 token-level的預測任務

需要針對任務做微小的調整

batch size、lr和 epochs不同,其他超參大部分相同

C:SQuAD v1.1——StandFord Question Answering Dataset

100K QA pairs

給定一個問題Q,以及一段包含答案A的文欄位落paragraph,任務的目標是預測在段落中,是答案文字段span

做法:

a)將question和paragraph合併成一個sequence的特徵表示,Q用A Embeding,P用B Embeding。

b)需要學習的新引數是一個起始向量S,以及一個結束向量E。每個token對應的Ti代表最後的hidden vector。

i是Answer起始位置的概率是P = softmax(S·T),對Ti和S的dot product做softmax

對結束位置的計算也用同樣的公式

fine-tune 3 epochs, lr = 5e-5, batchsize = 32

在Inference階段,因為end predict並不依賴start predict,所以需要加一個約束:end要在start之後。除了這個,再沒有其他啟發式heuristic的規則。

D:命名實體識別 CoNLL資料集

200k words,標記為5個entity類別:Person、Organization、Location、Miscellaneous、Other

每個Ti單獨input進一個分類layer,預測時不依賴兩邊其他詞的預測。

相關文章