以下の内容はhttps://cysec148.hatenablog.com/entry/2025/04/14/192312より取得しました。


第47回:Hugging Face Transformersでモデルを微調整(Fine-tuning)する方法

Hello there, ('ω')ノ

🧠 はじめに:モデルの微調整(Fine-tuning)とは?

微調整(Fine-tuning) とは、
事前学習済みのLLM(大規模言語モデル) に対して、
特定タスク向けに追加学習を行うプロセス です。

微調整の目的:
- 特定ドメイン(法律・医療など)への適応
- タスク特化型モデルの精度向上
- コスト・時間の削減(ゼロから学習する必要なし)

微調整でできること:
- 📚 テキスト分類(Sentiment Analysis, Topic Classification)
- ✍️ 要約・翻訳(Summarization, Translation)
- 🔍 質問応答(Question Answering)
- 🤖 対話モデル(Conversational AI)

代表的な微調整モデル:
- BERT / RoBERTa / DistilBERT(分類・質問応答)
- GPT-2 / GPT-3 / LLaMA(テキスト生成)
- T5 / BART(要約・翻訳・QA)


📚 1. Hugging Face Transformersの基本情報


🎯 ① Hugging Face Transformersとは?

概要:
- Hugging Face が提供する NLPモデルのオープンソースライブラリ
- BERT・GPT・T5・LLaMA などのモデルを簡単に利用可能

主要機能:
- モデルの読み込み・推論・微調整
- トークナイザーの活用・データ変換
- ファインチューニングと推論の効率化


🎯 ② Transformersの基本モジュール

モジュール 説明
AutoModel モデルの自動読み込み
AutoTokenizer トークナイザーの自動読み込み
Trainer モデルのトレーニング・微調整
Pipeline 推論タスクの簡単な実行
Dataset トレーニング・評価データの管理

🛠️ ③ Hugging Faceのセットアップ

# 必要なライブラリのインストール
pip install transformers datasets torch accelerate

環境準備完了!


🎥 2. 微調整の基本フロー:ステップごとの解説


🎯 ① 微調整の基本ステップ

[データの準備] → [モデル・トークナイザーの読み込み] → [トレーニング] → [評価・保存]

ステップ:
1. データの前処理・トークナイズ
2. 事前学習済みモデルの読み込み
3. Trainer で微調整の実行
4. モデルの評価と保存


🧩 ② 使用するモデルの選択

主要な事前学習モデル:
- BERT: テキスト分類・質問応答
- GPT-2 / GPT-3: テキスト生成
- T5 / BART: 翻訳・要約・QA

モデル選択の例:

from transformers import AutoModelForSequenceClassification, AutoTokenizer

# BERTベースのモデルとトークナイザーを読み込み
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

用途別モデルの選択例:
- bert-base-uncasedテキスト分類
- gpt2テキスト生成
- t5-small翻訳・要約・QA


📊 3. 実践:Hugging FaceでBERTモデルの微調整


📚 ① データセットの準備

ステップ:
1. データの収集・準備
2. テキストとラベルの前処理
3. データのトークナイズと分割

データセットの読み込み(IMDBレビュー分類)

from datasets import load_dataset

# IMDBデータセットの読み込み
dataset = load_dataset("imdb")

# データセットの確認
print(dataset["train"][0])

出力例:

{'text': 'This is an amazing movie with great performances.', 'label': 1}

📚 ② トークナイズとデータ前処理

トークナイズ処理

from transformers import AutoTokenizer

# トークナイザーの初期化
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

# データのトークナイズ
def preprocess_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

# データの前処理
tokenized_datasets = dataset.map(preprocess_function, batched=True)

データセットの分割

# 訓練・検証データの分割
train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(10000))
eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(2000))

📚 ③ モデルの読み込み

from transformers import AutoModelForSequenceClassification

# BERTモデルの読み込み
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

クラス分類用の2クラス(ポジティブ・ネガティブ)


📚 ④ 微調整のトレーニング

トレーニングの設定

from transformers import TrainingArguments, Trainer

# トレーニング設定
training_args = TrainingArguments(
    output_dir="./bert-finetuned-imdb",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    num_train_epochs=3,
    weight_decay=0.01,
    save_total_limit=2,
    logging_dir="./logs"
)

Trainerの作成

from transformers import Trainer

# Trainerの作成
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset
)

# 微調整の実行
trainer.train()

結果:

[INFO] 微調整が正常に完了しました!

📚 ⑤ モデルの評価

# モデルの評価
eval_results = trainer.evaluate()
print(f"Evaluation results: {eval_results}")

結果:

Evaluation results: {'eval_loss': 0.234, 'eval_accuracy': 0.91}

📚 ⑥ 微調整したモデルの保存

# 微調整済みモデルの保存
trainer.save_model("./bert-finetuned-imdb")

保存されたモデルの確認

./bert-finetuned-imdb/
├── config.json
├── pytorch_model.bin
└── tokenizer.json

🔎 4. 応用編:LoRAと量子化を活用した効率的な微調整


🎯 ① LoRA(Low-Rank Adaptation)の活用

概要:
- LoRAは、モデルの一部パラメータのみを微調整する手法
- メモリ使用量を削減しながら、高精度を維持できる

LoRAでのファインチューニング

from peft import LoraConfig, get_peft_model

# LoRA設定
lora_config = LoraConfig(
    r=8,  # 低ランク次元
    lora_alpha=32,
    target_modules=["query", "value"],
    lora_dropout=0.1
)

# LoRAモデルの準備
model = get_peft_model(model, lora_config)

メリット:
- メモリ消費量の大幅削減(最大90%)
- 特定タスクへの高速適応


🎯 ② 量子化(Quantization)の適用

概要:
- モデルをINT8/FP16で量子化して、推論速度とメモリ効率を向上

量子化モデルのロード

from transformers import AutoModelForSequenceClassification

# FP16モデルの読み込み
model_fp16 = AutoModelForSequenceClassification.from_pre

trained(
    "bert-base-uncased", num_labels=2, torch_dtype=torch.float16
)

# INT8量子化モデルの読み込み
model_int8 = AutoModelForSequenceClassification.from_pretrained(
    "bert-base-uncased", num_labels=2, load_in_8bit=True
)

メリット:
- 推論速度の向上(最大4倍)
- メモリ消費量の削減(最大75%)


🎁 5. まとめ:Hugging Faceでモデル微調整をマスターしよう!

Hugging Face Transformersは、BERT・GPT・T5 などのモデルを簡単に微調整できる強力なフレームワークです。
微調整の基本ステップ(データ前処理 → モデル読み込み → トレーニング → 評価・保存)を理解しよう。
LoRA・量子化を活用することで、効率的な微調整と推論速度の向上が可能。
特定タスク向けのモデル微調整で、ビジネス・研究・教育分野でのAI活用を加速させよう!

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/04/14/192312より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14