ガイドはここにあります! GPT3.5を微調整して大規模モデルをカスタマイズしましょう!

ガイドはここにあります! GPT3.5を微調整して大規模モデルをカスタマイズしましょう!

著者 | 崔昊

レビュー | 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 と同じ形式の会話が必要です。具体的には、各メッセージには役割、コンテンツ、オプションの名前があります。

以下は公式サンプルです。

 {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]} {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]} {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

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 をジョークを言うことができる天気予報アシスタントにしたいと考えています。そして、さまざまな質疑応答の方法を通じて、天気に関する人間の質問に「ユーモラスに」答える方法を教えます。

 {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "今天北京的天气怎么样?"}, {"role": "assistant", "content": "今天北京的天气晴朗,就像我的心情一样明朗!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "上海明天会下雨吗?"}, {"role": "assistant", "content": "上海明天不会下雨,但我的幽默感可能会淋湿你!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "广州的湿度怎么样?"}, {"role": "assistant", "content": "广州的湿度很高,就像我的幽默感一样无处不在!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "成都的温度是多少?"}, {"role": "assistant", "content": "成都的温度适中,就像一杯刚刚好的茶!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "杭州周末会晴天吗?"}, {"role": "assistant", "content": "杭州周末会是晴天,完美的野餐天气!别忘了带上笑容。"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "深圳冬天冷吗?"}, {"role": "assistant", "content": "深圳的冬天不冷,但我的冷笑话可能会让你打寒颤!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "武汉夏天热吗?"}, {"role": "assistant", "content": "武汉的夏天非常热,就像我的幽默感一样火辣!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "西安有沙尘暴吗?"}, {"role": "assistant", "content": "西安偶尔有沙尘暴,但不要担心,我的笑话会吹走沙尘!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "重庆的天气如何?"}, {"role": "assistant", "content": "重庆的天气多变,就像我的幽默感一样难以捉摸!"}]} {"messages": [{"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "南京的春天怎么样?"}, {"role": "assistant", "content": "南京的春天温暖宜人,就像一首美丽的诗歌!"}]}

6. データ形式を確認する

先ほどデータセットを作成しました。いくつか注意すべき点はありますが、全体のプロセスは非常に便利です。トレーニング セットが大きく、大量のデータを処理する必要がある場合は、注意が必要です。結局のところ、すべてのチューニングには実際のコストがかかります。そのため、データ量が多い場合は、データ形式を確認することをお勧めします。潜在的なエラーを見つけたり、トークン数を表示したり、ジョブを微調整するコストを見積もったりするために使用できる簡単な Python スクリプトを作成しました。このチェックは必須ではなく、自由に選択できます。

次のコードは、まずチャット メッセージを含むデータセットを読み込み、それに対して予備チェックを実行します。次に、データセットを反復処理して、各例が適切に構成されているかどうかを確認し、書式設定エラーがあればログに記録します。最後に、TikToken ライブラリを使用してデータセット内のトークンの数をカウントし、例の数、メッセージの数、会話の長さ、アシスタント メッセージの長さの分布などの統計情報を出力します。さらに、トレーニングの推定コストとエポック数を計算します。

 # 导入必要的包import json import os import tiktoken import numpy as np from collections import defaultdict # 指定数据路径data_path = "<YOUR_JSON_FILE_HERE>" # 通过读取文件中的每一行并解析为JSON对象来加载数据集with open(data_path) as f: dataset = [json.loads(line) for line in f] # 打印数据集的统计信息,例如示例数量和第一个示例print("Num examples:", len(dataset)) print("First example:") for message in dataset[0]["messages"]: print(message) # 初始化格式错误计数器format_errors = defaultdict(int) # 遍历数据集,检查每个示例的格式for ex in dataset: # 检查示例是否为字典if not isinstance(ex, dict): format_errors["data_type"] += 1 continue # 获取消息列表messages = ex.get("messages", None) # 检查消息列表是否存在if not messages: format_errors["missing_messages_list"] += 1 continue # 遍历消息,检查格式for message in messages: # 检查消息是否包含“role”和“content”键if "role" not in message or "content" not in message: format_errors["message_missing_key"] += 1 # 检查消息是否包含未识别的键if any(k not in ("role", "content", "name") for k in message): format_errors["message_unrecognized_key"] += 1 # 检查角色是否被识别if message.get("role", None) not in ("system", "user", "assistant"): format_errors["unrecognized_role"] += 1 # 检查内容是否存在且为字符串content = message.get("content", None) if not content or not isinstance(content, str): format_errors["missing_content"] += 1 # 检查示例中是否缺少助理消息if not any(message.get("role", None) == "assistant" for message in messages): format_errors["example_missing_assistant_message"] += 1 # 打印找到的错误if format_errors: print("Found errors:") for k, v in format_errors.items(): print(f"{k}: {v}") else: print("No errors found") # 使用tiktoken库来获取编码encoding = tiktoken.get_encoding("cl100k_base") # 定义计算消息中令牌数量的函数def num_tokens_from_messages(messages, tokens_per_message=3, tokens_per_name=1): num_tokens = 0 for message in messages: num_tokens += tokens_per_message for key, value in message.items(): num_tokens += len(encoding.encode(value)) if key == "name": num_tokens += tokens_per_name num_tokens += 3 return num_tokens # 定义计算助理消息中令牌数量的函数def num_assistant_tokens_from_messages(messages): num_tokens = 0 for message in messages: if message["role"] == "assistant": num_tokens += len(encoding.encode(message["content"])) return num_tokens # 定义打印值分布的函数def print_distribution(values, name): print(f"\n#### Distribution of {name}:") print(f"min / max: {min(values)}, {max(values)}") print(f"mean / median: {np.mean(values)}, {np.median(values)}") print(f"p5 / p95: {np.quantile(values, 0.1)}, {np.quantile(values, 0.9)}") # 初始化警告和令牌计数n_missing_system = 0 n_missing_user = 0 n_messages = [] convo_lens = [] assistant_message_lens = [] # 遍历数据集,计算警告和令牌计数for ex in dataset: messages = ex["messages"] if not any(message["role"] == "system" for message in messages): n_missing_system += 1 if not any(message["role"] == "user" for message in messages): n_missing_user += 1 n_messages.append(len(messages)) convo_lens.append(num_tokens_from_messages(messages)) assistant_message_lens.append(num_assistant_tokens_from_messages(messages)) # 打印缺少的系统和用户消息数量,以及消息、对话和助理消息的长度分布print("Num examples missing system message:", n_missing_system) print("Num examples missing user message:", n_missing_user) print_distribution(n_messages, "num_messages_per_example") print_distribution(convo_lens, "num_total_tokens_per_example") print_distribution(assistant_message_lens, "num_assistant_tokens_per_example") n_too_long = sum(l > 4096 for l in convo_lens) print(f"\n{n_too_long} examples may be over the 4096 token limit, they will be truncated during fine-tuning") # 定义最大令牌数量和目标示例数量MAX_TOKENS_PER_EXAMPLE = 4096 MIN_TARGET_EXAMPLES = 100 MAX_TARGET_EXAMPLES = 25000 TARGET_EPOCHS = 3 MIN_EPOCHS = 1 MAX_EPOCHS = 25 # 计算时期数量n_epochs = TARGET_EPOCHS n_train_examples = len(dataset) if n_train_examples * TARGET_EPOCHS < MIN_TARGET_EXAMPLES: n_epochs = min(MAX_EPOCHS, MIN_TARGET_EXAMPLES // n_train_examples) elif n_train_examples * TARGET_EPOCHS > MAX_TARGET_EXAMPLES: n_epochs = max(MIN_EPOCHS, MAX_TARGET_EXAMPLES // n_train_examples) # 计算数据集中的计费令牌数量n_billing_tokens_in_dataset = sum(min(MAX_TOKENS_PER_EXAMPLE, length) for length in convo_lens) print(f"Dataset has ~{n_billing_tokens_in_dataset} tokens that will be charged for during training") print(f"By default, you'll train for {n_epochs} epochs on this dataset") print(f"By default, you'll be charged for ~{n_epochs * n_billing_tokens_in_dataset} tokens") print("See pricing page to estimate total costs")开始调优数据集建立好了, 并且也对它进行了检查。接下来就开始调优了。上传数据集将数据集保存到"gpt-3.5-turbo-ft-file.jsonl"文件中。执行如下代码: import openai openai.File.create( file=open("gpt-3.5-turbo-ft-file.jsonl", "rb"), purpose='fine-tune' )

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': 目的パラメータは、ファイルのアップロードの目的を示します。ここでの目標は、モデルを「微調整」することです。

上記のコードを実行すると、次の結果が得られます。

 <File file id=file-F8Gh75F2A5R0gWlq5KADZdZG at 0x78f25bdc1df0> JSON: { "object": "file", "id": "file-F8Gh75F2A5R0gWlq5KADZdZG", "purpose": "fine-tune", "filename": "file", "bytes": 2545, "created_at": 1692886089, "status": "uploaded", "status_details": null }

返された結果を一つずつ説明しましょう。

"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. チューニングを実行する

ファイルをアップロードした後、チューニングを実行するコードは次のようになります。

 openai.FineTuningJob.create(training_file="file-F8Gh75F2A5R0gWlq5KADZdZG", model="gpt-3.5-turbo")

コードは比較的シンプルで、理解しやすいようです。

training_file="file-F8Gh75F2A5R0gWlq5KADZdZG": training_file パラメータは、微調整に使用するトレーニング データ ファイルの ID を指定します。この ID は、以前にファイルをアップロードしたときに取得した ID である必要があります。

model="gpt-3.5-turbo": モデルパラメータは、微調整するモデルのバージョンを指定します。この例では、GPT-3.5 Turbo が選択されています。

8. チューニングの進行状況を確認する

チューニングは一晩で完了するものではありません。プロセス全体は OpenAI サーバーによって完了されるため、しばらく待つ必要があります。この間、コードを通じてチューニングの状況や進捗状況を確認します。

 # List 10 fine-tuning jobs openai.FineTuningJob.list(limit=10) # Retrieve the state of a fine-tune response = openai.FineTuningJob.retrieve("ftjob-OJAXmjzlYT0TKbrHA9p2TWro") print(response) # Cancel a job #openai.FineTuningJob.cancel("ft-abc123") # List up to 10 events from a fine-tuning job #openai.FineTuningJob.list_events(id="ft-abc123", limit=10) # Delete a fine-tuned model (must be an owner of the org the model was created in) #import openai #openai.Model.delete("ft-abc123"

上記のコードが何をするのか見てみましょう。コメントアウトされた部分はこの例では使用されていませんが、いくつかのシナリオで使用されるため、ここに含めます。

(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", "id": "ftjob-OJAXmjzlYT0TKbrHA9p2TWro", "model": "gpt-3.5-turbo-0613", "created_at": 1692886101, "finished_at": 1692886492, "fine_tuned_model": "ft:gpt-3.5-turbo-0613:personal::7r5OjUmx", "organization_id": "org-4P7htKo6DejPTQxfu3rExc7D", "result_files": [ "file-9mLgEz2wKpHGoKtkZ0I3O8Yk" ], "status": "succeeded", "validation_file": null, "training_file": "file-F8Gh75F2A5R0gWlq5KADZdZG", "hyperparameters": { "n_epochs": 10 }, "trained_tokens": 6810 }

多くの情報が返されますが、それでも辛抱強く分析する必要があります。いくつかの重要なフィールドを以下に示します。

"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"] completion = openai.ChatCompletion.create( model=fine_tuned_model_id, # 请确保使用您微调后的模型ID temperature=0.7, max_tokens=500, messages=[ {"role": "system", "content": "你是一个会讲笑话的天气助理。"}, {"role": "user", "content": "今年武汉的冬天冷不冷?"} ] ) print(completion.choices[0].message['content'])

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+コンピューティングパワー」が海外企業に「活力」を与えた

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

高齢者が松葉杖を捨てるのも夢ではない、新たなウェアラブルデバイス「スーパースーツ」をSeismicが開発

BBCによると、サイズミック社は「スーパースーツ」と呼ばれる新しいウェアラブルデバイスを開発した。こ...

世界ロボット会議は、未来がここにあることを伝えます。

「リラックスして、直立不動で、右を向いてください!」司会者の指示に従い、一列に並んだロボットが一斉...

...

AI技術のダークサイド:犯罪者と人工知能の関係

[[248661]]ビッグデータダイジェスト制作編集者: DonFJ、Jiang Baoshang機...

...

自動運転にはセンサーがいくつ必要ですか?

センサーのコストは15ドルから1ドルまで幅があり、自動車メーカーは、車両を完全に自動運転にするにはど...

大規模モデルにAI管理ルールを組み込む時代が到来

中国サイバースペース管理局と他の7つの部門が共同で発行した「生成人工知能サービスの管理に関する暫定措...

スマートシティを計画する際には、アクセシビリティを忘れないようにしましょう

私たちは、使用するほぼすべてのものが「スマート」な時代に生きています。私たちのデバイスは、長い間、指...

気温を下げて干ばつを緩和するブラックテクノロジーが多数存在します。人工降雨の謎とは?

​最近、浙江省の高温が話題になっています。継続的な高温と干ばつの悪影響を緩和するために、浙江省の多く...

人工知能分野で急成長を遂げている企業の主な問題点

AI 分野で急成長しているビジネスを運営し、成長させるには、プロセスの構築、顧客の成功、人材の獲得、...

ベセット氏との対話:自動運転車が人間の信頼を勝ち取るのはいつでしょうか?

[[257915]]編集者注:自動運転車が私たちの信頼を得られるのはいつでしょうか? 「十分に安全...

...

IoT、AI、ビッグデータが地球を救う方法

私たちは皆、モノのインターネット (IoT)、人工知能 (AI)、ビッグデータが業界の再編とビジネス...

...

CoCoPIE 主任科学者との対話: AI は審判になれるが、ショーを乗っ取ることはできない | T Frontline

「サッカーのフィールドで最もタブーなことは、誰もが明らかなファウルに気づいているのに審判が見て見ぬ...