【NLP 自然語言處理】BERT + Fast.ai — 多標籤分類模型實作
Fast.ai 是基於 PyTorch 的深度學習函式庫,為深度學習應用提供統一的 API,使開發者更無痛上手
PyTorch 源碼牽涉一些底層程式,能夠自由修改但出錯機會也大,而 Fastai 提供統一的 API 調用 PyTorch 函式。本文將使用 fastai 及 BERT pretrained model 訓練多標籤文本分類模型。
本文任務
- 了解多標籤分類任務
- 認識 Fast.ai
- 使用 Fast.ai 進行文本多標籤分類任務
在開始前不免俗的…
.如果你喜歡這篇文章的選題,請幫我拍手👏 +5 下,讓我瞭解這是不是讀者所喜歡的方向
.如果這篇文章的整理對你有幫助,請幫我拍手👏 +20 下,讓我瞭解內容對讀者的幫助程度
.如果還希望有類似的知識點整理,請幫我拍手👏 +50 下,讓類似的內容可以繼續出現!
何謂多標籤分類?
和「二元分類」、「多類別分類」相比,「多標籤分類」是指每個樣本能夠被賦予多個 label,各個 label 是否標上樣本,由 sigmoid function 產生一個 0~1之間的機率、設定門檻後決定。
認識 Fast.ai
Fast.ai 是基於 PyTorch 的深度學習函式庫,為深度學習應用提供統一的 API,使開發者更無痛上手、加速深度學習應用開發。透過 Fast.ai 可以使用統一的架構進行影像辨識、文本、時間序列、協同過濾等應用。
- 官方文件:https://docs.fast.ai/
- 文件及影片教學:https://course.fast.ai/
使用 Fast.ai 進行文本多標籤分類任務
此 Kaggle 比賽使用來自維基百科的留言資料,將留言標上 6 種代表負面情緒的標籤,分別是 toxic, severe_toxic, obscene, threat, insult, identity_hate,幫助平台判斷是否阻擋用戶的不當留言。
- 安裝所需套件
!pip install pytorch-pretrained-bert
2. 引入所需套件
包含基本的 numpy, pandas, sklearn 的 train_test_split 及 pytorch, fastai套件,並自 pretrained model 提取 BERT Tokenizer 及 BERT 文本分類模型。
import numpy as np
import pandas as pdfrom typing import *
from sklearn.model_selection import train_test_splitimport torch
import torch.optim as optimfrom fastai import *
from fastai.vision import *
from fastai.text import *
from fastai.callbacks import *from pytorch_pretrained_bert import BertTokenizer
bert_tok = BertTokenizer.from_pretrained(config.bert_model_name)from pytorch_pretrained_bert.modeling import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=6)
3. 引入本任務訓練資料集
label_cols = ['toxic', 'severe_toxic', 'obscene', 'threat', 'insult', 'identity_hate']train = pd.read_csv('train.csv', error_bad_lines=False, engine='python')
train['comment_text'] = train['comment_text'].str.replace('([“”"¨«»®´·º½¾¿¡§£₤‘’])', '')test = pd.read_csv('test.csv', error_bad_lines=False, engine='python')
test['comment_text'] = test['comment_text'].str.replace('([“”"¨«»®´·º½¾¿¡§£₤‘’])', '')train, val = train_test_split(train)
4. 創建所需的 BertTokenizer 及 Vocab
5. 調用 Fastai 的 TextClasDataBunch 方法,將資料集轉成可以丟進 Fastai 模型的格式
6. 產生多標籤模型架構
7. 設定指標評估 function 並建置模型
8. 測試模型效果
- 正面案例:沒有被標上任何負面情緒 label,機率分數也低於門檻很多
- 負面案例:被標上負面情緒 label = {‘toxic’, ‘threat’},其他標籤的機率分數也更為接近門檻
9. 印出模型成效指標
以上是運用 Fast.ai 及 BERT 預訓練模型進行文本多標籤分類的實作案例,希望對你有幫助!
若想獲得完整代碼請至粉專貼文留言,Chatbot 會將連結火速送到你手中。
.如果你喜歡這篇文章的選題,請幫我拍手👏 +5 下,讓我瞭解這是不是讀者所喜歡的方向
.如果這篇文章的整理對你有幫助,請幫我拍手👏 +20 下,讓我瞭解內容對讀者的幫助程度
.如果還希望有類似的知識點整理,請幫我拍手👏 +50 下,讓類似的內容可以繼續出現!