BERT - Bidirectional Encoder Representations from Transformers

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

Powered by Hexo and Hexo-theme-hiker

Copyright © 2020 - 2021 DSMI Lab's website All Rights Reserved.

UV : | PV :