训练自己的ChatGPT-OpenAI 微调模型

2023-11-12

OpenAI终于下定决心——正式开放ChatGPT API!

ChatGPT API地址:https://platform.openai.com/docs/guides/chat

gpt-3.5-turbo的新模型
OpenAI正式打开了官方的ChatGPT API,为广大开发者打开了新的大门。

微调(Fine-tuning

官方文档地址:OpenAI API

对于ChatGPT的表现,大家都已经感受到他的惊艳了,在试用之余,我们想该如何个性化为你使用或者为企业使用,那就不得不提到他的微调功能。

fine-tune 是指在一个已经训练好的模型上,再利用新的数据进行微调,以达到更好的适应性。在自然语言处理领域中,fine-tune 主要应用于语言模型,通常是在预训练模型的基础上,利用一定规模的新数据集对模型进行微调,以适应特定任务的要求。

举个例子,假设有一个预训练好的文本生成模型,可以根据给定的前缀生成一段连贯的文本。但是这个模型可能并不适用于特定的业务场景,例如医疗问答。此时,我们可以利用一定规模的医疗问答数据集对这个模型进行 fine-tune,以使其更好地适应医疗问答场景,生成更贴合实际需求的文本。

fine-tune 的好处在于,不需要从头训练一个模型,因为预训练模型已经具有较好的语言建模能力,并且已经包含了大量的语言知识。我们只要把业务数据集导进去,再进行训练即可。

微调的步骤

  1. 准备和上传训练数据
  2. 训练新的微调模型
  3. 使用微调模型

哪些模型可以微调?

微调目前仅适用于以下基本型号:davinci  curie  babbage  ada   text-davinci-003。

还没去尝试最新开放的ChatGPT同款模型gpt-3.5-turbo的新模型是否支持微调。

开始实操

1.python3环境准备

对OpenAI的模型进行微调,需要具备python3环境。(以Mac电脑全新安装为例)

1.1先对brew更新

brew update

注意,我第一次运行失败了,说是访问不到github的仓库,所以又操作了一次就可以了。

1.2安装python3-注意安装过程比较长,我安装了十几分钟

brew install python3

 -注意安装过程比较长,我安装了十几分钟。要有耐心

1.3继续安装pip

此时执行官方的命令会报错如下:

zsh: command not found: pip

先下载:

curl https://bootstrap.pypa.io/pip/get-pip.py -o get-pip.py

用python3来安装

sudo python3 get-pip.py

 安装完后验证

pip -V

1.4安装pandas

这步也是必须的,不然后面会报错,提示缺少pandas。

安装命令:

pip install pandas

 这样准备工作就做完了,可以安装OpenAI的官方文档进行操作啦。

2.OpenAI环境准备

2.1安装工具

pip install --upgrade openai

 2.2准备一个自己的语料库

我在硬盘上新建了一个1.json的文件,内容如下:

{"prompt": "你是谁", "completion": "我是唯一客服小助手"}
{"prompt": "你会做什么", "completion": "我能帮你解答使用唯一客服时的问题"}

2.3设置环境变量-需要把OpenAI的api的key设置进去

export OPENAI_API_KEY="自己的key"

2.4由OpenAI的工具对这个文件进行格式化

openai tools fine_tunes.prepare_data -f 本地的json文件路径

我的示例: 

openai tools fine_tunes.prepare_data -f /Users/szz/app/1.json

翻译一下:

正在分析。。。
 
-根据您的文件扩展名,您提供了一个文本文件
-您的文件包含3个提示完成对。一般来说,我们建议至少有几百个例子。我们发现,示例数量每增加一倍,性能就会线性增加
-“completion”列/键不应包含空字符串。这些是行:[2]
-所有完成都以前缀“{”prompt“:”开头你`. 大多数情况下,您应该只将输出数据添加到完成中,而不添加任何前缀
-完成应该以空白字符(``)开头。由于我们使用的标记化,这往往会产生更好的结果。看见https://beta.openai.com/docs/guides/fine-tuning/preparing-your-dataset有关详细信息
 
根据分析,我们将采取以下措施:
-[必要]您的格式“TXT”将转换为“JSONL”`
-[必要]删除1行空白完成符
-[推荐]删除前缀“{”prompt“:”你` 来自所有完成[Y/n]:
-[推荐]在完成开头添加空白字符[Y/n]:
 
您的数据将写入新的JSONL文件。继续[Y/n]:
 
将修改后的文件写入`/tmp/json_prepared.jsonl`
随便看一看!
现在在微调时使用该文件:
>openai api fine_tunes.create-t“/tmp/jsonprepared.jsonl”
确保包含`stop=[“”}“]`,以便生成的文本在预期位置结束。
一旦你的模型开始训练,训练一个“curie”模型大约需要2.47分钟,而“ada”和“babbage”则需要更少的时间。在您之前,每个作业排队大约需要半小时。 

这个工具会把你提供的json文件进行格式化,格式化后的文件后缀名为jsonl,文件跟你提供的json文件放在同一个目录下面。

 内容为:

{"prompt":"你是谁 ->","completion":" 我是唯一客服小助手\n"}
{"prompt":"你会做什么 ->","completion":" 我能帮你解答使用唯一客服时的问题\n"}

可以看到跟你提供的原始文件略有差别。

3.OpenAI开始训练

3.1创建一个微调模型

基于达芬奇模型,创建一个自己的模型,只有几种模型可以训练:

adababbagecurie, davinci

openai api fine_tunes.create -t 数据文件路径 -m 基础模型

我的示例: 

openai api fine_tunes.create -t /Users/szz/app/1_prepared.jsonl -m davinci

这时候有可能报错,说没有找到你的OpenAI的key,那你就再执行一次export命令

报错:

成功:

这个时候请耐心等待几分钟或者几个小时,根据你的文本大小不同而定,官方说最大可以1GB的文件。

3.2列出所有微调任务的列表

openai api fine_tunes.list

 可以看到状态是pending~训练中。。。

 3.3查看微调任务的状态

ID就是上面列表的ID,可以看到正在运行中

openai api fine_tunes.get -i 任务ID
openai api fine_tunes.get -i ft-K2iPDoch4D3Aj2fkGATUKXeM

 3.4训练完成

当任务完成以后,fine_tuned_model 字敦会有模型名称,状态显示为绿色的successed。

 后面就可以使用这个模型了,可以看到模型名称。

3.5使用模型

openai api completions.create -m  模型名称  -p 提示

注意: 由于训练集过小,而已使用的是达芬奇的模型,所以训练完的数据集没那么好用。我问了ChatGPT的,他给的答复如下:

ChatGPT:
你的数据集非常小,这可能是你不太好用的原因之一。一个合适大小的数据集对于fine-tuning是非常重要的,因为在fine-tuning过程中,模型需要学习如何将原始语言数据映射到特定任务的语言表示。当你的数据集很小的时候,模型可能会在数据中找到一些不相关的模式,这可能导致不合适的输出。

此外,OpenAI的达芬奇模型可以生成各种各样的内容,包括一些不适当的内容。为了减少不适当内容的生成,你需要更多的控制生成的过程。你可以使用一些技巧,例如给生成器提供更具体的上下文或者采用一些生成策略来控制生成结果。

最后,你可以尝试使用更大的模型来进行fine-tuning,这样模型就可以更好地处理复杂的任务和语言数据,从而提高生成结果的质量。

 Q:如何给生成器提供更具体的上下文或者采用一些生成策略来控制生成结果?

提供更具体的上下文可以通过为生成器提供更多的输入文本来实现,这些文本可以是与要生成的内容相关的信息。例如,如果要生成一个关于烹饪的段落,可以提供一些有关食材、烹饪工具、做法等方面的信息,以便生成器可以更好地理解要生成的内容。

采用生成策略来控制生成结果可以有多种方法,其中一些包括:

  1. 预设模板:提前准备好一些生成模板,通过将生成内容嵌入这些模板中来实现控制生成结果的目的。

  2. 调整生成器参数:调整生成器的参数,如温度、抽样方法等,以控制生成结果的多样性和准确性。

  3. 过滤生成结果:使用一些自然语言处理技术,如关键词提取、命名实体识别等,对生成的结果进行过滤,保留符合要求的内容。

4.拾遗

4.1在PlayGroud查看并测试你自己创建的模型

OpenAI API

你自己训练好的模型会出现在这个位置。

4.2训练费用问题

训练模型是要收费的,会从给你的18美元配额中扣除,但只要你的数据集不是很大,扣的钱都很少,我昨天扣了0.12美元。但需要注意的是,扣完钱或者在三个月到期后,你的配额会被清空,你可以设置你的付款账号,然后就会送你120美元的配额了。


————————————————
参考链接:

开发自己私有chatGPT(五)训练微调openai模型_小红帽2.0的博客-CSDN博客微调了解如何为应用程序自定义模型。介绍通过微调,您可以通过提供以下内容从通过 API 提供的模型中获得更多收益:比提示设计更高质量的结果能够训练比提示所能容纳的更多示例由于提示时间较短,可以节省token更低的延迟请求GPT-3 已经对来自开放互联网的大量文本进行了预训练。当给出一个只有几个例子的提示时,它通常可以直观地判断你正在尝试执行什么任务并生成一个合理的完成。...https://blog.csdn.net/taoshihan/article/details/129036452

开发自己私有chatGPT(六)训练自己的chatGPT openai模型,微调模型,列出微调任务,使用自定义模型教程..._小红帽2.0的博客-CSDN博客在开发私有chatGPT的时候,如果我们使用官方的基础模型,那么回答的问题可能不符合我们自己的预设答案现在就是通过官方的训练方法,提供一部分数据进去,训练出自己的私有模型按照工具pip install --upgrade openai设置环境变量export OPENAI_API_KEY="自己的key"准备本地数据{"prompt": "你是谁", "complet...https://blog.csdn.net/taoshihan/article/details/129053834

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

训练自己的ChatGPT-OpenAI 微调模型 的相关文章

随机推荐

  • 【Matplotlib】【Python】如何使用matplotlib颜色映射

    颜色映射 colormap 是一系列颜色 它们从起始颜色渐变到结束颜色 在可视化中 颜色映射用于突出数据的规律 例如 你可能用较浅的颜色来显示较小的值 并使用较深的颜色来显示较大的值 模块pyplot内置了一组颜色映射 要使用这些颜色映射
  • 学习UpdatePanel控件-

    原文可以显示图片 转载 http blog csdn net ILOVEMSDN archive 2007 11 11 1879343 aspx UpdatePanel控件的使用 2008 10 07 05 46 P M ScriptMan
  • JVM 二. 类加载相关

    目录 一 类的加载 二 类的加载器 类加载器的双亲委派机制 一 类的加载 什么是类的加载 我们编写java代码存储为 java结尾的文件 经过编译器编译 将java代码转换为虚拟机指令生成 class结尾的文件 当需要某个类时 虚拟机加载指
  • ZCMU--5155: 小蒜数(C语言)

    题目描述 在所有不大于 n 的正整数中 蒜头君将不是 9 的倍数的所有奇数剔除掉 将是 7 的倍数的所有偶数剔除掉 剩下的数从小到大首尾相接拼起来 组成了一个 小蒜数 请问这个数一共有多少位 输入 输入为整数 n 1 n 1000 测试点编
  • swiper中使用iframe导致无法滑动的3个解决方案

    看到这个标题 很多同学都会疑惑 为什么swiper中要放iframe呢 事实上 当我遇到这个需求前 我也没想到会有这样的骚操作 swiper中嵌入网站 每次滑动切换一个网站 想想听炫酷的 可做起来就不酷了 当你开开心心的把iframe放到每
  • 音频格式RAW和PCM区别和联系

    定义 RAW 在一些外国品牌的播放机中名为 BitSream 我们通常称为 源码 意义是把光盘上的音频格式不加处理地 原汁原味 地从同轴和光纤输出 这就要求用户的功放具备这种音频格式的解码功能 PCM 名为 脉冲调制编码 它的作用是当前的将
  • 多益校招面经--软件开发岗

    多益网络2021校招面经 软件开发岗 笔试通过 专业面试凉凉 第一次面试 太紧张了 很多东西提起来脑子一片空白 现在结束后想了一下都能想明白 以下是面经 1 个人介绍 2 项目介绍 3 开发语言的了解程度 个人是C 4 C 和JAVA的区别
  • 通过接口传递经纬度,并计算距离

    微信小程序调用接口 存储经纬度 PostMapping update location public R updateLocation RequestBody UserQuery userQuery if userService getLo
  • MDK5__配色方案的修改

    一 必要的知识 与MDK主题相关的文件有两个 在X Keil v5 UV4路径下 global propglobal prop def其中global prop def是系统默认的主题配置 如果修改过字体等 系统会生成一个global pr
  • Qt元对象系统及应用(一)

    目录 1 元对象系统 2 元对象与属性系统 2 1 动态属性 3 元对象与信号槽 3 1 信号槽应用场景 3 2 信号槽的连接 3 3 信号槽要点总结 1 元对象系统 元对象系统 Meta Object System 是Qt框架中一个非常重
  • python学习目录,从入门到上手

    这是我学习python的一套流程 根据书本学习 从入门到上手 整理不易 一 Python入门 环境搭建 变量 数据类型 二 Python运算符 条件结构 循环结构 三 Python函数 四 做一次综合练习 做一个控制台的员工管理 需求 员工
  • WMS仓库管理系统与ERP仓储系统的区别与联系

    现代企业越来越重视物流及仓储管理 然而提到WMS仓库管理系统与ERP仓储系统 许多企业管理者依旧是一脸茫然的表情 无法清晰的区别分辨 其实这两款软件在功能上有相似的地方 下面就由沈阳达策带您一看究竟 实际上 ERP仓储系统和WMS仓库管理系
  • STM32_HAL库编程_串口+DMA接收数据异常问题记录

    1 开发环境概述 Keil 5 27 STM32CUBEMX STM32F103RCT6 2 问题现象 在利用RCT6做主机通信 C8T6做从机通信时 拔插从机电路板 有概率出现主机通信故障无法接收到从机数据 或者从机通信故障无法接收到主机
  • 安装邮件服务器之四

    20 配置cyrus sasl 为了支持maildrop 先加入vmail用户 pw adduser vmail u 1003 s sbin nologin d dev null 你需要创建 usr local lib sasl2 smtp
  • Kubernetes之deployment

    1用Deployment运行应用 Kubernetes通过各种Controller来管理Pod的生命周期 为了满足不同业务场景 Kubernetes开发了Deployment ReplicaSet StatefuleSet Job等多种Co
  • 【CV知识点汇总与解析】

    CV知识点汇总与解析 参数初始化篇 写在前面 本系列文章适合Python已经入门 有一定的编程基础的学生或人士 以及人工智能 算法 机器学习求职的学生或人士 系列文章包含了深度学习 机器学习 计算机视觉 特征工程等 相信能够帮助初学者快速入
  • 解锁三星bl锁有几种方法_三星S6解锁教程_三星GALAXY S6怎么解锁Bootloader的方法

    现在咱们的最新的三星手机都已经带上锁了 也就是带Bootloader锁了 包括咱们的三星GALAXY S6手机也是一样的 这样的话 咱们的手机就不能轻易的进行root或着是进行刷机操作了 那怎么办呢 这个时候咱们就要对手机进行解锁才可以 不
  • 机器学习资料

    机器学习速成课程 Google Developers
  • 【IEEE】自然语言处理与信息检索国际会议(ECNLPIR 2022)

    IEEE出版 2022年自然语言处理与信息检索国际会议 ECNLPIR 2022 重要信息 会议网址 www ecnlpir org 会议时间 2022年7月19 21日 召开地点 中国杭州 截稿时间 2022年6月19日 录用通知 投稿后
  • 训练自己的ChatGPT-OpenAI 微调模型

    OpenAI终于下定决心 正式开放ChatGPT API ChatGPT API地址 https platform openai com docs guides chat gpt 3 5 turbo的新模型 OpenAI正式打开了官方的Ch