1. 程式人生 > 其它 >5分鐘NLP:使用 HuggingFace 微調BERT 並使用 TensorBoard 視覺化

5分鐘NLP:使用 HuggingFace 微調BERT 並使用 TensorBoard 視覺化

上篇文章我們已經介紹了Hugging Face的主要類,在本文中將介紹如何使用Hugging Face進行BERT的微調進行評論的分類。其中包含:AutoTokenizer、AutoModel、Trainer、TensorBoard、資料集和指標的使用方法。

 

在本文中,我們將只關注訓練和測試拆分。每個資料集都由一個文字特徵(評論的文字)和一個標籤特徵(表示評論的好壞)組成。

  1. from datasets import load_dataset, load_metric
  2. task = "imdb"
  3. dataset = load_dataset(task)
  4. print(dataset)
  5. """
  6. DatasetDict({
  7. train: Dataset({
  8. features: ['text', 'label'],
  9. num_rows: 25000
  10. })
  11. test: Dataset({
  12. features: ['text', 'label'],
  13. num_rows: 25000
  14. })
  15. unsupervised: Dataset({
  16. features: ['text', 'label'],
  17. num_rows: 50000
  18. })
  19. })
  20. """

IMDb資料集的通用基準指標是準確率,所以這裡使用 datasets 庫的 load_metric 函式來載入 metric 指令碼,稍後可以與 compute 方法一起使用。

  1. metric = load_metric("accuracy")
  2. metric.compute(predictions=[0,0,1,1], references=[0,1,1,1])
  3. # {'accuracy': 0.75}

下載的資料集有訓練和測試拆分,但我們還需要拆分出驗證集來判斷模型在訓練期間表現以避免過擬合。

使用train_test_split 應用於 test_size = 0.3 進行拆分:這會產生一個包含 70% 原始樣本的新訓練集和一個包含 30% 原始樣本的驗證集。

  1. splitted_datasets = dataset["train"].train_test_split(test_size=0.3)
  2. print(splitted_datasets)
  3. """
  4. DatasetDict({
  5. train: Dataset({
  6. features: ['text', 'label'],
  7. num_rows: 17500
  8. })
  9. test: Dataset({
  10. features: ['text', 'label'],
  11. num_rows: 7500
  12. })
  13. })
  14. """

接下來使用 Hugging Face的AutoTokenizer 類載入 BERT Tokenizer。

本文實際上載入 DistilBERT 作為 快速替代方案,如果需要載入 BERT,程式碼基本是相同的(即將 distilbert-base-uncased 替換為 Bert-base-uncased)。DistilBERT 是一種小型、快速、廉價和輕量級的 Transformer 模型,通過蒸餾 BERT 基礎進行訓練。根據 GLUE 語言理解基準測試,它的引數比 Bert-base-uncased 少 40%,執行速度提高 60%,同時保持 BERT 95% 以上的效能。

完整列表:

https://www.overfit.cn/post/bf902048c16c4944a171665dc6ffdccb