外网很火的依据GPT-3.5的微调流程。程序员调用api 微调在中文的中医药问答的作用,通过尝试现已跑通了整个流程,提供了数据处理流程,而且把官方的curl流程转成了python版。
openai 3.5微调实战全流程
OpenAI GPT-3.5 Turbo 微调功用发布!
OpenAI 刚刚为 GPT-3.5 Turbo 推出了一项革命性的微调功用!GPT-4 的微调将于本年秋天推出。以下是这项技术的要害信息和特色:
微调功用简介
- 个性化练习:微调答应开发者依据自己的数据练习模型,并在大规模下运转。
- 杰出性能:前期测试显现,微调后的 GPT-3.5 Turbo 能够在特定使命上与 GPT-4 相匹敌乃至超越。
- 隐私保证: 从微调API发送的数据归客户所有,OpenAI或任何其他组织都不会运用它来练习其他模型。
微调的优势
- 定制体会:每个事务和应用都有特定需求,微调保证开发者能调整 GPT 输出,提供真实差异化的体会。例如,开发人员能够运用微调来保证模型在提示运用该言语时始终以德语呼应。
- 本钱效益:有或许减少高达 90% 的提示巨细,企业能够更快速、更经济地进行 API 调用。
- 扩展才能:新模型最多能够处理 4K 代币,对处理大数据集的开发者有利。
- 牢靠的输出格局:微调可提高模型共同格局化呼应的才能,这对于需求特定呼应格局的应用程序(例如代码完结或编撰 API 调用)来说至关重要。开发人员能够运用微调来更牢靠地将用户提示转换为可与自己的系统一起运用的高质量 JSON 代码段。
微调本钱
- 练习:每 1K token $0.008
- 运用输入:每 1K token $0.012
- 运用输出:每 1K token $0.016
例如,100,000 代币的 gpt-3.5-turbo 微调作业,练习 3 个周期的预期本钱为 $2.40。
微调步骤
- Step1 准备数据
{
"messages": [
{ "role": "system", "content": "You are an assistant that occasionally misspells words" },
{ "role": "user", "content": "Tell me a story." },
{ "role": "assistant", "content": "One day a student went to schoool." }
]
}
- Step2 上传文件
curl -https://api.openai.com/v1/files \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@path_to_your_file"
- Step 3 开端微调
curl https://api.openai.com/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"training_file": "TRAINING_FILE_ID",
"model": "gpt-3.5-turbo-0613",
}'
- step4 直接运用
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "ft:gpt-3.5-turbo:org_id",
"messages": [
{
"role": "system",
"content": "You are an assistant that occasionally misspells words"
},
{
"role": "user",
"content": "Hello! What is fine-tuning?"
}
]
}'
微调中文医疗版GPT 3.5
- 数据来历
Huatuo-26M 数据集是由多个来历收集和整合而成,首要包含:
- 在线医疗百科
- 医疗知识图谱
- 网络上的公开医疗问答论坛(答案为url方式)
数据集中的每个问答对包含以下字段:
- Question:问题描绘
- Answer:医师/专家的答案
以下为咱们在论文中运用的huatuo测试集,由多个来历中数据随机抽取组成。
- Testdatasets:huatuo26M-testdatasets
官方引荐的是数量仅仅需求50-100个数量!这儿我随机抽取了Testdatasets里面100个数据
import json
import random
def transform_jsonl(input_file_path, output_file_path):
entries = []
with open(input_file_path, 'r') as file:
for line in file:
entry = json.loads(line)
entries.append(entry)
# 随机抽取100个条目
sampled_entries = random.sample(entries, 100)
with open(output_file_path, 'w') as outfile:
for entry in sampled_entries:
messages = []
messages.append({"role": "system", "content": "You are an assistant that occasionally misspells words"})
user_message = {"role": "user", "content": entry["questions"]}
assistant_message = {"role": "assistant", "content": entry["answers"]}
messages.extend([user_message, assistant_message])
result = {"messages": messages}
json.dump(result, outfile, ensure_ascii=False)
outfile.write('\n')
input_file_path = '' # 请替换为您的输入JSONL文件路径
output_file_path = '' # 请替换为您想要保存的输出JSONL文件路径
transform_jsonl(input_file_path, output_file_path)
- 上传文件「这儿我也转成了python文件,方便咱们运用」
import requests
import openai
url = "https://api.openai.com/v1/files"
headers = {
"Authorization": "Bearer $OPENAI_API_KEY"
}
payload = {
"purpose": "fine-tune",
}
files = {
"file": open("上一步输出文件的路径", "rb")
}
response = requests.post(url, headers=headers, data=payload, files=files)
print(response)
print(openai.File.list())
输出**<Response [200]>代表文件上传成功,一起也会输出文件的ID**
{
"object": "file",
"id": "file-XXXXXXXXXXX",
"purpose": "fine-tune",
"filename": "output.jsonl",
"bytes": 70137,
"created_at": 1692763379,
"status": "processed",
"status_details": null
}
- 进行微调
import requests
url = "https://api.openai.com/v1/fine_tuning/jobs"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer $OPENAI_API_KEY"
}
data = {
"training_file": "file-XXXXXXXXXXX",
"model": "gpt-3.5-turbo-0613"
}
response = requests.post(url, headers=headers, json=data)
print(response.text)
微调完结之后会自动发送到你账户的邮箱
- 模型运用
import requests
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer $OPENAI_API_KEY"
}
data = {
"model": "ft:gpt-3.5-turbo-0613:xxxxxxxx",
"messages": [
{
"role": "system",
"content": "You are an assistant that occasionally misspells words"
},
{
"role": "user",
"content": "我在体检是正常的,可是去献血医师最是说我的血压高,不能献。血压是130、80这是为什么呢?"
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.text)
- 作用比照
用户输入 | gpt-3.5-turbo-0613 | 仅用100条数据微调后 |
---|---|---|
我在体检是正常的,可是去献血医师最是说我的血压高,不能献。血压是130、80这是为什么呢? | 血压130/80是正常血压,可是献血的规范要求血压低于120/80,所以您的血压超出了献血的规范,不能献血。 | 首次值得注意的是,在献血的时分,会呈现生理性的振奋,反射性的引起血压升高。一般情况下小于140、90mmHg,是答应献血的。对于一些持续性的血压升高的就需求活跃的调理了。 |
微调过后咱们不需求写prompt也能够让gpt-3.5-turbo-0613有更加专业的回复!
要害问题与考虑
- 本钱问题:微调虽便宜,模型或许发生 6-8 倍的 GPT3.5 惯例费用。
- 出资与报答:人们是否乐意投入更多资金微调模型,而不仅是进行更好的提示或链接?
行将到来
- 新微调仪表板
- 更多用户友好工具
微调功用无疑将为 AI 范畴带来新的或许性和应战。企业和开发者能够等待更多定制化和高效的解决方案。
原文链接github.com/LearnPrompt…
感谢阅览 欢迎点赞,保藏,谈论
更多免费原创AI教程,请继续关注大众号:AI深度研究员