🔧
推論 vs ファインチューニング — 他人のモデルを使うことと自分のモデルを作ることの違い
pipeline()は出前注文、ファインチューニングはレシピを受け取って自分の味に調整すること
よくある誤解:ファインチューニング=学習済みモデルを使うこと?
違う。それは推論だ。
推論: 他人のモデルをそのまま「使用」
ファインチューニング: 他人のモデルをベースに自分のデータで「再訓練」→自分のモデルになる
| 推論 | ファインチューニング | |
|---|---|---|
| 例え | 出前注文 | レシピを受け取って自分の味に調整 |
| コード例え | npm installしてそのまま使う | forkして自分のコード追加後ビルド |
以前やったこと:推論
classifier = pipeline("sentiment-analysis")
classifier("I love this!") # 他人の完成モデルを使っただけ
ファインチューニング:自分のモデルを作る
必要なもの3つ:
1. ベースモデル — すでによく訓練されたモデル(DistilBERT)
2. データセット — 学習材料(「この文は肯定、この文は否定」)
3. 訓練コード — HuggingFace Trainerがほぼやってくれる
データセットはどこから?
HuggingFace Hubにはモデルだけでなくデータセットもある。
huggingface.co/models → 100万+学習済みモデル
huggingface.co/datasets → 20万+学習用データ ←ここ
なぜ「ファイン(fine)」チューニングか
ゼロから訓練するのではなく、すでによく訓練されたモデルを微調整するだけだから。
事前学習:白紙→インターネット全体で数ヶ月訓練→基本モデル(GPU数千台、数億円)
ファインチューニング:基本モデル→自分のデータ数千個で数時間訓練→自分のモデル(ノートPC GPU 1台)
感情分析ファインチューニング全コード
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=2)
trainer = Trainer(model=model, train_dataset=dataset["train"].select(range(1000)),
args=TrainingArguments(output_dir="./my-model", num_train_epochs=3))
trainer.train() # ←ここで自分のモデルができる
なぜ感情分析がファインチューニング入門に最適か
データ:2列CSV(文章+ラベル)
出力:数値1個(肯定/否定)
評価:正解率(当たったか外れたか)
訓練時間:数分
キーコンセプト
1
推論=他人のモデル使用:pipeline("sentiment-analysis")ですぐ結果
2
ファインチューニング=自分のモデル作り:ベースモデル+自分のデータ→再訓練→自分のモデル
3
Hubにデータセットもある:load_dataset("imdb")で25,000個の映画レビューダウンロード
4
Trainer.train()がファインチューニングの核心 — この1行で自分のモデルができる
5
pipeline(model="./my-model")で自分が作ったモデルを推論に使用
ユースケース
感情分析ファインチューニング入門 — IMDBデータで肯定/否定分類モデル作り
韓国語感情分析 — NSMC(ネイバー映画レビュー)+klue/bert-baseで韓国語モデル
自分のデータ活用 — CSV2列(文章、ラベル)があればカスタム分類モデル可能