データセットはファインチューニングの魂

大規模モデルのファインチューニングにおいて、データの品質は量よりもはるかに重要です。数百の高品質なサンプルは、数万の低品質なサンプルよりも優れた結果をもたらす可能性があります。データセットの構築には、体系的な方法論と厳格な品質管理が必要です。

SFTデータ形式

教師ありファインチューニング(SFT)のデータは通常、会話形式を採用します:

[
  {
    "messages": [
      {"role": "system", "content": "あなたはプロのPythonプログラミングアシスタントです"},
      {"role": "user", "content": "PythonでCSVファイルを読み込むには?"},
      {"role": "assistant", "content": "pandasライブラリのread_csv関数を使用できます..."}
    ]
  },
  {
    "messages": [
      {"role": "system", "content": "あなたはプロのPythonプログラミングアシスタントです"},
      {"role": "user", "content": "リスト内包表記とは何ですか?"},
      {"role": "assistant", "content": "リスト内包表記は、Pythonでリストを作成する簡潔な構文です..."}
    ]
  }
]

データソースと収集

  • 人間によるアノテーション:品質は最高ですが、コストも最高です。コアなシナリオに適しています。
  • モデル生成+人間によるレビュー:まずGPT-4などの強力なモデルで候補データを生成し、人間がフィルタリングと修正を行います。
  • オープンソースデータセット:ShareGPT、Alpaca、OpenOrcaなどがありますが、使用前にフィルタリングが必要です。
  • ユーザーフィードバック:本番環境でのユーザーインタラクションから高品質な会話を収集します。

データクリーニング戦略

  1. 長さフィルタリング:短すぎる(<20文字)または長すぎる(>2000文字)会話は通常、品質が低いです。
  2. 重複検出:MinHashや意味的類似度を使用して重複サンプルを検出し、削除します。
  3. 言語検出:データの言語の一貫性を確保し、中国語と英語の混在を避けます。
  4. 形式検証:JSON形式が正しく、フィールドが完全であることを確認します。
  5. コンテンツレビュー:機密、有害、または低品質なコンテンツを含むサンプルをフィルタリングします。

データ品質評価

def evaluate_dataset_quality(dataset):
    metrics = {
        "total_samples": len(dataset),
        "avg_instruction_length": 0,
        "avg_response_length": 0,
        "diversity_score": 0,
        "format_valid_rate": 0
    }

    instruction_lengths = []
    response_lengths = []

    for sample in dataset:
        messages = sample["messages"]
        user_msg = next(m["content"] for m in messages if m["role"]=="user")
        assistant_msg = next(m["content"] for m in messages if m["role"]=="assistant")

        instruction_lengths.append(len(user_msg))
        response_lengths.append(len(assistant_msg))

    metrics["avg_instruction_length"] = sum(instruction_lengths) / len(instruction_lengths)
    metrics["avg_response_length"] = sum(response_lengths) / len(response_lengths)
    metrics["diversity_score"] = calculate_diversity(instruction_lengths)

    return metrics

データ拡張技術

  • Self-Instruct:モデル自身に新しい指示と応答のペアを生成させます。
  • 逆翻訳拡張:中国語→英語→中国語と変換し、意味は同じだが表現が異なるサンプルを生成します。
  • テンプレート拡張:テンプレートに基づいて、同じ意図で異なる表現のバリアントを生成します。
  • 難易度分级:異なる難易度のサンプルを構築し、モデルが段階的に学習できるようにします。

ベストプラクティス

1. 品質は量に勝る:データ品質を優先します。 2. 多様性のカバレッジ:データが対象ドメインのさまざまなシナリオをカバーするようにします。 3. 継続的な反復:モデルのパフォーマンスに基づいてデータセットを継続的に補充・最適化します。 4. バージョン管理:データセットをバージョン管理し、各変更を追跡可能にします。