教師ありチューニング データを準備する

このドキュメントでは、Gemini Pro モデルの教師ありチューニング データセットを定義する方法について説明します。チューニングの仕組みの一般的な情報については、Gemini のモデル チューニングの概要をご覧ください。

サポートされているモデル

教師ありチューニングは、次の Gemini テキストモデルでサポートされています。

  • gemini-1.0-pro-002

テキストモデルで教師ありチューニングを使用するユースケース

基盤テキストモデルは、期待される出力やタスクがプロンプトで明確かつ簡潔に定義可能で、プロンプトが常に期待される出力を生成する場合に適しています。一般的な言語パターンから逸脱するニッチな、または特定の情報をモデルに学習させるときは、そのモデルのチューニングを検討してください。たとえば、モデルのチューニングを使用して、モデルに次のことを学習させられます。

  • 出力を生成するための特定の構造や形式
  • 場合に応じて出力を簡潔または詳細にするなどの、特定の動作
  • 入力のタイプに合わせてカスタマイズされた特定の出力

次の例は、プロンプトの指示だけではキャプチャが難しいユースケースです。

  • 分類: 期待されるレスポンスが特定の単語やフレーズ。

    モデルをチューニングすると、モデルが冗長なレスポンスを生成しないようにできます。

  • 要約: 要約は特定の形式に従っています。たとえば、チャットの概要で個人情報(PII)の削除が必要な場合があります。

    この形式では、話者の名前を #Person1#Person2 で置き換えていますが、記述しにくく、基盤モデルではこのようなレスポンスが自然に得られない可能性があります。

  • 抜粋された質問応答: 質問はコンテキストに関するもので、回答はコンテキストの部分文字列です。

    「最終氷期極大期」というレスポンスは、コンテキストから抜き出した特定のフレーズです。

  • チャット: ペルソナ、ロール、キャラクターに合わせて、モデルのレスポンスをカスタマイズする必要があります。

次のような状況でも、モデルをチューニングできます。

  • プロンプトが、希望する結果を十分に一貫して生成しない。
  • タスクが複雑すぎて、プロンプトで定義できない。たとえば、プロンプトで表現するのが難しい動作について、モデルに動作を再現させることができます。
  • タスクについての直感が複雑で、引き出すのは簡単だが、プロンプトとして定式化するのが難しい。
  • 少数ショットの例を削除して、コンテキストを短くしたい。

教師ありチューニングのデータセットを準備する

データセットは少なくとも 10 個のサンプルを含む必要があります。良好な結果を得るには、最低でも 100~500 個のサンプルを含めることをおすすめします。データセットに含まれているサンプルが多いほど、良い結果が得られます。

サンプル データセットについては、このページのサンプル データセットをご覧ください。

データセットのフォーマット

モデルのチューニング用データセットは、JSON Lines(JSONL)形式で、各行に 1 つのチューニング サンプルが含まれている必要があります。モデルをチューニングする前に、データセットを Cloud Storage バケットにアップロードする必要があります。

チューニング用データセットの各会話のサンプルは、必須の messages フィールドで構成されています。

  • messages フィールドは、ロールとコンテンツのペアの配列で構成されます。role フィールドはメッセージの作成者を表し、systemusermodel のいずれかに設定されます。system ロールは省略可能で、メッセージ リストの最初の要素にのみ現れます。user または model のロールが必要です。交互に繰り返すことができます。

  • content フィールドはメッセージの内容です。

  • 各サンプルで、contextmessages を合わせたトークンの最大長は 32,768 トークンです。また、model フィールドの各 content フィールドは 8,192 トークンを超えないようにしてください。

シングルターンの例

次の Gemini スキーマの詳細については、PaLM API から Gemini API にチューニングを移行するをご覧ください。

{"messages": [{"role": "system", "content": "You should classify the text into one of the following classes:[business, entertainment]"}{"role": "user","content": "Diversify your investment portfolio"},{"role": "model","content": "business"}]}
{"messages": [{"role": "system", "content": "You should classify the text into one of the following classes:[business, entertainment]"}{"role": "user","content": "Watch a live concert"},{"role": "model","content": "entertainment"}]}

マルチターンの例

次の Gemini スキーマの詳細については、PaLM API から Gemini API にチューニングを移行するをご覧ください。

{
  "messages": [
    {
      "role": "system",
      "content": "You are a pirate dog named Captain Barktholomew."
    },
    {
      "role": "user",
      "content": "Hi"
    },
    {
      "role": "model",
      "content": "Argh! What brings ye to my ship?"
    },
    {
      "role": "user",
      "content": "What's your name?"
    },
    {
      "role": "model",
      "content": "I be Captain Barktholomew, the most feared pirate dog of the seven seas."
    }
  ]
}

サンプル データセット

サンプル データセットを使用して、gemini-1.0-pro-002 モデルのチューニングの仕組みをテストできます。

これらのデータセットを使用するには、テキストモデルの教師ありチューニング ジョブの作成時に、該当するパラメータで URI を指定します。

例:

...
"training_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
...
"validation_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl",
...

本番環境データとの整合性を維持する

データセットに含まれるサンプルは、想定される本番環境のトラフィックと一致していなければなりません。データセットに特定の書式、キーワード、指示、情報が含まれている場合は、本番環境のデータも同じ形式にし、同じ指示を含んでいる必要があります。

たとえば、データセットのサンプルに "question:""context:" が含まれている場合は、本番環境のトラフィックにも、データセットの例と同じ順序で "question:""context:" が含まれるように整形する必要があります。コンテキストを除外すると、データセット内のサンプルに同じ質問が含まれていても、モデルはパターンを認識しません。

チューニング用データセットを Cloud Storage にアップロードする

チューニング ジョブを実行するには、1 つ以上のデータセットを Cloud Storage バケットにアップロードする必要があります。新しい Cloud Storage バケットを作成するか、既存のバケットを使用してデータセット ファイルを保存できます。バケットのリージョンは重要ではありませんが、モデルをチューニングする Google Cloud プロジェクトのバケットを使用することをおすすめします。

バケットの準備ができたら、データセット ファイルをバケットにアップロードします。

次のステップ