前のセクション「LLMモデルの微調整(ファインチューニング)」では、ファインチューニングの重要性について解説しました。次は、Hugging FaceのTransformersを使用した具体的なファインチューニング方法を紹介します。
Hugging FaceのTransformersを使ったモデルのファインチューニング
LLM(大規模言語モデル)の性能をさらに引き上げるうえで、ファインチューニングは欠かせない工程です。Hugging FaceのTransformersライブラリは、少ないコードでファインチューニングを試せる人気のツールで、多くの事前学習済みモデルが公開されています。このセクションでは、Hugging FaceのTransformersを使って、BERTやGPTなどのモデルをファインチューニングする方法を紹介します。
| パラメータ | 推奨値 | 補足 |
|---|---|---|
| learning_rate | 2e-5 〜 5e-5 | 事前学習済み重みを壊さない小さめの値 |
| num_train_epochs | 2 〜 4 | 多すぎると過学習しやすい |
| batch_size | 8 〜 32 | GPUメモリと相談して決める |
| weight_decay | 0.01 | 正則化で汎化性能を安定させる |
ファインチューニングとは?
ファインチューニングは、事前学習済みモデルを特定のタスクに合わせて再度学習させる工程です。ニュース分類や感情分析のような用途に対して、少量の追加データでモデルを微調整することで、そのタスクに特化した精度の高いモデルが得られます。
Hugging Face Transformersのインストール
まず、transformersとdatasetsライブラリをインストールしましょう。
# transformersとdatasetsのインストール
pip install transformers datasets
BERTモデルのファインチューニング例
ここでは、Hugging FaceのBERTモデルを使ってテキスト分類のファインチューニングを行います。
from transformers import BertForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset
# データセットの読み込み
dataset = load_dataset("imdb")
# モデルとトークナイザーの読み込み
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
tokenizer = BertForSequenceClassification.from_pretrained("bert-base-uncased")
# データの前処理
def preprocess(data):
return tokenizer(data['text'], truncation=True, padding='max_length')
# データのトークナイズ
train_data = dataset['train'].map(preprocess, batched=True)
test_data = dataset['test'].map(preprocess, batched=True)
# トレーニング設定
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
)
# トレーナーの作成
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_data,
eval_dataset=test_data,
)
# トレーニングの実行
trainer.train()
押さえておきたいポイント
Trainer に渡すデータセットは、tokenizer で処理済み・padding 済みである必要があります。前処理を忘れるとバッチ長が揃わず、エラーの原因になります。
ファインチューニングのポイント
- データセットの選定: タスクに適したデータセットを使うことで、モデルの精度が上がります。
- 学習率の調整: ファインチューニングには小さめの学習率(例: 2e-5)が推奨されます。
- エポック数: 過学習を避けるため、エポック数は少なめに設定するのが一般的です。