著者 | 崔昊 レビュー | Chonglou 一般的なモデルは優れていますが、技術者は、独自の大規模なモデルを取得するために微調整とトレーニングを行うことにさらに熱心です。最近、GPT-3.5 Turbo では、開発者や企業が特定のアプリケーション シナリオのニーズに合わせてモデルを正確にカスタマイズできる新しい微調整機能がリリースされました。 GPT を微調整すると、モデルの制御性、出力形式の信頼性、トーンの一貫性が向上するだけでなく、プロンプトの長さを短縮できるため、API 呼び出しが高速化され、コストが削減されます。 この記事では、大規模モデルを微調整する魅力を体験し、GPT-3.5 Turbo を理解し、天気の調整モデルを実装する方法を説明します。 1. GPT-3.5 Turbo 微調整機能の利点は何ですか?業界をリードする大規模言語モデルである GPT-3.5 Turbo は最近、魅力的な微調整機能をリリースしました。この機能により、開発者や企業は特定のユースケースに合わせてモデルをカスタマイズできるようになり、パフォーマンスが向上し、ユーザー エクスペリエンスが向上します。 まず、微調整によりモデルの「制御性」が大幅に向上しました。モデルは、より簡潔な出力を生成する場合でも、特定の言語で応答する場合でも、ユーザーの指示にさらに正確に従うことができるようになりました。 2 番目に、微調整によってモデルの出力形式を改善することもできます。開発者は、ユーザー入力を高品質の JSON スニペットに変換して、他のシステムとの統合を完了できます。 さらに、微調整によりモデル出力の「トーン」も強化され、企業のトーンとの一貫性が高まり、企業ブランドの認知度と一貫性が向上します。 2. コストと価格を微調整するGPT-3.5 Turbo バージョンの微調整を紹介する前に、まずセキュリティと価格の問題についてお話ししたいと思います。 微調整は複雑ですが重要なプロセスです。安全の確保が最優先です。 OpenAIの公式説明によると、トレーニングデータは監査APIとGPT-4監査システムを通じてスクリーニングされ、安全基準への準拠が確保されるとのことです。 コスト面では、微調整はトレーニングと使用の 2 つの段階に分かれています。トレーニングコストはトークンの数によって計算され、1,000 トークンあたりの価格は 0.008 ドルです。使用コストもトークンごとに計算され、入力と出力はそれぞれ 1,000 トークンあたり 0.012 ドルと 0.016 ドルになります。 100,000 トークンと 3 つのトレーニング エポックを例にとると、推定微調整コストは 2.40 ドルになります。これにより、予算が限られている開発者や企業に明確なコスト予測が提供されます。 全体的に、微調整によりパフォーマンスとセキュリティのバランスが保たれ、コスト構造が明確になります。これらの要素は、モデルを微調整する際に考慮すべき重要な要素です。 3. GPT3.5を微調整する方がコスト効率が良い理由モデルの微調整の目的は、パフォーマンスと効率を向上させることです。微調整により、プロンプトよりも高品質の結果を生成できるようになり、プロンプトにさらに多くの例を収容できるようになり、いわゆる「少量学習」の効果が向上しました。 モデルを微調整すると、プロンプトを短くすることができ、トークンとコストを節約できます。これは、リクエストの待ち時間が少なくなり、応答が速くなることも意味します。 微調整には、トレーニング データの準備とアップロード、新しい微調整モデルのトレーニング、モデルの実際の使用など、いくつかの重要な手順が含まれます。具体的な価格情報は OpenAI の価格ページでご覧いただけます。 現在、推奨される微調整モデルは gpt-3.5-turbo-0613 ですが、babbage-002 や davinci-002 などの他のモデルもサポートされています。 OpenAI は今年後半に GPT-4 の微調整を可能にする予定です。 4. 微調整するタイミングGPT モデルを微調整すると、確かに特定のタスクでのパフォーマンスが向上しますが、これは好ましい選択肢ではありません。微調整を行う前に、開発者はヒントエンジニアリング、ヒントリンク、および関数呼び出しによってモデルのパフォーマンスを最適化できます。これらの戦略では、微調整よりもフィードバック ループが高速化されるため、開発者はデータセットを作成したりトレーニング ジョブを実行したりすることなく、迅速に反復して改善することができます。実際、最初はパフォーマンスが悪かったタスクの多くは、より正確なヒントによって改善できるため、微調整の必要がなくなります。 微調整が必要な場合でも、初期のチップエンジニアリング作業は無駄になりません。実際、適切なヒントが使用されたデータでは、最良の微調整結果が見られることがよくあります。つまり、より安価で効率的な方法でモデルを最適化し、効果が良くない場合はモデルの微調整を検討します。結局のところ、微調整にはより多くの時間と費用がかかります。 微調整は主に、スタイル、トーン、フォーマット、特定のタスクに関してモデルのパフォーマンスを向上させるために使用されます。同時に、特に GPT-4 から gpt-3.5-turbo に移行する場合、コストとレイテンシを効果的に削減することもできます。 では、早速 GPT-3.5 Trubo モデルの微調整を始めましょう。 5.データセットを準備するGPT-3.5 Turbo モデルを天気予報機に調整したいのですが、この予報機はジョークを言って天気を予測します。最初のステップは、いくつかのデータセットを準備することです。 データセット内の各例では、チャット補完 API と同じ形式の会話が必要です。具体的には、各メッセージには役割、コンテンツ、オプションの名前があります。 以下は公式サンプルです。 JSON オブジェクトは、GPT モデルを微調整するために使用されるトレーニング データの例です。各 JSON オブジェクトは会話インスタンスを表し、次の 3 つの部分で構成されます。 (1)システムメッセージ:チャットボットの基本的な特性を定義します(ここでは「Marv」という名前のロボットです)。この例では、システム メッセージは、Marv が正確な情報を提供するが皮肉なチャットボットであることを識別します。 (2)ユーザーメッセージ:これはユーザーがチャットボットに尋ねる質問またはコマンドです。 (3)アシスタントメッセージ:これはユーザーのメッセージに対するチャットボットの応答です。この例では、Marv は皮肉なチャットボットなので、その応答は正確ではあるものの皮肉なものでした。 具体的には、各メッセージには次の 2 つのフィールドがあります。 role: メッセージの送信者の役割を指定します。システム、ユーザー、またはアシスタントのいずれかになります。 content: メッセージの内容を含むフィールド。 モデルを微調整するには、少なくとも 10 個の例を提供する必要があります。 50 ~ 100 個のトレーニング例を準備できる場合は、gpt-3.5-turbo を微調整すると顕著な改善が見られます。公式の推奨事項としては、微調整用に 50 個の例を用意し、微調整の結果を観察してから改善を図ることが推奨されています。各トレーニング例は 4096 トークンに制限されていることに注意してください。この長さより長い例は、トレーニング時に最初の 4096 トークンに切り捨てられます。トレーニング例全体がコンテキストに適合していることを確認するには、メッセージ コンテンツ内のトークンの合計数が 4000 未満であることを確認することを検討してください。現在、各ファイルのサイズは 50 MB に制限されています。 微調整ジョブのコストを見積もるには、次の式を使用できます。3 エポックでトレーニングされた 100,000 トークンのトレーニング ファイルの場合、推定コストは約 2.40 ドルになります。 上記の状況を理解した上で、独自のデータセットを作成しましょう。 GPT-3.5 Turbo をジョークを言うことができる天気予報アシスタントにしたいと考えています。そして、さまざまな質疑応答の方法を通じて、天気に関する人間の質問に「ユーモラスに」答える方法を教えます。 6. データ形式を確認する先ほどデータセットを作成しました。いくつか注意すべき点はありますが、全体のプロセスは非常に便利です。トレーニング セットが大きく、大量のデータを処理する必要がある場合は、注意が必要です。結局のところ、すべてのチューニングには実際のコストがかかります。そのため、データ量が多い場合は、データ形式を確認することをお勧めします。潜在的なエラーを見つけたり、トークン数を表示したり、ジョブを微調整するコストを見積もったりするために使用できる簡単な Python スクリプトを作成しました。このチェックは必須ではなく、自由に選択できます。 次のコードは、まずチャット メッセージを含むデータセットを読み込み、それに対して予備チェックを実行します。次に、データセットを反復処理して、各例が適切に構成されているかどうかを確認し、書式設定エラーがあればログに記録します。最後に、TikToken ライブラリを使用してデータセット内のトークンの数をカウントし、例の数、メッセージの数、会話の長さ、アシスタント メッセージの長さの分布などの統計情報を出力します。さらに、トレーニングの推定コストとエポック数を計算します。 import openai: このコード行は、OpenAI の Python ライブラリをインポートして、その API 機能を使用できるようにします。 openai.File.create(...): この関数は、OpenAI サーバー上に新しいファイルを作成するために使用されます。アップロードされたファイルは、その後処理または操作できます (この場合は、モデルを微調整するため)。 file=open("gpt-3.5-turbo-ft-file.jsonl", "rb"): ここで、file パラメータはアップロードするファイルを指定します。関数 open("gpt-3.5-turbo-ft-file.jsonl", "rb") は、gpt-3.5-turbo-ft-file.jsonl という名前のファイルをバイナリ読み取りモード ("rb") で開きます。 Purpose='fine-tune': 目的パラメータは、ファイルのアップロードの目的を示します。ここでの目標は、モデルを「微調整」することです。 上記のコードを実行すると、次の結果が得られます。 返された結果を一つずつ説明しましょう。 "object": "file": この JSON オブジェクトが "ファイル" を表すことを示します。 "id": "file-F8Gh75F2A5R0gWlq5KADZdZG": これはファイルの一意の識別子 (ID) です。これは、後続のチューニング、つまり、このアップロードされたファイルのチューニングで使用されます。 "purpose": "fine-tune": これは、ファイルの目的がモデルを微調整することであることを示します。これは、openai.File.create() 関数で設定したpurpose='fine-tune'と一致します。 "filename": "file": アップロードされたファイルの名前です。この例では、単に「file」という名前が付けられています。 "bytes": 2545": これは、ファイルのサイズが 2545 バイトであることを意味します。 "created_at": 1692886089": これは、ファイルが作成 (またはアップロード) されたときの Unix タイムスタンプです。 "status": "uploaded": これは、ファイルの現在のステータスが「アップロード済み」であることを示します。 "status_details": null: ファイルのステータスに関する追加の詳細を提供します。この例では、追加のステータス詳細は提供されていません (null)。 7. チューニングを実行するファイルをアップロードした後、チューニングを実行するコードは次のようになります。 コードは比較的シンプルで、理解しやすいようです。 training_file="file-F8Gh75F2A5R0gWlq5KADZdZG": training_file パラメータは、微調整に使用するトレーニング データ ファイルの ID を指定します。この ID は、以前にファイルをアップロードしたときに取得した ID である必要があります。 model="gpt-3.5-turbo": モデルパラメータは、微調整するモデルのバージョンを指定します。この例では、GPT-3.5 Turbo が選択されています。 8. チューニングの進行状況を確認するチューニングは一晩で完了するものではありません。プロセス全体は OpenAI サーバーによって完了されるため、しばらく待つ必要があります。この間、コードを通じてチューニングの状況や進捗状況を確認します。 上記のコードが何をするのか見てみましょう。コメントアウトされた部分はこの例では使用されていませんが、いくつかのシナリオで使用されるため、ここに含めます。 (1) 微調整ジョブリストを表示します: `openai.FineTuningJob.list(limit=10)`**: この行には、最新の 10 件の微調整ジョブがリストされます。 `limit=10` は、最大 10 件のジョブがリストされることを意味します。これは、複数の微調整タスクを追跡したり、履歴ジョブを表示したりする場合に役立ちます。 (2) 微調整ジョブのステータスを取得します: `response = openai.FineTuningJob.retrieve("ftjob-OJAXmjzlYT0TKbrHA9p2TWro")`**: この行は、微調整ジョブの一意の ID (ここでは、`"ftjob-OJAXmjzlYT0TKbrHA9p2TWro"`) を使用して、特定の微調整ジョブのステータスと情報を取得します。 (3) 微調整ジョブをキャンセルします(コメントアウト):`#openai.FineTuningJob.cancel("ft-abc123")`**:指定されたIDの微調整ジョブをキャンセルするために使用できます。ここで、ジョブ ID は `"ft-abc123"` です。 (4) 微調整ジョブのイベントを一覧表示します(コメントアウト):`#openai.FineTuningJob.list_events(id="ft-abc123", limit=10)`**:特定の微調整ジョブの最大10個のイベントを一覧表示するために使用されます。これらのイベントには、ジョブの開始、進行状況の更新、ジョブの完了などが含まれる場合があります。 (5) 微調整されたモデルを削除します(コメントアウト):`#openai.Model.delete("ft-abc123")`**:微調整されたモデルを削除するために使用されます。モデルを削除できるのは、モデルが属する組織の所有者のみであることに注意してください。 上記のコードを実行すると、次のように詳細なチューニング プロセスが表示されます。 多くの情報が返されますが、それでも辛抱強く分析する必要があります。いくつかの重要なフィールドを以下に示します。 "object": "fine_tuning.job"`**: この JSON オブジェクトが微調整ジョブを表すことを指定します。 `"id": "ftjob-OJAXmjzlYT0TKbrHA9p2TWro"`**: 微調整ジョブの一意の識別子。 `"model": "gpt-3.5-turbo-0613"`**: 微調整に使用される基本モデルを表します。 `"created_at": 1692886101"`**: ジョブが作成された時点の Unix タイムスタンプ。 `"finished_at": 1692886492"`**: ジョブが終了したときの Unix タイムスタンプ。 `"fine_tuned_model": "ft:gpt-3.5-turbo-0613:personal::7r5OjUmx"`**: 微調整後に生成されたモデルの一意の識別子。 `"result_files": ["file-9mLgEz2wKpHGoKtkZ0I3O8Yk"]`**: 微調整結果を含むファイルの ID。 `"status": "succeeded"`**: 微調整ジョブのステータス。ここでは「成功」です。 `"training_file": "file-F8Gh75F2A5R0gWlq5KADZdZG"`**: トレーニングに使用されるファイル ID。 `"hyperparameters": {"n_epochs": 10}`**: ジョブで使用されるハイパーパラメータを微調整します。ここでは、トレーニング エポック (`n_epochs`) のみを 10 に設定します。 `"trained_tokens": 6810"`**: 微調整中にトレーニングされたトークンの数。 9. 微調整したモデルをテストする以下のコードを実行し、微調整後にGPT-3.5 Turboの天気の質問をしてみましょう。 fine_tuned_model_id = response["fine_tuned_model"]: 以前に取得した微調整ジョブ応答から微調整されたモデル ID を抽出し、それを fine_tuned_model_id 変数に格納します。 completion = openai.ChatCompletion.create(...): OpenAI の ChatCompletion.create メソッドを呼び出して、チャット応答を生成します。 model=fine_tuned_model_id: 使用する微調整されたモデル ID を指定します。これにより、生成された応答が微調整されたモデルに基づくことが保証されます。 微調整後の GPT-3.5 Turbo が語るジョークは、十分面白いでしょうか? 10. 結論GPT-3.5 Turbo の微調整機能により、開発者や企業は、特定のアプリケーションのニーズに合わせて大規模な言語モデルを効率的にカスタマイズできるようになります。微調整により、モデルはタスク実行時の制御性と信頼性が向上するだけでなく、企業のブランドトーンをより正確に反映できるようになります。さらに、微調整を行うことで、API 呼び出しの時間とコストを削減できます。 この記事では、セキュリティとコストからデータセットの準備と検証まで、この新しい機能について詳しく説明します。この記事では、コード例を通じてモデルを微調整する方法も詳しく説明し、データセットのアップロードから微調整結果のテストまでの明確な操作パスを提供します。全体として、微調整は、さまざまなアプリケーション シナリオで GPT-3.5 Turbo の可能性を大幅に拡張する強力なツールとして機能します。 著者について: Cui Hao は、51CTO コミュニティ エディター、シニア アーキテクトであり、ソフトウェア開発とアーキテクチャの経験が 18 年、分散アーキテクチャの経験が 10 年あります。 |
>>: 「AI+コンピューティングパワー」が海外企業に「活力」を与えた
BBCによると、サイズミック社は「スーパースーツ」と呼ばれる新しいウェアラブルデバイスを開発した。こ...
「リラックスして、直立不動で、右を向いてください!」司会者の指示に従い、一列に並んだロボットが一斉...
[[248661]]ビッグデータダイジェスト制作編集者: DonFJ、Jiang Baoshang機...
センサーのコストは15ドルから1ドルまで幅があり、自動車メーカーは、車両を完全に自動運転にするにはど...
中国サイバースペース管理局と他の7つの部門が共同で発行した「生成人工知能サービスの管理に関する暫定措...
私たちは、使用するほぼすべてのものが「スマート」な時代に生きています。私たちのデバイスは、長い間、指...
最近、浙江省の高温が話題になっています。継続的な高温と干ばつの悪影響を緩和するために、浙江省の多く...
AI 分野で急成長しているビジネスを運営し、成長させるには、プロセスの構築、顧客の成功、人材の獲得、...
[[257915]]編集者注:自動運転車が私たちの信頼を得られるのはいつでしょうか? 「十分に安全...
私たちは皆、モノのインターネット (IoT)、人工知能 (AI)、ビッグデータが業界の再編とビジネス...
「サッカーのフィールドで最もタブーなことは、誰もが明らかなファウルに気づいているのに審判が見て見ぬ...