Gemini API でファインチューニングする

少数ショット プロンプトなどのプロンプト設計戦略では、必要な結果が得られない場合があります。ファインチューニングは、特定のタスクに対するモデルのパフォーマンスを改善するプロセスです。また、指示が不十分で、目的の出力を示す一連のサンプルがある場合に、モデルが特定の出力要件を遵守できるようにするプロセスです。

このページでは、Gemini API テキスト サービスの背後にあるテキストモデルをファインチューニングする方法について説明します。

ファインチューニングの仕組み

ファインチューニングの目標は、特定のタスクに対するモデルの性能をさらに向上させることです。ファインチューニングは、タスクの例を多数含むトレーニング データセットをモデルに提供することで機能します。ニッチなタスクでは、少数の例でモデルをチューニングすることで、モデルのパフォーマンスを大幅に改善できます。

トレーニング データは、プロンプト入力と予想されるレスポンス出力を含むサンプルとして構造化する必要があります。Google AI Studio でサンプルデータを直接使用してモデルをチューニングすることもできます。目標は、目的の動作やタスクを模倣するようモデルに学習させるため、その動作やタスクを示す多くの例を与えます。

チューニング ジョブを実行すると、モデルは、必要なタスクの実行や、必要な動作の学習に必要な情報をエンコードするのに役立つ追加のパラメータを学習します。これらのパラメータは推論時に使用できます。チューニング ジョブの出力は新しいモデルです。これは実質的に、新しく学習したパラメータと元のモデルを組み合わせたものです。

データセットを準備する

ファインチューニングを開始する前に、モデルのチューニングに使用するデータセットが必要です。最適なパフォーマンスを得るには、データセットのサンプルは、高品質で多様なサンプルで、実際の入力と出力を表す必要があります。

フォーマット

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

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

データセット内の各サンプルにプロンプトやプリアンブルを追加することで、チューニング済みモデルのパフォーマンスを向上させることができます。プロンプトやプリアンブルがデータセットに含まれている場合は、推論時にチューニング済みモデルへのプロンプトにも含める必要があります。

トレーニング データサイズ

わずか 20 個のサンプルでモデルをファインチューニングできます。データを追加すると、一般にレスポンスの品質が向上します。アプリケーションに応じて、100 ~ 500 個のサンプルをターゲットにする必要があります。次の表に、さまざまな一般的なタスク用にテキストモデルをファインチューニングする際の推奨データセット サイズを示します。

タスク データセットのサンプル数
分類 100 以上
要約 100 ~ 500 以上
ドキュメント検索 100 以上

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

データは、API を使用してインラインで渡されるか、Google AI Studio にアップロードされたファイルを介して渡されます。

[インポート] ボタンをクリックし、ダイアログの指示に従ってファイルからデータをインポートするか、チューニング データセットとしてインポートするサンプルを含む構造化プロンプトを選択します。

クライアント ライブラリ

クライアント ライブラリを使用するには、createTunedModel 呼び出しでデータファイルを指定します。ファイルサイズの上限は 4 MB です。開始するには、Python でのファインチューニングのクイックスタートをご覧ください。

cURL

cURL を使用して REST API を呼び出すには、JSON 形式のトレーニング サンプルを training_data 引数に渡します。開始するには、cURL を使用したチューニングのクイックスタートをご覧ください。

高度なチューニング設定

チューニング ジョブを作成するときに、次の詳細設定を指定できます。

  • エポック: 各サンプルが 1 回処理されるよう、トレーニング セット全体に対する完全なトレーニング パス。
  • バッチサイズ: 1 回のトレーニング イテレーションで使用されるサンプルのセット。バッチサイズにより、バッチのサンプル数が決まります。
  • 学習率: 各イテレーションでモデル パラメータを調整する強度をアルゴリズムに伝える浮動小数点数。たとえば、学習率を 0.3 にすると、学習率 0.1 の 3 倍の力とバイアスで重みとバイアスが調整されます。学習率が高い場合と低い場合には独自のトレードオフがあるため、ユースケースに応じて調整する必要があります。
  • 学習率の乗数: レートの乗数は、モデルの元の学習率を変更します。値が 1 の場合、モデルの元の学習率が使用されます。値が 1 より大きいと学習率は高くなり、1 ~ 0 の値は学習率が低下します。

次の表に、基盤モデルをファインチューニングするための推奨構成を示します。

ハイパーパラメータ デフォルト値 推奨される調整
エポック 5

5 エポックより前に損失が横ばいし始めた場合は、小さい値を使用します。

損失が収束しつつあり、横ばい状態でないと思われる場合は、より大きな値を使用します。

バッチサイズ 4
学習率 0.001 データセットが小さい場合は、小さい値を使用します。

損失曲線は、各エポックの後にトレーニング サンプルでモデルの予測が理想的な予測からどの程度逸脱しているかを示します。理想的には、曲線が横ばいになる直前に、曲線の最も低いポイントでトレーニングを停止します。たとえば、下のグラフはエポック 4 ~ 6 付近で損失曲線が横ばいになっていることを示しています。つまり、Epoch パラメータを 4 に設定しても、同じパフォーマンスが得られます。

モデルの損失曲線を示す折れ線グラフこの線は、第 1 エポックと第 2 エポックの間で急増し、その後急激に 0 近くまで減少し、3 エポック後に平らになります。

チューニング ジョブのステータスを確認する

チューニング ジョブのステータスは、Google AI Studio の [マイライブラリ] タブで確認できます。また、Gemini API のチューニング済みモデルの metadata プロパティを使用して確認することもできます。

エラーのトラブルシューティングを行う

このセクションでは、チューニング済みモデルの作成中に発生する可能性のあるエラーを解決する方法のヒントについて説明します。

認証

API とクライアント ライブラリを使用してチューニングするには、ユーザー認証が必要です。API キーだけでは不十分です。'PermissionDenied: 403 Request had insufficient authentication scopes' エラーが発生した場合は、ユーザー認証を設定する必要があります。

Python 用の OAuth 認証情報を構成するには、OAuth 設定チュートリアルをご覧ください。

キャンセルされたモデル

ファインチューニング ジョブは、ジョブが完了する前であればいつでもキャンセルできます。ただし、キャンセルされたモデルの推論パフォーマンスは、特にトレーニングの早い段階でチューニング ジョブがキャンセルされた場合、予測できません。前のエポックでトレーニングを停止するためにキャンセルした場合は、新しいチューニング ジョブを作成し、エポックの値を小さくする必要があります。

次のステップ