ファインチューニング:OpenAIモデル + あなたのConfluenceデータ

Built for Speed: ~10ms Latency, Even Under Load
Blazingly fast way to build, track and deploy your models!
- Handles 350+ RPS on just 1 vCPU — no tuning needed
- Production-ready with full enterprise support
ChatGPTがiPhoneだとすれば、AppStoreはまだ構築されていません。そしてそれは、ChatGPTの上に構築される垂直統合型アプリケーションのスイートとなるでしょう。あらゆる業界、あらゆる企業、そしてあらゆる個人が、大小さまざまな形でこれらのアプリケーションを構築することになるでしょう。ヘルスケアや製造業に特化したChatGPTの構築から、マーケティング用のドメイン固有のメール作成、社内ナレッジベースからの企業固有の質問への回答、さらには「ジョンの住所はどこか」「義母の誕生日はいつか」といった質問に答えるためのパーソナル検索エンジンの構築に至るまで、多岐にわたります。以前のブログ記事で、いくつかの例を挙げました。
なぜChatGPTだけでは、これらの垂直統合型アプリケーションにとって不十分なのでしょうか?
これを理解するためには、クリアウェブとディープウェブの違いを理解することが重要です。
- クリアウェブ: 検索エンジンによってインデックス化された、公開されているウェブページ。例:Wikipedia、書籍、ソーシャルメディアの投稿など。
- ディープウェブ: 認証システムによって保護されているインターネットの一部。例:あなたのメールやSaaSプラットフォーム。これはウェブ全体の96%を占めます。
ChatGPTのようなモデルは膨大なデータセットで学習されていますが、そのデータはすべてクリアウェブ上で利用可能なものです。そのため、メールやプライベートな文書など、ディープウェブ上の情報に依存する質問をしても、ChatGPTは答えることができません。しかし、ChatGPTのようなモデルは、膨大なクリアウェブのデータセットから学習する過程で、言語と意味に関する非常に高度な知能を構築しているため、特定のタスクのために少量のデータから新しい情報を学習することがはるかに容易になります。
ここでファインチューニングの出番です
ファインチューニングは、ChatGPTのような事前学習済みモデルの知識と学習を活用し、より小規模なタスク固有のデータセットでモデルをトレーニングすることで、新しいタスクにおけるモデルのパフォーマンスを向上させる強力な手法です。例えば、Confluenceに保存されている社内文書のための質問応答システムを構築したいとします。Confluenceからすべてのテキストコンテンツを渡し、それらを使ってGPTモデルをファインチューニングすることができます。
簡単そうに聞こえます。なぜ皆がやらないのでしょうか?
OpenAIはファインチューニングAPIを通じて多くの障壁を低減しましたが、それでも、さまざまな側面でかなりの検討、計画、労力が必要です。
データ準備
モデルをファインチューニングするために必要なデータは、特定のプロンプトと完了のペア形式である必要があります。
{“prompt”: <prompt-text>, “completion”: <ideal generated text>}
考慮すべきいくつかのポイント:
- 会社のConfluenceドキュメントのような任意のドキュメントを、上記の形式の高品質な例に変換するのは容易ではありません。
- 最低でも数百のプロンプトが必要であり、これには人間の労力と専門知識が求められます。
- プロンプトと補完の開始と終了を示す、テキストには現れない注意深い区切り文字が必要です。また、後で入力プロンプトが同じ区切り文字を使用するように確認する必要があります。
- 例の数を増やすことで、モデルのパフォーマンスが向上します。
- 補完が始まる前にスペースを追加するような単純なことでも、パフォーマンスを向上させることができます。
モデルの選択
OpenAIにはファインチューニング可能な複数のモデルがあり、それぞれに考慮すべきトレードオフがあります。
- Ada:より小さく、より高速なモデルで、ファインチューニングが容易であり、分類、言語生成、質問応答など、多くのタスクでうまく機能します。パラメータが少ないため、他のモデルよりもパフォーマンスは低く、精度が損なわれる可能性があります。
- Curie:Adaよりも大きく強力で、汎用性も高いモデルです。パラメータ数が多いため、小規模なデータセットでのファインチューニングは難しくなります。
- Babbage:法律や医療のような専門知識を必要とするNLPタスク向けに設計されており、非常にうまくファインチューニングできます。汎用性はそれほど高くなく、大規模なデータセットやより複雑なタスクでのファインチューニングには適していません。
- Davinci:最大かつ最も強力な汎用モデルです。性能の低いハードウェアでのトレーニングは非常に困難であり、複雑なNLPタスクに使用すべきです。
注:以前にファインチューニングされたモデルを段階的にファインチューニングすることも可能です。APIの変更により期間にいくつかの制限があり、モデルは2022年4月21日以降にファインチューニングされている必要があります。
ハイパーパラメータの選択
OpenAIのファインチューニングAPIをデフォルトパラメータで使用してみたところ、いくつかのタスクでは非常にうまく機能しましたが、ハイパーパラメータを調整することで最大40%の改善を得ることができました。
- 学習率乗数: 最終的なbatch_sizeに応じて、デフォルトで0.05、0.1、または0.2になります。ファインチューニングの学習率は、事前学習に使用された元の学習率にこの乗数を掛けたものです。学習率は、トレーニング中にモデルが重みをどれだけ速く調整するかを決定します。学習率が高すぎると、モデルが最適ではない解に収束する可能性があります。一方、学習率が低すぎると、モデルの収束が遅すぎたり、局所最適解に陥ったりする可能性があります。OpenAIは、より大きなバッチサイズにはより大きな学習率を使用することを推奨していますが、通常は0.02から0.2の範囲で運用されます。
- バッチサイズ: デフォルトでは、トレーニングセット内の例の数の約0.2%(上限256)です。バッチサイズは、各トレーニングイテレーションで処理される例の数を決定します。バッチサイズが大きいほどトレーニング時間は短縮されますが、モデルが過学習したり、メモリ使用量が増加したりする可能性があります。一般的には、過度なメモリ使用を引き起こさない範囲で可能な限り大きなバッチサイズを使用することが推奨されます。
- エポック数: デフォルトでは4です。エポック数は、モデルがデータセット全体でトレーニングされる回数を決定します。エポック数が少なすぎると未学習(アンダーフィッティング)につながり、多すぎると過学習(オーバーフィッティング)につながる可能性があります。一般的には、バリデーションセットでのモデルのパフォーマンスを監視し、パフォーマンスが向上しなくなった時点でトレーニングを停止することが推奨されます。
- プロンプト損失重み: デフォルトでは0.01です。プロンプトトークンの損失に使用する重みです。これは、モデルがプロンプトの生成をどの程度学習しようとするかを制御し(常に重み1.0を持つ補完と比較して)、補完が短い場合にトレーニングに安定化効果をもたらすことができます。短いプロンプトの場合、OpenAIはこの値を増やすことを推奨しており、長いプロンプトには小さい重みが最適です。
- モデル: デフォルトではcurieです。上記で説明したモデル選択表もハイパーパラメータの一つですが、このプロセスにおいて出発点としていかに重要であるかを考えると、特筆すべきだと感じました。
費用について
ファインチューニングの費用は、選択するパラメータによって大きく異なるため、しっかりと理解しておくことが非常に重要です。
📌
100万トークンあたり:
- Ada: $0.4
- Babbage: $0.6
- Curie: $3
- Davinci: $30.
- 1トークンはおよそ4文字、または0.75単語に相当します。
- DavinciはAdaのほぼ100倍高価です。
- CurieはAdaの10倍高価で、デフォルトモデルです。
- 参考までに、Wikipediaにはおよそ50億トークンが含まれているため、curieをファインチューニングすると、なんと15,000ドルもの費用がかかります。これらのモデルはすでにWikipediaで事前学習されているため、これはあくまで学術的な話です。無駄な出費は避けてください。
- 学習トークン数は、トレーニングエポック数にも依存します。基本的に、総学習トークン数 = ファイル内のトークン数 × エポック数となります。
📌
ファインチューニングされたモデルの使用は、事前学習済みモデルに比べて大幅に高価です(約5倍)。
100万トークンの場合、
- Ada: $1.6 対 $0.4
- Babbage: $2.4 対 $0.5
- Curie: $12 対 $2
- DaVinci: $120 対 $20
モデルを使用する際、bestofやnといったパラメータもコストに影響します。これは、1つのプロンプトに対して複数の補完を生成することになるためです。コストを節約するにはmax_response_lengthの使用を検討するか、best_ofおよびnパラメータの使用を減らしてください。
ケーススタディ。Confluenceドキュメントでのファインチューニング
私たち自身のConfluenceデータセット向けにファインチューニングモデルを構築することは、簡単ではありませんでした。以下の4段階のプロセスが必要でした。

データ取得
ConfluenceのAPIを通じてすべてのデータを読み取る方法を理解するのに、少し手間がかかりました。Confluenceにはテーブル、見出し、小見出しを含む豊富なデータがあり、それらを使いやすいようにシンプルなテキストに変換する必要があったためです。また、権限と適切なアクセスレベルの管理も簡単ではありませんでした。最終的に、URL、ユーザー名、APIキーを送信するだけでデータを取得できる非常にシンプルなフォームを作成することができました。
データ前処理
ここが最も難しい部分でした。ここでは、複数のアプローチを試しました。
- 文のランダム分割: プロンプトと補完の単語数に基づいて
- 正規表現: 「and」、「but」、「however」などの単語に基づいて文を分離する。
- ChatGPT: ChatGPTにコンテキストを与え、質問を生成させる。

最終的に、ほとんどのペアを#3から選択しましたが、上記の#1と#2からもランダムなサンプルをいくつか含めました。私たちのデータセットでは、プロンプトの平均長が17語、応答の平均長が133語で、1ペアあたり合計150語となる、50,000組以上のプロンプトと補完のペアを生成しました。理想的には、このステップではさらに多くの実験が必要となるでしょう。

モデルのファインチューニング
さまざまなモデルとハイパーパラメータを試した結果、CurieはAdaやBabbageよりも優れたパフォーマンスを発揮する傾向があることがわかりましたが、コストとのトレードオフを考えるとAdaで十分だと感じました。Davinciは試しませんでした。学習率を調整し、0.05に設定しました。モデルは6エポック実行しました。Curieを1回実行するのに約30ドル、Adaは約4ドルかかりました。全体として、多くの実験を通じて、ファインチューニングにOpenAIクレジットで約400ドルかかった可能性があります。いくつかの失敗した実行もありました。

テスト
ファインチューニングされたモデルが、社内データセット関連の質問において、元のモデルよりも明らかに優れたパフォーマンスを発揮することに気づきました。チームに約100個のプロンプトを試してもらい、手動で評価しました。これは科学的ではありませんが、このシンプルなユースケースには有効でした。興味深いことに、一般的なクエリに対しては、ファインチューニングされたモデルが元のモデルよりもパフォーマンスが悪いケースがあることにも気づきました。ここで何が起こっているのか、まだデバッグする必要があります。

これは楽しい試みでした。今後も他のデータセットでのファインチューニング実験に取り組んでいきます。
📌
特定のデータセットをご希望の場合、またはこのアプリをConfluenceで利用できるようにしたい場合は、nikunj@truefoundry.comまでご連絡ください。
TrueFoundry は、Kubernetes上で動作するMLデプロイメントPaaSです。開発者のワークフローを加速させ、モデルのテストとデプロイにおいて完全な柔軟性を提供しつつ、インフラチームには完全なセキュリティと制御を保証します。私たちのプラットフォームを通じて、機械学習チームは デプロイと監視 モデルを15分で、100%の信頼性、スケーラビリティ、そして数秒でのロールバック機能を提供し、コストを削減し、モデルをより迅速に本番環境にリリースできるようにします。これにより、真のビジネス価値の実現を可能にします。
TrueFoundry AI Gateway delivers ~3–4 ms latency, handles 350+ RPS on 1 vCPU, scales horizontally with ease, and is production-ready, while LiteLLM suffers from high latency, struggles beyond moderate RPS, lacks built-in scaling, and is best for light or prototype workloads.
The fastest way to build, govern and scale your AI
















.webp)




.png)








.webp)
.webp)








