

# マルチモーダルファインチューニングのためのデータの準備
<a name="fine-tune-prepare-data-understanding"></a>

**重要**  
データセットの準備を開始する前に、教師ありファインチューニング (SFT) がユースケースに適したアプローチであることを確認してください。SFT は、モデルに新しい*動作*、レスポンス形式、推論パターンを教えます。モデルに新しい事実に関する知識を教えるものではありません。主な目的が、モデルが見ていないドメイン固有の事実、用語、または知識を導入することである場合は、推論時にそのコンテキストを提供するために検索拡張生成 (RAG) を検討してください。SFT、強化ファインチューニング (RFT)、および RAG の選択に関するガイダンスについては、「[SageMaker トレーニングジョブでの Amazon Nova のカスタマイズ](nova-model-training-job.md)」を参照してください。

次の内容は、理解モデルをファインチューニングするためにデータを準備する際のガイドラインおよび要件です。

1. ファインチューニングの最小データサイズはタスク (複雑か単純か) によって異なりますが、モデルに学習させるタスクごとに少なくとも 100 個のサンプルを用意することをお勧めします。

1. 最適な結果を得るには、トレーニングと推論の両方で最適化されたプロンプトをゼロショット設定で使用することをお勧めします。

1. トレーニングおよび検証のデータセットは JSONL ファイルである必要があります。各行はレコードに対応する JSON オブジェクトです。これらのファイル名は、英数字、アンダースコア、ハイフン、スラッシュ、ドットのみで構成されます。

1. 画像と動画の制約

   1. データセットに異なるメディアモダリティを含めることはできません。つまり、データセットは画像を含むテキストか、動画を含むテキストのいずれかである必要があります。

   1. 1 つのサンプル (メッセージの 1 つのレコード) に複数の画像を含めることができます

   1. 1 つのサンプル (メッセージに 1 つのレコード) には 1 つの動画しか含めることができません

1. `schemaVersion` は任意の文字列値にすることができます

1. (*オプション*) `system` ターンは、お客様が用意したカスタムシステムプロンプトにすることができます。

1. サポートされているロールは `user` および `assistant` です。

1. `messages` の最初のターンインは常に `"role": "user"` で始まる必要があります。最後のターンはボットのレスポンスであり、`"role": "assistant"` で示されます。

1. `image.source.s3Location.uri` および `video.source.s3Location.uri` は Amazon Bedrock からアクセスできる必要があります。

1.  Amazon Bedrock サービスロールは、Amazon S3 の画像ファイルにアクセスできる必要があります。アクセス権の付与に関する詳細については、「[モデルカスタマイズ用のサービスロールを作成する](https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-iam-role.html)」を参照してください。

1. 画像や動画には、データセットと同じ Amazon S3 バケットにある必要があります。例えば、データセットが `s3://amzn-s3-demo-bucket/train/train.jsonl` にある場合、画像や動画は `s3://amzn-s3-demo-bucket` にある必要があります。

1. `User:`、`Bot:`、`Assistant:`、`System:`、`<image>`、`<video>`、および `[EOS]` の用語は予約キーワードです。ユーザープロンプトまたはシステムプロンプトがこれらのキーワードのいずれかで始まる場合、あるいはそのプロンプトのどこかにこれらのキーワードが含まれている場合、データの問題によりトレーニングジョブは失敗します。ユースケースでこれらのキーワードを使用する必要がある場合は、トレーニングを続行できるように、同様の意味を持つ別のキーワードにそれらを置き換える必要があります。

**注記**  
ファインチューニングジョブを送信する前にデータセットを検証するには、GitHub で入手可能な[データセット検証スクリプト](https://github.com/aws-samples/amazon-nova-samples/tree/main/customization/bedrock-finetuning/understanding/dataset_validation)を使用できます。

## 効果的なトレーニング例の設計
<a name="designing-effective-training-examples"></a>

トレーニングデータは、モデルに表してもらいたい*動作*を示す必要があります。SFT はモデルに、知っておくべき*こと*ではなく、応答する*方法*を教えます。主に事実に関する知識を注入するためのトレーニング例を作成している場合 (例:「エラーコード E-45 とは？」で、回答は「E-45 はセンサーのタイムアウトを示します」)、RAG またはプロンプトエンジニアリングがファインチューニングなしで同じ結果を達成できるかどうかを検討してください。

ソースデータを会話形式に変換する場合は、次の原則に従います。

1. **実際のユーザークエリから開始します。**エンドユーザーが実稼働環境でモデルを実際にプロンプトする方法を反映するユーザーターンを書き込みます。実際の使用パターンを反映していない、人為的な質問や単純すぎる質問は避けてください。

1. **ゴールドスタンダードのアシスタントレスポンスを書き込みます。**各アシスタントターンは、モデルに生成してもらいたい理想的なレスポンスである必要があります。正しく、適切にフォーマットされ、すべての例でトーンと構造が一貫するようにします。

1. **システムプロンプトを戦略的に使用します。**出力形式、ペルソナ、ドメインコンテキストなどの永続的な指示をシステムターンに配置します。最適な結果を得るには、トレーニングと推論の両方で同じシステムプロンプトを使用します。

1. **サンプルごとに 1 つのスキルに焦点を当てた例であるようにします。**モデルが分類し、質問に回答し、要約する必要がある場合は、複数のスキルを単一のサンプルにまとめるのではなく、スキルごとに個別の例のセットを作成します。

1. **数量よりも品質を優先します。**数百の高品質で一貫した例が、通常、数千のノイズの多い例や矛盾する例よりも優れています。トレーニング前にデータの重複を削除して確認します。

### 一般的なデータ変換パターン
<a name="common-data-transformation-patterns"></a>

次のパターンは、一般的なエンタープライズデータ形式を効果的な SFT トレーニング例に変換する方法を示しています。

**パターン 1: 分類または検索するための構造化レコード**  
ソースデータが `issue`、`cause`、`resolution` などのフィールドを持つレコードのテーブルまたはデータベースである場合、関連する入力フィールドとターゲット出力フィールドとしてのアシスタントレスポンスを使用して、ユーザー質問として各レコードをフレーム化します。

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a technical support assistant. Given an issue description, identify the most likely root cause and recommended resolution."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "A user reports: 'Application crashes on startup after the latest update.' What is the likely cause and resolution?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Cause: Incompatible configuration file from the previous version.\nResolution: Delete the local configuration cache and restart the application to regenerate default settings."
        }
      ]
    }
  ]
}
```

**パターン 2: 構造化 Q&A への階層データまたは分類データ**  
ソースデータが製品カテゴリツリーや分類システムなどのコード階層または分類である場合は、モデルに階層のナビゲートを求める質問を生成します。分類コンテキストをシステムプロンプトまたはユーザーターンに含めます。

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a product catalog assistant. Answer questions about product categories and classifications accurately."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What top-level category does product code 'EL-4520' belong to, and what subcategories does it include?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Product code EL-4520 belongs to the Electronics category. It includes the subcategories: Audio Equipment, Portable Speakers, and Wireless Accessories."
        }
      ]
    }
  ]
}
```

**パターン 3: 手順ドキュメントから指示ダイアログへ**  
ソースデータが標準運用手順、ランブック、またはステップバイステップガイドで構成されている場合は、手順をタスク指向の質問に変換します。ユーザーはタスクの実行方法を尋ね、アシスタントは一貫した形式でステップを提供します。

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are an IT operations assistant. Provide step-by-step instructions based on approved runbooks and standard operating procedures."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "How do I reset a user's multi-factor authentication when they have lost access to their device?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Follow these steps to reset a user's multi-factor authentication:\n1. Verify the user's identity using the approved verification procedure.\n2. Disable the existing MFA configuration in the identity management console.\n3. Generate a new temporary access code and send it to the user's verified email.\n4. Instruct the user to log in with the temporary code and re-enroll their new device.\n5. Confirm the new MFA device is working by requesting a test authentication.\n6. Document the reset in the support ticket."
        }
      ]
    }
  ]
}
```

**注記**  
パターン 1 と 2 で、事実の内容 (コード、カテゴリ、解決策など) がモデルの事前トレーニングデータにまだない場合は、SFT だけに頼って記憶するのではなく、RAG を使用して推論時にこの情報を提供することを検討してください。SFT は応答形式と推論パターンをモデルに教えるのに最も効果的ですが、RAG は事実に基づくグラウンディングを処理します。

**Topics**
+ [効果的なトレーニング例の設計](#designing-effective-training-examples)
+ [データセット形式の例](#customize-fine-tune-examples)
+ [データセットの制約](#custom-fine-tune-constraints)

## データセット形式の例
<a name="customize-fine-tune-examples"></a>

次のデータセット形式の例をガイドとして参照していただけます。

### テキストのみのカスタムファインチューニング形式
<a name="example4"></a>

次の例は、テキストのみでのカスタムファインチューニング用です。

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a digital assistant with a friendly personality"
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What is the capital of Mars?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Mars does not have a capital. Perhaps it will one day."
        }
      ]
    }
  ]
}
```

### 単一画像のカスタムファインチューニング形式
<a name="example1"></a>

次の例は、テキストおよび単一画像のカスタムファインチューニング用です。

```
// train.jsonl{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [{
        "text": "You are a smart assistant that answers questions respectfully"
    }],
    "messages": [{
            "role": "user",
            "content": [{
                    "text": "What does the text in this image say?"
                },
                {
                    "image": {
                        "format": "png",
                        "source": {
                            "s3Location": {
                                "uri": "s3://{{your-bucket/your-path/your-image.png}}",
                                "bucketOwner": "{{your-aws-account-id}}"
                            }
                        }
                    }
                }
            ]
        },
        {
            "role": "assistant",
            "content": [{
                "text": "The text in the attached image says 'LOL'."
            }]
        }
    ]
}
```

### 動画のカスタムファインチューニング形式
<a name="example3"></a>

次の例は、テキストおよび動画のカスタムファインチューニング用です。

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [{
        "text": "You are a helpful assistant designed to answer questions crisply and to the point"
    }],
    "messages": [{
            "role": "user",
            "content": [{
                    "text": "How many white items are visible in this video?"
                },
                {
                    "video": {
                        "format": "mp4",
                        "source": {
                            "s3Location": {
                                "uri": "s3://{{your-bucket/your-path/your-video.mp4}}",
                                "bucketOwner": "{{your-aws-account-id}}"
                            }
                        }
                    }
                }
            ]
        },
        {
            "role": "assistant",
            "content": [{
                "text": "There are at least eight visible items that are white"
            }]
        }
    ]
}
```

## データセットの制約
<a name="custom-fine-tune-constraints"></a>

Amazon Nova により、理解モデルのカスタマイズには次の制約が適用されます。


| モデル | 最小サンプル | 最大サンプル | コンテキストの長さ | 
| --- |--- |--- |--- |
| Amazon Nova Micro | 8 | 20k | 32k | 
| Amazon Nova Lite | 8 | 20k | 32k | 
| Amazon Nova Pro | 8 | 20k | 32k | 


**画像と動画の制約**  

|  |  | 
| --- |--- |
| 最大画像 | 10/サンプル | 
| 画像ファイルの最大サイズ | 10 MB | 
| 最大動画数 | 1/サンプル | 
| 動画の最大長/期間 | 90 秒 | 
| 動画ファイルの最大サイズ | 50 MB | 

**サポートされているメディア形式**
+ 画像 – `png`、`jpeg`、`gif`、`webp`
+ 動画 – `mov`、`mkv`、`mp4`、`webm`