コンテンツにスキップ
LinkedInX

ファインチューニング用データの準備

約10分

対象読者: ファインチューニングのためのデータセット作成・管理を学びたい方、実際にデータ準備を進めたい方
前提知識: ファインチューニング入門 の基礎

ファインチューニングの品質は、モデルのアーキテクチャや学習手法だけでなく、データの質に大きく左右されます。「量より質」はファインチューニングにおける根本原則です。不正確なラベルや矛盾した回答を大量に集めるより、目的に合った一貫性のあるデータを少量から検証する方が改善につながりやすくなります。

LLMのファインチューニングは、本質的に「正解例の模倣学習」です。モデルは提供されたデータのパターンを学習します。つまり、データに矛盾がある、ノイズが多い、または目的と合っていない場合、モデルはそのノイズも学習してしまいます。

一方、良質なデータを少量そろえると:

  • モデルが一貫したスタイルと振る舞いを学習する
  • 過学習のリスクが下がる
  • 評価と改善のサイクルが回しやすくなる

質問・指示(instruction)、入力(input)、出力(output)の3つで構成されます。Alpaca は、52K件の instruction-following demonstrations を使って LLaMA 7B をファインチューニングした研究例です。[1]

{
  "instruction": "次の文章を敬語に直してください。",
  "input": "明日会議があるから来てくれ。",
  "output": "明日会議がございますので、ご参加いただけますでしょうか。"
}

input が不要な場合は空文字列にします。

{
  "instruction": "日本の首都を教えてください。",
  "input": "",
  "output": "日本の首都は東京です。"
}

OpenAI APIの形式に沿った、マルチターン会話のデータです。ChatGPTスタイルのアシスタントをファインチューニングする際に使われます。[5]

{
  "messages": [
    {
      "role": "system",
      "content": "あなたは丁寧な日本語で回答するアシスタントです。"
    },
    {
      "role": "user",
      "content": "Pythonでリストの重複を除く方法を教えてください。"
    },
    {
      "role": "assistant",
      "content": "Pythonでリストの重複を除くには、`set()` を使う方法が最も簡単です。\n\n```python\noriginal = [1, 2, 2, 3, 3, 4]\nunique = list(set(original))\nprint(unique)  # [1, 2, 3, 4](順序は保証されない)\n```\n\n順序を保持したい場合は `dict.fromkeys()` を使います。\n\n```python\nunique_ordered = list(dict.fromkeys(original))\nprint(unique_ordered)  # [1, 2, 3, 4]\n```"
    }
  ]
}

プロンプトと続くテキストのペアです。文章の続きを生成するタスクや、決まったテンプレートへの埋め込みに向いています。

{
  "prompt": "製品名: AIアシスタントProの特徴を3点挙げると、",
  "completion": "\n1. 24時間対応の自動応答\n2. 多言語サポート(日英中)\n3. 既存システムとのAPI連携"
}

必要なデータ量はタスクの種類と複雑さによって異なります。

タスク目安のサンプル数備考
応答スタイル・口調の調整100〜500件質が高ければ少量でも効果あり
特定フォーマットへの適合200〜1,000件JSON出力など形式が明確なタスク
ドメイン知識の適応1,000〜10,000件医療・法律・製造などの専門分野
新しい能力の獲得10,000件以上ゼロから能力を付与する場合

これらはあくまで目安です。実際には少量から始めて評価し、必要に応じてデータを追加する反復的なアプローチが有効です。

社内の専門家や対象ドメインの知識を持つ人が、質問と回答のペアを作成します。コストはかかりますが、品質が最も高くなります。

向いている場面: 専門性が高いドメイン(医療、法律、社内規定)、誤りが許容できない本番システム

Hugging Face Hub には、ファインチューニング候補として使われる公開データセットが多数あります。[3]

  • Alpaca: 52,000件のinstruction-followingデータ(Stanford)[1]
  • OpenHermes: 1,001,551行の合成instruction / chatデータ[2]

注意: 既存データセットを商用利用する場合はライセンス確認が必須です。

合成データ生成(GPT-4等を使用)

Section titled “合成データ生成(GPT-4等を使用)”

強力なモデルを使って、自社ドキュメントからQ&Aペアを自動生成する方法です。Self-Instruct は、言語モデル自身に新しい instruction data を生成させる研究例です。[4]

# 合成データ生成の概念例
system_prompt = """
あなたはデータセット作成の専門家です。
与えられた文書から、ファインチューニング用のQ&Aペアを生成してください。
出力はJSON形式で、instructionとoutputのペアにしてください。
"""

document = "(社内マニュアルや専門文書の内容)"
# GPT-4 APIに送信してQ&Aペアを生成

法的注意: OpenAI の利用規約は、OpenAI と競合するモデルの開発に Output を使うことを禁止しています。[6] 合成データを学習に使う前に、各プロバイダーの最新の利用規約を確認してください。

収集したデータを使用前に確認すべき項目です。

  • 多様性: 同じパターンの繰り返しがなく、多様な表現・構造が含まれている
  • 正確性: 出力が客観的に正しく、矛盾がない
  • 一貫性: 同じタスクに対して一貫したスタイルと形式で回答している
  • 適切な長さ: 極端に短すぎる(情報不足)または長すぎる(冗長)サンプルを除外
  • フォーマット統一: JSON形式の場合、キー名や構造が統一されている
  • ターゲットタスクとの関連性: 学習させたい振る舞いに直結しているか
graph TD
    A["生データ収集"] --> B["重複除去"]
    B --> C["長さフィルタリング"]
    C --> D["品質スコアリング"]
    D --> E["人手レビュー(サンプリング)"]
    E --> F["Train/Validation分割"]
    F --> G["学習データとして使用"]

完全一致だけでなく、意味的に似たサンプルの重複も除去します。重複が多いとモデルがそのパターンを過剰に学習します。

  • 極端に短いサンプル(例: 出力が10トークン以下)は情報が少なすぎる可能性
  • 極端に長いサンプルはモデルのコンテキスト長の制約に引っかかる場合がある

学習データの80〜90%を訓練(train)、10〜20%を検証(validation)に分割します。検証データはモデルが見ていないデータで過学習を検出するために使います。

データに含めてはいけないもの(レッドフラグ)

Section titled “データに含めてはいけないもの(レッドフラグ)”

以下のデータはリスクが高く、除外または慎重な処理が必要です。

問題具体例対処
個人情報(PII)氏名、メールアドレス、電話番号自動検出ツールで除去または匿名化
著作権コンテンツ書籍・論文の全文、有料コンテンツライセンス確認・許可取得
有害・差別的内容ヘイトスピーチ、暴力表現フィルタリング必須
矛盾した回答同じ質問に異なる正解が存在品質レビューで統一
古い情報廃止されたAPI、変更された仕様情報の更新日を管理
データソース品質コスト労力法的リスク
専門家による手動作成最高
既存の公開データセット中〜高ライセンスを確認
GPT-4等による合成生成中〜高中(利用規約を確認)
スクレイピング(Web)低〜中高(著作権・利用規約)
社内ログ・履歴中(PII対策必要)

Q: GPT-4の出力を使って別のモデルを学習させてもいいですか?

A: OpenAIの利用規約では、OpenAI と競合するモデルの開発に Output を使うことを禁止しています。[6] 利用前に最新の利用規約を確認してください。Anthropic(Claude)やMistralなど他のプロバイダーにも独自の規約があります。合成データ生成には、利用規約でこれを明示的に許可しているモデルを使用するのが安全です。

Q: データが十分かどうかはどうやって判断しますか?

A: まず小さいデータセット(100〜500件)でベースラインを作り、検証データでの損失(validation loss)と実際のタスク精度を測定します。その後データを追加しながら改善幅を観察します。追加しても改善しなくなったら、データ量よりも品質の問題に切り替えて見直しましょう。

  1. Alpaca: A Strong, Replicable Instruction-Following Model — Stanfordのinstruction dataセット
  2. OpenHermes Dataset — 高品質な合成instructionデータ
  3. Hugging Face Datasets Documentation — データセット管理ライブラリ
  4. Self-Instruct: Aligning Language Models with Self-Generated Instructions — 合成データ生成の基礎研究
  5. OpenAI Fine-tuning Guide — OpenAI APIのファインチューニング仕様
  6. OpenAI Terms of Use — OpenAIサービスの利用規約
クイズ