用 Python 微调 ChatGPT (GPT-3.5 Turbo)

用 Python 微调 ChatGPT (GPT-3.5 Turbo)

备受期待的 GPT-3.5 Turbo 微调功能现已推出,并且为今年秋季即将发布的 GPT-4 微调功能奠定了基础。 这不仅仅是一次简单的更新——它是一个游戏规则改变者,为开发人员提供了完美定制人工智能模型的关键解决方案,并以前所未有的方式扩展这些自定义模型。 本文将你经历人工智能进化的惊心动魄之旅。

在这里插入图片描述

文章目录

    • ChatGPT 微调带来哪些优势
    • 如何微调 GPT-3.5 Turbo
      • Step 1. 准备数据
      • Step 2. 上传数据到 OpenAI
      • Step 3. 创建微调任务
      • Step 4. 使用微调模型
    • 成本

ChatGPT 微调带来哪些优势

自 ChatGPT 推出以来,人们一直渴望能够塑造和微调 ChatGPT,以获得真正独特的用户体验。今天这个梦想已经实现了。开发人员现在可以进行监督微调,针对各自的用例将模型个性化。 微调就像一根魔杖,可以在各种用例中改变模型性能,具体体现在:

🚀 **增强可控性:**让模型成为你的终极助手。通过微调,你就是老板,指挥它按照你的指令工作,权力由你掌控。

💼 **美化输出格式:**微调可以打磨输出细节,摆脱不稳定的输出格式。现在,你的模型每次都能为你提供完美的格式。无论是代码补全还是精心设计 API 调用,该模型都能以干净、一致的格式为你提供支持。

🎭 **打造风格:**微调可让调节输出内容风格,确保模型与你想要的独特基调一致,使其更加贴合你的需求和场景。

微调不仅可以提高性能,还可以提高性能。借助 GPT-3.5 Turbo,提示可以得到简化,同时保持最佳性能。事实上,OpenAI 的一些早期测试人员通过将指令直接集成到模型中,将提示词大幅削减了惊人的 90%。 结果是闪电般快速的 API 调用大幅削减了成本。

如何微调 GPT-3.5 Turbo

Step 1. 准备数据

训练数据需存储在纯文本文件中,每行均为 JSON(*.jsonl 文件),格式如下:

{"messages": [{"role": "system","content": "你是一个智慧幽默的小说家。"},{"role": "user","content": "请写一篇20字以内的微型小说。"},{"role": "assistant","content": "《夜》\n男:疼么?\n女:恩!\n男:算了?\n女:别!”}]
}
  • 系统消息(system)提供系统提示。这告诉模型如何响应。例如,网页版 ChatGPT 的系统提示是:“你是一个有用的助手(You are a helpful assistant)”。

  • 用户消息(user)提供提示词,通常是人们在 ChatGPT 输入框中输入的内容。

  • 助理消息(assistant)提供了你希望模型给出的回答。

Step 2. 上传数据到 OpenAI

上传数据需要用到 openai SDK 和 API Key。通过如下命令安装 openai SDK。

pip install -U openai

安装好 SDK 后,通过 openai.File.create方法上传数据集,下面是示例代码:

import openaiopenai.api_key = "YOUR_OPENAI_API_KEY"openai.File.create(file=open('/path/to/your/data.jsonl'),purpose='fine-tune',
)

上面的代码会返回一个 openai File 对象,其中包含文件大小、创建时间、上传状态和 ID 等信息。您可以通过 ID(类似于“file-xxxxxxx”)来检查 JSONL 文件中是否存在错误。

openai.File.retrieve('your_file_id')

Step 3. 创建微调任务

通过 openai.FineTuningJob.create创建微调任务

openai.FineTuningJob.create(training_file='your_file_id',model='gpt-3.5-turbo',
)

上面代码会返回一个 FineTuningJob 对象,其中包含重要信息,例如ID(类似于“ftjob-xxxxxxxx”),可用于检查作业的状态。由于此过程涉及更新大型神经网络的权重,一般需要较长时间(30 分钟、1 小时等),具体取决于你的训练数据量。

你可以用如下方式检查作业的状态:

openai.FineTuningJob.retrieve('ftjob-xxxxxxxx')

上面代码将返回一个包含创建时间、完成时间、epoch 数等信息的对象。

如果任务尚未完成,finished_at 字段将为空。另一个字段,fine_tuned_model 也将为空。完成后,此字段将包含模型的 ID,你将在以后的调用中使用该 ID。

检查任务进展情况的另一种方法是使用 list_events 函数。

openai.FineTuningJob.list_events(id='ftjob-xxxxx', limit=10)

该函数会返回消息告诉你相关信息,例如训练步骤/损失和该训练步骤的其他指标,以及训练完成后的模型 ID。

Step 4. 使用微调模型

模型训练完成后就可以测试你的微调模型了。你可以将其与未微调的 GPT-3.5 Turbo 进行比较,可以按如下方式完成:

completion = openai.ChatCompletion.create(model='gpt-3.5-turbo',messages=[{"role": "system", "content": "你是一个智慧幽默的小说家。"},{"role" "user", "content": "请写一篇20字以内的微型小说。"}]
)
print(completion.choices[0].message)

然后,尝试你自己的微调模型(使用从上一步检索到的模型 ID):

completion = openai.ChatCompletion.create(model='ft:gpt-3.5-turbo-xxxx:<your_username>::<some_id>', # your model idmessages=[{"role": "system", "content": "你是一个智慧幽默的小说家。"},{"role" "user", "content": "请写一篇20字以内的微型小说。"}]
)
print(completion.choices[0].message)

成本

在这里插入图片描述

GPT-3.5 Turbo 训练成本为每1千 token 0.0080美元,折合人民币 0.0588 元(6分钱);使用成本输入每1千 token 0.0120美元,折合人民币 0.0881 元(9分钱);输出每1千 token 0.0160美元,折合人民币 0.1175 元(1毛2)。整体上比 GPT-3.5 Turbo 贵了不少。GPT-3.5 Turbo 4K 输入每1千 token 0.0015美元,折合人民币 0.0110元(1分钱),输入每1千 token 0.002美元,折合人民币 0.0147元(1分5)。这样算下来微调 GPT-3.5 Turbo 模型的使用成本是 GPT-3.5 Turbo 的 6 倍多。

当然这部分额外付出的成本能换来更强大的模型,整体投入产出比上还是非常划算的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【备忘】清理Office缓存

【背景】电脑安装了M365 Apps for enterprise的客户端&#xff0c;遇到不常见的奇怪问题。尝试看清理缓存是否可以解决。 【清理步骤】 1. 关闭所有Office365 应用&#xff1b; 2. 搜索 %AppData% &#xff0c;并打开该文件夹&#xff1b; 3. 进到 AppData > Local > M…

基本介绍——数据挖掘

1.数据挖掘的定义 数据挖掘是采用数学的、统计的、人工智能和神经网络等领域的科学方法&#xff0c;如记忆推理、聚类分析、关联分析、决策树、神经网络、基因算法等技术&#xff0c;从大量数据中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势&#xff0c;并…

深度学习Tensorflow: CUDA_ERROR_OUT_OF_MEMORY解决办法

目前在用深度学习训练&#xff0c;训练中设置batch size后可以正常跑通&#xff0c;但是在训练一轮save_model时&#xff0c;总出现这个错误&#xff0c;即使我调batch size到1也依旧会报错。 发现是在 调用logger时出现问题。 查询后了解到是因为TensorFlow中的eager_executi…

Ei、Scopus双检索 | 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024)

会议简介 Brief Introduction 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024) 会议时间&#xff1a;2024年4月26日-28日 召开地点&#xff1a;中国宜昌 大会官网&#xff1a;www.faiml.org FAIML 2024将围绕“人工智能与机器学习”的最新研究领域而展开&#xff0c;为…

VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置

【分享成果&#xff0c;随喜正能量】若人散乱心&#xff0c;乃至以一花&#xff0c;供养于画像&#xff0c;渐见无数佛。所以发一幅释迦牟尼佛像&#xff0c;与同修善友一起每日在微博上供养&#xff0c;只要有供养之心&#xff0c;便可积累功德。以此回向&#xff0c;愿求者如…

Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃

目前在大数据生态中&#xff0c;调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目&#xff0c;其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说&#xff0c;能够支持的可调度的任务类型同样是一个非常重要的因素&#xf…

java文件命令行报错: 找不到或无法加载主类XXX报错及解决

前言 之前遇到过几次&#xff0c;后面稀里糊涂的解决了。今天详细记录一下&#xff0c;可能不全或有些错误&#xff0c;还请各位指正。 你要启动一个类的话首先要有类。 在这里&#xff0c;类有两种&#xff0c; 一个是带包名&#xff08;package&#xff09;的还有一个是没包…

算法刷题记录-双指针/滑动窗口(LeetCode)

809. Expressive Words 思路 根据题目描述&#xff0c;我们可以知道&#xff0c;如果要将某个单词定义为可扩张&#xff08;stretchy&#xff09;&#xff0c;需要满足如下两个条件&#xff1a; 所以&#xff0c;我们在实现的时候&#xff0c;可以通过两个指针p1和p2&#x…

Jmeter进阶使用指南-分布式测试

当你需要模拟大量并发用户并测试应用程序的性能时&#xff0c;JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户&#xff0c;从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤&#xff1a; 准备主机和从机&#xff1a; 首…

计算机竞赛 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …

Vue3---uni-app--高德地图引用BUG

先给报错信息&#xff1a;module libs/map//libs/map_min.js is not defined, require args is /libs/map_min.js 查看我引用方法&#xff1a; 本人查阅资料发现 是 require 使用的是 commonJS方式引用说这个适配Vue2可我项目是Vue3应该使用ES6语法糖 然后我有跑了项目发现BU…

蓝桥杯官网练习题(凑算式)

类似填空题&#xff1a; ①算式900&#xff1a; https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空&#xff1a;https:/…

Competitive Collaboration 论文阅读

论文信息 题目&#xff1a;Competitive Collaboration: Joint Unsupervised Learning of Depth, Camera Motion, Optical Flow and Motion Segmentation 作者&#xff1a;Anurag Ranjan&#xff0c; Varun Jampani&#xff0c; Lukas Balles 来源&#xff1a;CVPR 时间&#x…

【 OpenGauss源码学习 —— 列存储(analyze)(四)】

列存储&#xff08;analyze&#xff09; AcquireSampleCStoreRows 函数es_get_attnums_to_analyze 函数CStoreRelGetCUNumByNow 函数CStore::GetLivedRowNumbers 函数InitGetValFunc 函数CStoreGetfstColIdx 函数CStore::GetCUDesc 函数CStore::IsTheWholeCuDeleted 函数CStore…

vue开发-语法和基础流程规范

当一个请求发生的时候 后端的扭转流程对标前端的扭转过程 ***vue 中 整体url触发整体流程服务流程&#xff1a; node 中定义了默认加载 vue.config.js 文件 &#xff08;vue.config.js 文件名不可更改&#xff09;-> vue.config.js 中 devServer 绑定了个 ip端口 和资源 -》…

Java版本企业工程行业管理系统源码

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

初学Python记

Python这个编程语言的大名当然听说过了呀&#xff0c;这几年特别火&#xff0c;火的一塌涂地。大家可以回忆一下&#xff1a;朋友圈推荐的广告里经常可以看见python的网课广告。 本学期&#xff0c;学校开设了python课程&#xff0c;这几天学习了一下入了一下门&#xff0c;感…

OpenHarmony:如何使用HDF驱动控制LED灯

一、程序简介 该程序是基于OpenHarmony标准系统编写的基础外设类&#xff1a;RGB LED。 目前已在凌蒙派-RK3568开发板跑通。详细资料请参考官网&#xff1a;https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony/tree/master/samples/b02_hdf_rgb_led。 …

C++ 判断

C 判断 判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 下面是大多数编程语言中典型的判断结构的一般形式&#xff1a; 判断语句 C 编…

SpringMVC之前端增删改查实现

SpringMVC是一个基于MVC架构的框架&#xff0c;它可以帮助我们实现前后端的分离&#xff0c;同时也能很好地支持前端的增删改查操作。 配置 Cloudjun <?xml version"1.0" encoding"UTF-8" ?><taglib xmlns"http://java.sun.com/xml/ns/j…