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

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

猜你喜欢

转载自blog.csdn.net/m0_37609579/article/details/129292304
今日推荐