ファインチューニング用データセットの作り方|サンプル形式・件数・品質の要件
ファインチューニングの成否は、モデルよりも学習させるデータセットで決まる。同じ手順でも、サンプルの形式が崩れていたり件数や品質が足りなければ、期待した振る舞いは得られない。この記事では、ファインチューニング用データセットのサンプル形式(JSONLのchat形式)、必要な件数の目安、作成手順と品質・要件、そしてありがちな失敗と向かない場面までを、OpenAI(ChatGPT)での実行例を軸に具体的に整理する。
まとめ:データセット作成の要点
- 形式:OpenAIのファインチューニングはJSONL(1行1レコード)で、各行を
{"messages":[...]}のchat形式にする。1件につき最低でもuserとassistantの2メッセージ、systemは任意だが推奨。 - 件数:最小は10件だが、改善を体感するには50〜100件が目安。まず精度高く作った50件で試し、評価してから増やす。
- 品質>量:件数を稼ぐより、実運用に近い具体的なサンプルを、回答の書式・トーンを統一して揃える方が効く。
- 要件:狙うタスクを1つに絞る/入出力を現実的にする/偏りをなくす/検証用を1〜2割分ける。
- 向かない場面:最新情報の参照や社内文書の検索はRAG、指示の調整で足りるならプロンプトで対応する。ファインチューニングは「振る舞い・形式の固定」に使う。
ファインチューニング用データセットとは:モデルに何を学習させるデータか
ファインチューニング用データセットは、既存モデルに「この入力にはこう答える」という入出力の実例をまとめたものだ。プロンプトで毎回指示するのではなく、望ましい応答パターンそのものを追加学習させ、出力の形式・口調・分類ルールをモデルに固定させる。ファインチューニングの位置づけ自体を整理したい場合はファインチューニングとは?AIモデルを適応させる技術の概要と目的を、事前学習の知識を再利用する広い枠組みとの違いは転移学習とは?ファインチューニング・特徴抽出との違いと実装判断を解説を参照してほしい。
データセットの中身は、想定する使い方をそのまま反映する。カスタマーサポートの自動応答を作るなら実際の問い合わせと回答、特定フォーマットでの要約なら入力文と理想の要約、というように本番で来る入力と、返してほしい出力のペアを集める。ここがずれていると、件数を増やしても狙った振る舞いにはならない。
データセットのサンプル形式:JSONLとchat形式の書き方
OpenAIのファインチューニングでは、学習データをJSONL(JSON Lines)で用意する。ファイルの1行が1件の学習サンプルで、各行が独立した完全なJSONになっている必要がある(配列で囲まない)。中身はChat Completions APIと同じchat形式で、messages配列にroleとcontentを並べる。
会話(chat)形式の基本サンプル
1件は「system(役割指示・任意)+user(入力)+assistant(理想の回答)」で構成する。改行を含めず1行に書くのがJSONLの要点だ。
{"messages":[{"role":"system","content":"あなたは自社ECのサポート担当です。丁寧語で3文以内に答えます。"},{"role":"user","content":"注文をキャンセルしたいです"},{"role":"assistant","content":"承知しました。マイページの注文履歴から該当注文を開き、「キャンセル」を選択してください。発送準備後はキャンセルできませんのでご了承ください。"}]}
{"messages":[{"role":"system","content":"あなたは自社ECのサポート担当です。丁寧語で3文以内に答えます。"},{"role":"user","content":"送料はいくらですか"},{"role":"assistant","content":"全国一律550円です。5,000円以上のご購入で送料無料になります。"}]}
systemメッセージは全サンプルで同じ文言に揃えると、本番の推論時に同じsystemを渡したときの振る舞いが安定する。userとassistantは最低1組ずつ必要で、複数ターンの会話をそのまま1件にしてもよい。
タスク別のサンプル例(分類・抽出・スタイル適応)
用途が変わっても構造は同じで、userに入力、assistantに「返してほしい正解」を置く。狙うタスクごとに出力の型を固定するのがコツだ。
| タスク | userに入れるもの | assistantに入れるもの |
|---|---|---|
| 分類 | 問い合わせ文 | ラベル1語(例:返品) |
| 抽出 | メール本文 | JSONで会社名・金額・日付 |
| スタイル適応 | 素の文章 | 指定トーンに直した文章 |
分類や抽出のように出力が構造化されるタスクでは、assistantの回答を常に同じ書式(同じラベル集合、同じキー名)で書く。書式がぶれると学習が安定しない。
学習データの作成手順:収集から整形・分割まで
データ収集:本番の入力に近い実データを集める
過去の問い合わせ履歴、専門家が書いた回答、業務ログなど、実際に来る入力と正解のペアを優先して集める。作文で埋めた人工的な例だけだと、本番の入力分布とずれて効きにくい。個人情報や機密が含まれる場合は、学習前にマスキング・削除しておく。
整形とJSONL化:1行1レコードに変換する
収集したペアを、前節のchat形式に整える。表記ゆれ(全角半角・空白)を正規化し、回答の書式を統一する。CSVや表計算で「入力」「出力」を管理し、スクリプトでJSONLへ書き出すと運用しやすい。JSONの特殊文字(ダブルクオート・改行)は正しくエスケープする。
学習用と検証用の分割
集めたデータの1〜2割を検証用(validation)に取り分ける。学習用と検証用で内容が重複しないようにし、検証用は「学習に使っていない入力」で効果を測る。分割せずに全件を学習に回すと、過学習に気づけない。
良いデータセットの要件と品質基準:件数・多様性・一貫性
必要なサンプル件数の目安(最小10・推奨50〜100)
OpenAIのファインチューニングは最小10件から実行できるが、それは動作の下限であって効果の下限ではない。改善を体感するには50〜100件が目安とされ、まずは丁寧に作った50件で一度学習して評価し、足りない挙動を見て追加するのが無駄がない。件数は多いほど良いわけではなく、質の低いサンプルを混ぜると精度はむしろ下がる。
品質を決める3条件:具体性・多様性・一貫性
- 具体性:抽象的な模範解答ではなく、現実に来る質問と、そのまま出してよい回答にする。
- 多様性:想定される入力の言い回し・パターンを幅広く含める。同じ聞き方ばかりだと、少し違う入力に弱くなる。
- 一貫性:同種の入力に対する回答の書式・トーン・ラベルを揃える。ここが揺れると、学習した出力もぶれる。
サンプルが「重要」なのは、ファインチューニングがデータの傾向をそのまま模倣するからだ。偏ったデータを与えれば偏った応答を、雑な書式を与えれば雑な出力を再現する。
データセット作成でありがちな失敗と、そもそも向かない場面
件数を集めることが目的化し、テンプレをコピーしただけの似た例で水増しすると、多様性が失われて汎化しない。逆に1件だけ毛色の違う例を入れても学習には効かない。ラベルの定義が揺れている(同じ問い合わせに違うラベルが付く)データも、分類の精度を確実に落とす。
そして最も多い失敗は、ファインチューニングで解くべきでない課題に使うことだ。最新の在庫や社内規程のような「知識」を答えさせたいなら、モデルに覚え込ませるよりRAG(検索して渡す)が適する。出力の指示で足りるなら、まずプロンプトの改善で十分なことも多い。ファインチューニングが効くのは、「決まった形式・口調・分類ルールを安定して守らせたい」ケースに絞られる。データセットを作り始める前に、この見極めをしておくと手戻りがない。
作成したデータセットでファインチューニングを実行する(OpenAI/ChatGPTの例)
データセット(JSONL)が用意できたら、OpenAIでの流れは「ファイルをアップロード → ファインチューニングのジョブを作成 → 完成したモデルIDを推論で指定」というシンプルなものだ。学習用ファイルとは別に検証用ファイルを渡すと、学習中に検証指標を確認できる。
対応モデル・料金・エポック等の既定値は更新が速いため、着手時にOpenAI公式のファインチューニングガイドで最新を確認してほしい。OSSモデルを自前環境で調整したい場合は、全パラメータを更新せず省メモリで学習する手法が実務的で、PEFTとLoRAの違いとは?仕組み・使い方・QLoRA/DoRAとの比較を実装例つきで解説や、省メモリで高速に学習できるUnslothが選択肢になる。いずれの場合も、ここまで解説したデータセット設計の考え方(形式の統一・件数・品質・分割)はそのまま通用する。
よくある質問
ファインチューニングのデータセットは何件必要ですか?
OpenAIでは最小10件から実行できますが、改善を体感するには50〜100件が目安です。まず丁寧に作った50件で学習・評価し、不足する挙動を見て追加すると無駄がありません。件数より質を優先してください。
データセットのサンプルはどんな形式で用意しますか?
JSONL(1行1レコード)で、各行を{"messages":[...]}のchat形式にします。1件につきuser(入力)とassistant(理想の回答)を最低1組、system(役割指示)は任意ですが全件で統一すると安定します。
データセットは質と量のどちらが重要ですか?
質が優先です。実運用に近い具体的な入出力を、回答の書式・トーンを統一して揃える方が効きます。質の低いサンプルを量で足すと、偏りや書式のぶれを学習して精度がむしろ下がります。
ChatGPT(GPT系)のファインチューニングに必要なデータは何ですか?
本番で来る入力と、返してほしい出力のペアです。カスタマーサポートなら実際の問い合わせと回答、分類なら文章とラベルというように、想定タスクをそのまま反映したペアをchat形式で用意します。
ファインチューニングとRAG・プロンプトはどう使い分けますか?
最新情報や社内文書を「参照」させたいならRAG、指示の調整で足りるならプロンプトが適します。ファインチューニングは、決まった形式・口調・分類ルールを安定して守らせたいときに使うのが基本です。