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

少数ショット プロンプトなどのプロンプト設計戦略では、必要な結果が得られない場合があります。ファインチューニングは、指示が不十分な場合に、目的の出力を示す一連のサンプルを使用して、特定のタスクに対するモデルのパフォーマンスを向上させるか、モデルを特定の出力要件に準拠させるプロセスです。

このページでは、Gemini API テキスト サービスの背後にあるテキストモデルのファインチューニングの概要について説明します。チューニングを開始する準備ができたら、ファインチューニング チュートリアルをお試しください。特定のユースケースに合わせて LLM をカスタマイズする方法について詳しくは、ML クラッシュ コースLLM: ファインチューニング、蒸留、プロンプト エンジニアリングをご覧ください。

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

ファインチューニングの目的は、特定のタスクに対するモデルのパフォーマンスをさらに改善することです。ファインチューニングは、タスクの例を多数含むトレーニング データセットをモデルに提供することで行われます。ニッチなタスクでは、少数の例でモデルをチューニングすることで、モデルのパフォーマンスを大幅に改善できます。この種のモデル チューニングは、他の種類のファインチューニングと区別するために、教師ありファインチューニングと呼ばれることもあります。

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

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

データセットを準備する

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

形式

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

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

別の例として、シーケンス内の次の数値を生成するアプリケーションの Python トレーニング データは次のとおりです。

training_data = [
  {"text_input": "1", "output": "2"},
  {"text_input": "3", "output": "4"},
  {"text_input": "-3", "output": "-2"},
  {"text_input": "twenty two", "output": "twenty three"},
  {"text_input": "two hundred", "output": "two hundred one"},
  {"text_input": "ninety nine", "output": "one hundred"},
  {"text_input": "8", "output": "9"},
  {"text_input": "-98", "output": "-97"},
  {"text_input": "1,000", "output": "1,001"},
  {"text_input": "10,100,000", "output": "10,100,001"},
  {"text_input": "thirteen", "output": "fourteen"},
  {"text_input": "eighty", "output": "eighty one"},
  {"text_input": "one", "output": "two"},
  {"text_input": "three", "output": "four"},
  {"text_input": "seven", "output": "eight"},
]

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

制限事項

注: Gemini 1.5 Flash のファインチューニング データセットには次の制限があります。

  • 1 つの例あたりの最大入力サイズは 40,000 文字です。
  • 1 つの例あたりの出力の最大サイズは 5,000 文字です。

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

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

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

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

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

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

cURL を使用して REST API を呼び出すには、training_data 引数に JSON 形式のトレーニング例を指定します。開始するには、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 キー(推奨)または OAuth 認証情報を使用して設定できます。API キーの設定については、API キーを設定するをご覧ください。

'PermissionDenied: 403 Request had insufficient authentication scopes' エラーが表示された場合は、OAuth 認証情報を使用してユーザー認証を設定する必要があります。Python の OAuth 認証情報を構成するには、OAuth の設定に関するチュートリアルをご覧ください。

キャンセルされたモデル

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

チューニング済みモデルの制限事項

注: チューニング済みモデルには次の制限があります。

  • チューニング済みの Gemini 1.5 Flash モデルの入力上限は 40,000 文字です。
  • JSON モードは、チューニング済みモデルではサポートされていません。
  • チューニング済みモデルではシステム指示はサポートされていません。
  • テキスト入力のみがサポートされています。

次のステップ

ファインチューニングのチュートリアルを開始する: