当前位置: 首页 > news >正文

用 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 倍多。

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

相关文章:

用 Python 微调 ChatGPT (GPT-3.5 Turbo)

用 Python 微调 ChatGPT (GPT-3.5 Turbo) 备受期待的 GPT-3.5 Turbo 微调功能现已推出&#xff0c;并且为今年秋季即将发布的 GPT-4 微调功能奠定了基础。 这不仅仅是一次简单的更新——它是一个游戏规则改变者&#xff0c;为开发人员提供了完美定制人工智能模型的关键解决方案…...

单目标应用:基于蜘蛛蜂优化算法(Spider wasp optimizer,SWO)的微电网优化调度MATLAB

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、蜘蛛蜂优化算法 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该…...

2023年7月京东饮料行业数据分析(京东运营数据分析)

饮料消费已成为当下快消品行业里的主力军&#xff0c;随着社会群体喜好的改变、消费群体的不断扩大&#xff0c;可选择的饮料种类越来越多&#xff0c;我国饮料市场的体量也较为庞大。根据鲸参谋电商数据分析平台的数据显示&#xff0c;今年7月份&#xff0c;京东平台饮料的销量…...

执行 JUnit 单元测试前,修改环境变量

同一份代码&#xff0c;在不改变配置文件的情况下&#xff0c;可以连接不同的数据库&#xff0c;进行JUnit测试。 非开发、测试、生产环境的区别。而是 我就站在这里&#xff0c;指哪打哪&#xff01; 避免重复造轮子&#xff0c;参考博文&#xff1a; 使用junit&spri…...

openGauss学习笔记-63 openGauss 数据库管理-资源池化架构

文章目录 openGauss学习笔记-63 openGauss 数据库管理-资源池化架构 openGauss学习笔记-63 openGauss 数据库管理-资源池化架构 本文档主要介绍资源池化架构下的一些最佳实践和使用注意事项&#xff0c;用于支撑对相关特性感兴趣的开发者可以快速部署、实践或进行定制化开发。…...

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

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

ChatGPT如何应对紧急情况和灾害应对?

ChatGPT是一个文本生成模型&#xff0c;它可以用于各种任务&#xff0c;但在处理紧急情况和灾害应对方面&#xff0c;它有一些潜在的用途和限制。在这篇文章中&#xff0c;我们将讨论ChatGPT在紧急情况和灾害应对中的应用&#xff0c;以及如何充分利用这一技术&#xff0c;并提…...

ElementUI浅尝辄止37:Select 选择器

当选项过多时&#xff0c;使用下拉菜单展示并选择内容。 1.如何使用&#xff1f;基础单选 v-model的值为当前被选中的el-option的 value 属性值 <template><el-select v-model"value" placeholder"请选择"><el-optionv-for"item in …...

PCL 基于任意四点计算球心坐标

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 继续基于之前的思路PCL 基于三个点计算圆心坐标之二(二维),假设存在四个不共面的点, ( x 1 , y 1 ) (x_1,y_1)...

飞书即时消息无需API开发连接Cohere,打造飞书AI智能问答助手

飞书即时消息用户使用场景&#xff1a; 许多企业都在使用飞书系统进行协同办公&#xff0c;而现在有了Cohere大语言模型技术&#xff0c;能够根据用户的提问来自动产生回答&#xff0c;无需人为干预。对于企业负责人来说&#xff0c;他们认为如果将Cohere技术融入到飞书机器人中…...

FPGA实现Cordic算法——向量模式

FPGA实现Cordic算法——向量模式 FPGA实现Cordic算法——向量模式1.cordic算法基本原理2.FPGA实现cordic算法向量模式i、FPGA串行实现cordicii、FPGA流水线实现cordiciii、实验结果 FPGA实现Cordic算法——向量模式 1.cordic算法基本原理 FPGA中运算三角函数&#xff0c;浮点数…...

【常用代码14】el-input输入框内判断正则,只能输入数字,过滤汉字+字母。

问题描述&#xff1a; el-input输入框&#xff0c;只能输入数字&#xff0c;但是不能显示输入框最右边的上下箭头&#xff0c; <el-input v-model"input" type"number" placeholder"请输入内容" style"width: 200px;margin: 50px 0;&…...

[NLP]LLM--使用LLama2进行离线推理

一 模型下载 二 模型推理 本文基于Chinese-LLaMA-Alpaca-2项目代码介绍&#xff0c;使用原生的llama2-hf 克隆好了Chinese-LLaMA-Alpaca-2 项目之后&#xff0c;基于GPU的部署非常简单。下载完成以后的模型参数(Hugging Face 格式)如下&#xff1a; 简单说明一下各个文件的作…...

初始化一个Gin框架的Go-Web项目

使用到的第三方库 gin Gin 框架viper 配置文件管理cors 跨域资源请求配置gorm ORM 库zap 日志记录 main 包 Go 语言程序的入口点 main.go 文件 使用 flag 读取配置文件路径参数&#xff0c;默认当前目录下使用 viper 读取 config.ini 配置文件初始化初始数据初始化随机数种子初…...

Mybatis日期检索格式报错

问题复现 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String ##…...

如何把Android Framework学彻底?一条龙学习

Framework通俗易懂 平时学习 Android 开发的第一步就是去学习各种各样的 API&#xff0c;如 Activity&#xff0c;Service&#xff0c;Notification 等。其实这些都是 Framework 提供给我们的。Framework 层为开发应用程序提供了非常多的API&#xff0c;我们通过调用这些 API …...

uview indexList 按字母跳转不了

点击字母跳转不到位的问题&#xff1a;在<u-index-list>添加方法select“clickSelect“ 锚点要加id&#xff0c;用对应的字母做为id值&#xff0c; <u-index-anchor :id"key" :index"key"/> <template><view><view class&qu…...

安全模型中的4个P

引言&#xff1a;在安全模型中&#xff0c;经常会碰到PDR,PPDR&#xff0c;IPDRR&#xff0c;CARTA-PPDR等模型&#xff0c;其中的P&#xff0c;是predict&#xff1f;是prevent&#xff1f;还是protect&#xff1f;还是policy呢&#xff1f; 一、4P字典意思解释 1、predict&a…...

网站优化搜索引擎与关键词

网站优化搜索引擎与关键词 人们不应该高估搜索引擎的智商。这不利于seo的研究&#xff0c;事实上&#xff0c;搜索引擎是非常愚蠢的&#xff0c;让我们举一个非常简单的例子&#xff0c;你在搜索引擎中输入“教师”这个词&#xff0c;搜索引擎就会给出一个准确的搜索列表。我们…...

aws-msk-托管kafka集群的简单使用(VPC内部访问:无验证和SASL认证)

1.使用控制台创建即可 根据实例类型创建需要至少15分以上&#xff0c;可以提前创建好ec2实例和Secrets Manager,一会会使用到 2. 创建Secrets Manager &#xff08;使用无认证时请跳过&#xff09; 官方文档&#xff1a;https://docs.aws.amazon.com/zh_cn/msk/latest/deve…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...