BERTの実装を試す。
BERTもLLMだが、ChatGPTと違うのは、双方向(bidirectional)でマスクトランゲージモデル(単語の一部を隠して学習)を採用している点だ。今回はCPUのみで行う。
Jupyter Notebookで作成したので、こちらを参照。
ライブラリをインストール
Hugging Faceのtransoformersをインストールする。
pip install transformers datasets torch scikit-learn
映画レビューDBを使ってファイン・チューニング
データセットのロードとトークン化
from datasets import load_dataset
# IMDb映画レビューのデータセット
dataset = load_dataset("imdb")
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# データの前処理関数
def encode(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)
# データセットをトークナイズ
dataset = dataset.map(encode, batched=True)
モデルロードとパラメータ設定
from transformers import BertForSequenceClassification
# 感情分析用に2クラスの出力を持つBERT
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="./results", # 学習後のモデルの保存場所
per_device_train_batch_size=4, # バッチサイズ
per_device_eval_batch_size=4,
num_train_epochs=3, # 学習エポック数
logging_dir="./logs", # ログの保存場所
)
学習
メモリを消費しすぎるので、バッチサイズ4にした。
from transformers import Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"],
)
# 学習の開始
trainer.train()
それでもCPUだけだと、学習に時間かかりすぎなので、次はONNXに変換してやってみたい。
ググったら、もっと簡単に一行でできるみたい。本当に現代はスキルがすぐに陳腐化する時代なあ。
HuggingFaceのTransformerライブラリを使ってみよう