Main concept of BERT
利用不同的任務來pre-train模型,當使用者需要使用時,可以直接把BERT串接到自己的任務上,再稍微針對自己的模型訓練一下(fine tune)即可。
這就像是先學了一堆基礎的先輩知識,再去學高微時你就覺得輕鬆自在。
Training tasks of BERT
BERT的pre-training有兩項主要的訓練方式。
hugging face已經幫我們預訓練好各國語言的模型(含中文),因此大家可以直接下載他們訓練好的模型參數直接使用。
BERT 模型架構
採用transformer
Training task 1 - Predicting mask words
隨機遮罩15%的字,模型需要預測這些是那些字。
Training task 2 - next sentence classifier
給予兩句話,模型需要判斷這兩句話是否為前後關係。
How to use BERT
BERT input formula
taggings
首先要先了解瞭面的tagging所代表的意義
- [CLS]:在做分類任務時其最後一層的 repr. 會被視為整個輸入序列的 repr.
- [SEP]:有兩個句子的文本會被串接成一個輸入序列,並在兩句之間插入這個 token 以做區隔
- [UNK]:沒出現在 BERT 字典裡頭的字會被這個 token 取代
- [PAD]:zero padding 遮罩,將長度不一的輸入序列補齊方便做 batch 運算
- [MASK]:未知遮罩,僅在預訓練階段會用到
input embedding
在BERT的使用中,你需要有三種embedding,最後把三種embedding合併起來當作完整的input
- token embedding : 代表識別每個 token 的index,用 tokenizer 轉換即可
- segment embedding : 用來識別句子界限。第一句為 0,第二句則為 1。另外注意句子間的 [SEP] 為 0
- position embedding : 用來界定自注意力機制範圍。1 讓 BERT 關注該位置,0 則代表是 padding 不需關注 (通常使用狀況為:在補上[PAD]tagging時,我們會在該位置將此embedding設置為0,其他句子的部分則設置為1)
Four main usage of BERT
BERT提供了四種fine tune模型的使用方式給大家,使用時也不需要自己重新架設及串接,你只需要指定你要接哪一種,你的output class要幾類,他其實都幫你寫好囉😍!(當然,如果這四種都不是你想要使用的,你就必須自己刻一下了)
- 使用方式a : sentence pair classifier
- 使用方式b : single sentence classifier
- 使用方式c : Question Answering
*這裡要注意的是,output為paragraph的start index及end index,若end inddex比start還前面,則答案會回傳此題無解。
- 使用方式d : sentence tagging
沒有足夠強大的gpu來fine tune怎麼辦?
- 抽取word embedding
- 直接把文字餵進BERT取得embedding,再用這些embedding做你的任務!
- 使用colab,雖然跑比較慢,但至少能+-用
BERT 實驗結果
Follow up - How to use BERT (for code)
大家可以參考進擊的BERT:NLP界的巨人之力與遷移學習,不過這篇有段時日了,部分使用BERT的指令及方法有更新過,因此不能完全直接使用他所提供的code。我有空再整理我的code更新到這裡給大家@@
Reference
- BERT 論文
- 進擊的BERT:NLP界的巨人之力與遷移學習
- 陳縕儂教授 - Contextual Word Embeddings ELMo BERT 解析