チャット補完モデルを微調整するためのデータを準備する
微調整には、ベースとして使用する適切な 基礎 モデルと、モデルが学習できるプロンプトと応答の例を含む一連の トレーニング データ を組み合わせることが含まれます。 このユニットでは、トレーニング データ形式の理解、実際のデータからのデータセットの準備、および微調整のための合成データの生成について説明します。
トレーニング データ形式を理解する
言語モデルを微調整する場合は、言語モデルの微調整に使用できるデータセットを特定する必要があります。
他の機械学習モデルと同様に、データセットの品質がモデルの品質に大きな影響を与えます。 最初から言語モデルをトレーニングする場合よりも必要なデータは少なくなりますが、それでも目的のモデルの動作の一貫性を最大限に高めるには、十分なデータが必要になる場合があります。 必要なデータの量は、ユース ケースによって異なります。
チャット補完用の言語モデルを微調整する場合、モデルの微調整に使用するデータは、サンプル会話のコレクションです。 具体的には、データに次の 3 つのコンポーネントが含まれている必要があります。
- システム メッセージ
- ユーザー メッセージ
- アシスタントの応答
3 つの変数は、JSON 行または JSONL ファイルにまとめられます。 たとえば、そのようなデータセット内の 1 行は次のようになります。
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
実際のデータからデータセットを準備する
データセットは、モデルの理想的な動作を示す必要があります。 このデータセットは、使用しているチャット アプリケーションのチャット履歴に基づいて作成することができます。 実際のデータを使用する場合に留意すべき点は、次のとおりです。
- 個人情報や機密情報はすべて削除します。
- 大規模なトレーニング データセットの作成に重点を置くだけでなく、データセットに多様なサンプル セットを含めるようにします。
データセット内の 1 行に複数の会話のターンを含めることができます。 特定のアシスタント メッセージのみを微調整する場合は、必要に応じて、weight キー/値ペアを使用することができます。 重みを 0 に設定するとメッセージは無視され、1 に設定するとメッセージがトレーニングに含まれます。
重みを持つマルチターン チャット ファイル形式の例:
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
微調整のために合成データを生成する
高品質のトレーニング データセットを手動で作成すると、時間がかかり、コストがかかる場合があります。 Microsoft Foundry には、参照ドキュメントまたは API 仕様からトレーニング データを作成するのに役立つ 合成データ生成 機能が用意されています。
合成データの生成は、次の場合に特に便利です。
- 実際のデータが不足しているか、収集が困難である
- 有用な構造を維持しながらプライバシーを維持する必要がある
- 既存のドキュメントまたはコードからドメイン固有のデータを生成する場合
- 手動データ収集と比較してコストを削減したい
合成データ ジェネレーターの選択
Microsoft Foundry には、次の 2 種類の合成データ ジェネレーターが用意されています。
単純な Q&A ジェネレーター: ドメイン ドキュメント (PDF、Markdown、またはプレーン テキストを最大 20 MB) を微調整の質問と回答のペアに変換します。 質問の種類を構成できます。
- 長い回答: モデルの応答で分析的な推論を必要とする質問を生成します
- 短い回答: 事実に基づく簡潔さに焦点を当てた質問を生成します
ツール使用ジェネレーター: API サーフェスに基づいて、ツール呼び出しで複数ターンの会話を作成します。 モデルでツールとして呼び出すために学習する API を記述する有効な OpenAPI 3.0.x または 3.1.x 仕様 (JSON 形式、最大 20 MB) が必要です。
ポータルで合成データを生成する
Microsoft Foundry で合成データを生成するには:
- ポータルで データ > 合成データ生成 に移動する
- [ データの生成] を選択する
- タスクの種類を選択する (単純な Q&A またはツールの使用)
- 必要に応じて生成パラメーターを構成する
- 参照ファイルをアップロードする
- 生成するサンプルの数を指定します (50 ~ 1,000)
- データ生成に使用するモデルを選択する
- 必要に応じて、80/20 のトレーニング検証分割を有効にする
- ジョブを送信する
生成されたデータセットは、Microsoft Foundry の微調整ワークフローと互換性のある JSONL ファイルとして自動的に書式設定されます。 レビュー用のデータセットをダウンロードするか、微調整で直接使用できます。
合成データのベスト プラクティスを適用する
合成データを使用するときに最適な結果を得るには:
- 高品質の参照ファイルを使用する: 参照ファイルの品質は、生成されたデータに直接影響します。 適切に構造化された適切なドキュメントを明確な書式で使用し、過度のノイズや無関係な情報を避けます。
- 小規模から始めて反復する: より小さなサンプル サイズから始めて品質を評価し、アプローチを確認して調整した後にスケールアップします。
- 実際のデータと組み合わせる: 可能な場合は、合成データと実際の例を組み合わせて、モデルのパフォーマンスと一般化を向上させます。
- ハイパーパラメーターの実験: 合成データを微調整する場合は、オーバーフィットを回避するために、実際のデータとは異なる方法で学習率やその他のパラメーターを調整する必要があります。
- パフォーマンスの監視: 実際のタスクで微調整されたモデルを定期的に評価し、要件を満たしていることを確認します。
言語モデルを微調整するためにデータセットを準備する場合は、目的のモデルの動作を理解し、JSONL 形式 (手動または合成生成) でデータセットを作成し、含める例が高品質で多様であることを確認する必要があります。 データセットを慎重に準備することで、微調整されたモデルによってチャット アプリケーションのパフォーマンスが向上する可能性が高くなります。