34. 調參版Bert應用範例

柯頌竹
Programming with Data
Feb 10, 2021

NLP與CV(電腦視覺)的預訓練模型有何主要差異?

對於影像處理的預訓練模型來說,我們一般在使用上,都是在現有模型後再加上幾層類神經網路,然後以此結構來對我們要預測的任務做參數微調(Fine Tune)。

NLP 跟影像處理的預訓練模型都是在預訓練模型往後接類神經結構,以目標訓練樣本訓練最後的類神經結構,但是不同的部分主要有兩點:

  1. NLP 原本就有 許多不同的任務類型,有的是類似傳統機器學習的分類或迴歸,但也有需要進行序列預測的任務(比如 : 問答任務 / 翻譯任務) ,因此在預測階段就有幾種不同的結構需要調整,在進行解題前需要先了解任務需求
  2. 資料傳入模型前的規格調整,也與影像處理的預訓練很不同,影像處理通常只需調整大小,但是 NLP 的調整完全是依照模型量身打造,我們稱之為 Tokenizer (可譯為標記器, 但常用原文稱呼),針對上述不同的任務,Tokenizer 也需要有對應的調整,比方說輸入為單句,就不需要分隔兩句的 [SEP] 符號

如使用 BERT 應對各類 NLP 任務

由於 NLP 問題類型廣泛,以目標來說 : 有選擇題型 / 標記題型 / 問答題型,以輸入來說 : 有的是單一文句,有的則是輸入前後兩句進行判斷,因為輸出輸入都有很大差別,因此我們在使用預訓練模型應對各類任務時,會有不同的微調方式

每個藍色字體都對應到一個可以處理下游任務的模型,讓你可以很輕鬆地可以針對你想要的應用進行 fine-tuing

Hugging Face 團隊提供的 Bert 預訓練模型

目前 PyTorch Hub 上有 8 種模型以及一個 tokenizer 可供使用,依照用途可以分為:

基本款:

  • bertModel
  • bertTokenizer

預訓練階段

  • bertForMaskedLM
  • bertForNextSentencePrediction
  • bertForPreTraining

Fine-tuning 階段

  • bertForSequenceClassification
  • bertForTokenClassification
  • bertForQuestionAnswering
  • bertForMultipleChoice

其中後面四種分別對應前面四種類別圖的藍色註記,這四個 Fine-Tuning 階段的模型,調整參數非常簡單,可以藉由修改 model.config 的內容來調整參數,只需要了解各參數的意義即可,不需要花費太多力氣

自行調整(Fine Tune)Bert 模型

4.1 Tokenizer 的設定

Tokenizer 雖然有參數,但一般來說這邊的設定是跟著題型要求或者題目類別而有所變動,因此題目沒有變動時,我們不會調整這邊的參數設定,這邊僅註解參數的意義

4.2 Batch Size

Batch Size 決定了每次 Batch 切多少大小進行計算,這主要取決於您的計算機運算能力,以及希望多久執行完畢,Size越小執行時間越久,但最終收斂的結果也可能進一步提升,只是邊際效應會遞減。

4.3 設定 Bert 連接目標值的 Layer 結構

這裡是參數調整的重點區域,因為影響到中間層的形狀以及大小,您也可以選擇加入Dropout Layer,如果使用 Hugging Face 團隊提供的 bertForSequenceClassification,config 中很多參數與這個區域相關。

4.4 Optimizer & Learning Rate

這個部分可以設定收斂的方式,包含優化器(Optimizer) 以及學習速率 (Learning Rate)

--

--

柯頌竹
Programming with Data

熱愛自由行、參觀各種形式的展覽,踏上過20個國家的領土。歡迎詢問各種在歐洲自由行的問題。偶爾分享一下資料分析的讀書筆記。