chatgpt是用python训练的吗 如何使用openai chatgpt训练一个属于自己私有模型 模型微调
现在大语言模型越来越普及,让没有显卡的用户也可以玩上大模型,有些有想法的哥们,开始买3090显卡训练自己的模型。那么是如何训练自己的模型那?今天介绍一下使用的gpt-3.5-turbo-0125进行训练。
1.为什么要训练自己的模型
现在gpt4已训练的足够好,gpt4.5也已马上发布,这些模型足够大家日常使用,那为什么还要自己训练模型,费钱,费电,费时间。对于一些公司,他可能有机器人客服的需求,而这个公司有一些专有名词,概念,词汇,gpt是不了解这些内容的,专业客服还有一些话术,为了这些客服看起来,听起来更像真人,就要有一些数据积累,用语料喂出来。训练出来后,这个模型既有原来gpt本身的功能,还有我们自己领域这些知识。
还有一些情况,比如某位老师,做了一个全国的模型,自动识别某些东西,整的识别率达到85%,对于一个地区,这个全国模型不太适合,当地有一些特色的东西,需要自己把它们提取出来,自己在老师的模型上,再加入本地的数据,进行训练,把原来的自动识别率由85%提高到88%或者是95%。这就是这些自己训练模型的大致意义吧。
关于微调,他给出的解释是能得到更高质量的结果,训练得到更多的提示,由于使用的基础数据少,节省代币(token),更低的请求延迟。
2.如何使用训练模型
通过训练模型需要几个步骤:
准备和上传数据
训练新的微调模型
评估结果,并根据需要返回步骤1
使用微调模型
使用进行模型训练,需要已开通付费并存一定的余额的钱。以下几个模型可以微调:gpt-3.5-turbo-0125 gpt-3.5-turbo-1106 gpt-3.5-turbo-0613 -002 -002 gpt-4-0613。
3. 数据准备
数据集格式为jsonl,基本就是一个Json格式,他给了个示例圣话:
{"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."}]}
每个是一条内容,分三个部分,和聊天补全对应:
curl https://api.openai.com/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer $OPENAI_API_KEY"
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
聊天补全时,你发送这个请求,他对回复:
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "gpt-3.5-turbo-0125",
"system_fingerprint": "fp_44709d6fcb",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "nnHello there, how may I assist you today?",
},
"logprobs": null,
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
这一问一答包含了,"role": "",系统的一个角色设定,情景设定,"role": "user",这个相当于用户要提问的问答,"role": ""是对于这个问题的回答,就是提出一个问题,并给出一个正确答案。的训练要求至少10条以上这样的数据,可以更多,效果会更好。
准备好这些数据,就通过 库可以上传数据了:
openai.api_key = "sk-YOUR-OPENAI-KEY-HERE"
def dataset_upload():
set_api_key()
result = openai.File.create(
file=open("path-to-your-local/dataset.jsonl", "rb"),
purpose='fine-tune'
)
print(result)
保证这个key充值,且余额充足。上传成功,会返回一个id:
4. 创建微调模型
在确保数据集具有正确的数量和结构并上传文件后,下一步是创建微调作业。我们支持通过微调 UI或以编程方式创建微调作业。要使用 SDK 启动微调作业,请执行以下操作:
from openai import OpenAI
client = OpenAI()
client.fine_tuning.jobs.create(
training_file="id",
model="gpt-3.5-turbo"
)
把上一步返回上传文件的id,写到id的位置,就是基于这个文件的训练。这个训练需要一段时间,训练好了,可以到看训练的成品。
最上面的是就是模型名称,调用时,使用这个名称,就可以调用这个模型。
5.调用模型进行问答
def chat_with_yx_model(model_id):
set_api_key()
completion = openai.ChatCompletion.create(
model=model_id,
messages=[
{"role": "system",
"content": "Marv is mental healthy expert"},
{"role": "user", "content": "Who does mental illness affect?"}
]
)
print(completion)
这里的就是上一步返回的id,通过正确的id,就可以用自己训练的模型进行问答,聊天。以上就是训练的步骤,涉及的上传数据,有很多的公开的数据集,进行简单的改造和筛选,就可以自己使用。上的数据集非常多。
6.数据集
有很多开源的数据集,比如这个:
对于这个数据集,,就对应"role": "user",对应"role": "",整理好数据集,就可以进行训练,这个训练可能需要好多轮,如果数据集特别大,这个费用可能很高。如果自己测试,几十条,上百条就可以进行训练和演示。我没有付费的帐号,没办法做进一步的演示,这里仅提供一个训练、微调自己数据的一种方法,仅供参考,希望对你有帮助。
7.学习交流矩阵
组建了两个学习群,学习生态很好。现在各种大模型层出不穷,已经很牛了,现在还出了,还有这种开源大模型,民用级机器也可以跑大模型。李老板昨天说『以后没有程序员这个职业了』,人人都拥有程序员的技能,这几天英伟达的黄老板也说了类似的话,把编程这个活交给AI,你的后台支撑那里来,来学习『大模型』吧,我想组个『大模型交流群』。如果对大模型感兴趣,加我微信,组大模型群拉上你。加微信时备注一下。昨天一天已经有30多人入群了。组群发个福利,给大家介绍一个好用的集成了、、bard 等大模型的好用小工具,后台回复『大模型』获取这个工具。
组建了『PyQt6 学习交流1群』快有1年了,大家积极交流,现在有 400 多位参与者,群内高手云集,各方面大咖,形成很好的的交流生态,让我们借鉴,让我受益良多。群比较松散,开放进入就会比较乱,现在进群只能邀请,现在组建『PyQt6 学习交流2群』,如果需要进群,关注下面公众号,按提示进群。群内会不定期发放些学习材料、代码、视频等。另外,如果我的文字对你有帮助,记得点赞、转发,点在看。
另外最近也有学习『』 ,想组个群共同学习,感兴趣的可以加入学习讨论。直接扫码入群。