2.1 Hugging Face Transformersを使ったモデルのファインチューニング|BERTのPython実装例

公開日: 2024-11-06 最終更新日: 2026-08-24 バージョン: 5
2.1 Hugging Face Transformersを使ったモデルのファインチューニング|BERTのPython実装例

前のセクション「LLMモデルの微調整(ファインチューニング)」では、ファインチューニングの重要性について解説しました。次は、Hugging FaceのTransformersを使用した具体的なファインチューニング方法を紹介します。

Hugging FaceのTransformersを使ったモデルのファインチューニング

LLM(大規模言語モデル)の性能をさらに引き上げるうえで、ファインチューニングは欠かせない工程です。Hugging FaceのTransformersライブラリは、少ないコードでファインチューニングを試せる人気のツールで、多くの事前学習済みモデルが公開されています。このセクションでは、Hugging FaceのTransformersを使って、BERTやGPTなどのモデルをファインチューニングする方法を紹介します。

パラメータ推奨値補足
learning_rate2e-5 〜 5e-5事前学習済み重みを壊さない小さめの値
num_train_epochs2 〜 4多すぎると過学習しやすい
batch_size8 〜 32GPUメモリと相談して決める
weight_decay0.01正則化で汎化性能を安定させる

ファインチューニングとは?

ファインチューニングは、事前学習済みモデルを特定のタスクに合わせて再度学習させる工程です。ニュース分類や感情分析のような用途に対して、少量の追加データでモデルを微調整することで、そのタスクに特化した精度の高いモデルが得られます。

Hugging Face Transformersのインストール

まず、transformersdatasetsライブラリをインストールしましょう。


# 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)が推奨されます。
  • エポック数: 過学習を避けるため、エポック数は少なめに設定するのが一般的です。

次のセクション「2.2 トレーニングデータの準備と前処理」では、ファインチューニングに必要なデータの準備と、効率的な前処理方法について解説します。


下田 昌平
下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。

質問と回答

このトピックについて質問はありますか?以下からお気軽にどうぞ(登録不要)。担当チームが内容を確認し、回答します。

まだ質問はありません。最初の質問をどうぞ。

質問する

確認のため、入力されたメールアドレス宛に一度だけ確認メールをお送りします。質問は確認後に公開されます。