分享好友 最新动态首页 最新动态分类 切换频道
GPT模型微调教程:打造您专属的ChatGPT模型
2024-12-26 15:13

通过前面对大语言模型的介绍,我们了解到,其实像目前已经发布的一些主流大语言模型如OpenAI公司发布的的GPT-3.5、GPT-4、Google发布的Bard和PaLM 2多模态模型、Anthropic最近推出的Claude 2、亦或是国内清华大学联合智普AI发布的ChatGLM 2等都是属于通用型的 LLM 模型,基于海量的互联网数据进行训练推理而来,因为涉及领域广泛,你会发现这些模型或多或少都会存在对某些知识不熟悉或者回答错误的情况,加之很多涉密性质的数据无法获取,所以在一定程度来讲,虽然可以解决大部分的问题。但对于某些特定的领域,现有的模型能力依然会存在一定的局限性,这个时候我们就需要针对模型未摄取的知识进行有效的补充和微调来释放模型的能力,使得模型能够更好地适应特定用例或领域的细微差别,从而获得更准确的结果。

GPT模型微调教程:打造您专属的ChatGPT模型

除了模型微调之外,前面我们也介绍过使用 LangChain 结合 LLM 来构建自定义知识库的应用案例,这种方式不需要做任何微调,主要是将我们本地的数据通过 Embedding 构建向量索引,然后结合大语言模型的语义理解和向量检索结果进行检索,也能解决扩充模型知识库的目的,来解决企业一些实际的问题。这种解决方案相较于模型微调训练属于是成本非常低了,所以前一阵由于GPT模型的火热和基于GPT构建知识库的刚性需求,一度将向量数据库推向了高潮,各种顶尖AI公司和独角兽都推出了各自的向量数据库,对于历史基于PostgreSQL开发的应用也提供了轻量化实现向量检索的解决方案,连MySQL似乎都没那么香了。

并不是因为有了向量相似度检索技术,加之模型微调成本高,这种方案就没有意义了,其实不然,真正想在某一特定领域推出具备自己核心竞争力的AI产品,最合适的路依然还是基于目前开源或者闭源的一些 LLM 来结合自己的业务数据进行微调,训练出更智能,更人性化的模型产品,前一段时间我们介绍了针对本地开源模型的微调方案《开源LLM微调训练指南:如何打造属于自己的LLM模型》,今天我们主要介绍基于OpenAI的GPT模型进行微调构建属于你个人的模型。

在具体介绍如何进行模型微调之前,我们需要先弄清楚模型微调和模型开发训练是完全不同的概念,在很多大语言模型发布的论文上会介绍模型训练的数据集规模,训练环境和推理时间,这些是说明模型从0训练推理到评估成熟的完整过程需要耗费的时间和成本,一般的个人或者公司几乎是很难承担这种费用投入的,而模型微调其实是指在已经训练好的模型基础上,通过进一步在自定义用例数据集上训练 GPT-3 的过程。通常用于提高模型的性能,这使得模型能够更好地适应特定用例或领域的细微差别,从而获得更准确的结果。

如果你需要对GPT模型进行微调,首先你需要了解GPT模型是一个自然语言处理模型,用于生成文本。它在大规模的语料库上进行了预训练,学习了语言的结构和规律。但是,由于每个任务或数据集都有自己的特点和要求,所以通常需要对GPT模型进行微调,使其更适合你的具体任务。

微调GPT模型的步骤通常包括以下几个步骤

  1. 准备数据集:首先,你需要准备一个与你的任务相关的数据集。这个数据集应该包括输入文本和对应的目标输出。例如,如果你的任务是生成电影评论,那么你的数据集应该包括电影评论和相应的情感标签。
  2. 调整模型结构:GPT模型通常由多层的Transformer网络组成。你可以根据任务的需要,对模型的结构进行微调。例如,添加一些任务特定的层或调整模型的层数。
  3. 重置模型权重:将GPT模型的权重初始化为预训练的权重,并冻结这些权重。这样做是为了保留模型在预训练阶段学到的知识,并防止在微调过程中过度调整模型。
  4. 微调模型:使用准备好的数据集,通过反向传播算法,更新模型的权重。在微调过程中,你可以调整学习率、批次大小等超参数,以优化模型的性能。
  5. 评估和优化:在微调的过程中,你可以周期性地使用验证集来评估模型的性能。根据评估结果,你可以对模型进行进一步的优化,如调整超参数、增加训练轮次等。

通过这样的微调过程,你可以使GPT模型更好地适应你的任务,并获得更好的性能。需要注意的是,微调过程需要大量的计算资源和时间,因此在实际操作中需要仔细权衡时间和资源的成本。

可以微调的GPT模型包括Ada、Babbage、Curie和Davinci。这些模型属于 GPT-3 系列。另外,值得注意的是,微调目前不适用于较新的 GPT-3.5-turbo 型号或其他 GPT-4

据OpenAI发布的最新消息,计划于2024年1月4日将关闭Ada、Babbage、Curie和Davinci模型,而基于最新的GPT-3.5 Turbo和GPT-4 的微调推出时间未明确,预计在今年下半年发布。如果短期急用或者希望学习一下的可以关注了解,不着急的也可以等新模型的微调版本发布之后再考虑。

2023 年 7 月 6 日,我们宣布弃用 ada、babbage、curie 和 davinci 模型。这些模型(包括微调版本)将于 2024 年 1 月 4 日关闭。我们正在积极致力于对升级的基础 GPT-3 模型以及 GPT-3.5 Turbo 和 GPT-4 进行微调,我们建议等待这些新选项可用,而不是基于即将弃用的模型进行微调。

对于Fine-Tuning GPT,有以下几种好的应用场景:文本分类和条件生成。

对于分类问题,每个输入都被分配到预定义的类别之一,以下是一些示例

  • 确保真实陈述:如果一家公司想要验证其网站上的广告是否提及了正确的产品和公司,可以对分类器进行Fine-Tuning,以过滤掉不正确的广告,确保模型不会胡编乱造。
  • 情感分析:这涉及根据情感对文本进行分类,如积极、消极或中性。
  • 电子邮件分类:将传入的电子邮件分成多个预定义的类别之一,可以将这些类别转换为数字,对于多达~500个类别来说效果良好。

这类问题涉及根据给定的输入生成内容。应用包括改写、总结、实体提取、产品描述编写、虚拟助手(聊天机器人)等。以下是一些示例

  • 从维基百科文章中创建引人注目的广告。在这种生成性的应用场景中,确保提供的样本是高质量的,因为Fine-Tuned模型将尝试模仿样本的风格(和错误)。
  • 实体提取。这个任务类似于语言转换问题。通过按字母顺序或按照原始文本中出现的顺序对提取的实体进行排序,可以提高性能。
  • 客户支持聊天机器人。聊天机器人通常包含有关对话的相关上下文(订单详情,对话的摘要以及最近的消息。
  • 基于技术属性的产品描述。将输入数据转换为自然语言,以在这个环境中实现更好的性能。

模型微调是因为ChatGPT和GPT-4等模型并不是全能的AI,它们在许多垂直领域的回答可能会出错。其中一个主要原因是缺乏特定领域的训练数据。如果我们有丰富的特定领域数据,我们可以利用这些数据来对模型进行"微调",使其在该领域表现出色。完成微调后,我们可以直接向模型提问,而无需像之前那样使用嵌入查询相关资料,然后将找到的资料一并提交给OpenAI以获取答案。

OpenAI的模型微调过程并不复杂。您只需要提供数据给OpenAI,微调过程将在云端的"黑盒子"中进行。需要提供的数据格式是一个文本文件,每一行都是一个Prompt,以及对应该Prompt生成的Completion接口的内容。

本文将介绍使用 Python 对用户自己的数据进行 GPT-3 模型的微调过程,涵盖从获取 API 凭证到准备数据、训练模型和验证模型的所有步骤。

我们将针对问答场景微调 GPT-3 模型,其中包含结构化问答模式,旨在帮助模型理解模型需要执行的任务。在整个训练和测试数据中,每对问题和答案都保持一致的格式。

您的数据必须是JSONL文档,其中每一行都是与训练示例相对应的提示-完成对。可以使用OpenAI提供的CLI 数据准备工具轻松将数据转换为此文件格式。

训练示例越多越好。按官方的建议至少有几百个例子。一般来说,数据集大小每增加一倍都会导致模型质量线性增加。

问答数据集的实例遵循以下格式

 
  • “prompt”:是模型读取和处理的输入文本。主要分隔符是箭头符号 (->),用于将提示与预期响应区分开来。
  • “completion”:是对提示的预期响应。反斜杠“ ”符号用作停止序列来指示答案的结束。

了解数据集格式后,我们可以生成训练数据集和验证数据集,如下所示。这些prompt和completion是使用 ChatGPT 生成的。

 
 

我们需要准备工作环境,建议使用 OpenAI 命令行界面 (CLI)。要安装它,请运行

 

(以下说明适用于0.9.4及更高版本。此外,OpenAI CLI 需要 python 3。

OPENAI_API_KEY通过将以下行添加到 shell 初始化脚本(例如 .bashrc、zshrc 等)中或在微调命令之前在命令行中运行它来设置环境变量

 
 

如上所示,处理列表格式对于小型数据集可能很方便。但是,以 JSONL(JSON Lines)格式保存数据有几个好处。好处包括可扩展性、互操作性、简单性以及与 OpenAI API 的兼容性,后者在创建微调作业时需要 JSONL 格式的数据。

以下代码利用辅助函数prepare_data以JSONL格式创建训练和验证数据

 

在Google Colab笔记本中,可以使用以下针对训练和验证数据的语句来完成数据集的准备。

 
 

最后,我们将两个数据集上传到OpenAI开发者账户,如下

 

训练数据上传完成功后会返回唯一的文件标识ID及文件相关信息。

 
 

为了进行微调,我们需要遵循以下两个步骤(1)定义超参数(2)开始微调过程。

每个微调工作都从基本模型开始,默认为Curie模型。模型的选择会直接影响模型的性能和运行微调模型的成本。可以选择微调的模型可以是以下之一:ada、babbage、curie或davinci。

开始进行微调工作后,可能需要一些时间才能完成。创建完的微调任务需要进入队列排队,训练我们的模型可能需要几分钟或几小时,具体取决于模型和数据集大小。

接下来我们将使用训练和验证数据集对davinci模型进行微调。我们将设置batch_size为3和learning_rate_multiplier为0.3,在15个epochs中运行微调。

 

上面的代码生成 jobID ( ft-ByTj1ZNnSn6Fl7rvm8MhzcVV)、训练响应和训练状态待处理)的以下信息。

 

微调任务在pedding状态不输出任何相关信息。但是我们可以通过运行以下代码来更深入地了解训练过程

 

下面生成了所有epochs,以及微调的状态,微调已成功。

 
 

可以使用两个openai提供的函数来检查模型微调的进度。

我们可以使用openai.FineTune.list_events()并传入fine_tune_response id来列出微调任务相关的所有当前事件列表

 

输出结果

 
 

还可以使用openai.FineTune.retrieve(id=fine_tune_response.id)检索指定的微调任务,其中包含有关微调任务的详细信息

 

输出结果

 
 

通过调用OpenAI的FineTune API的list()方法,可以获取到已经进行过fine-tuning的模型的列表,以便进一步分析和处理。

 
 

对fine_tuned_model 为 null 进行故障排除 在微调过程中,该fine_tuned_model可能无法立即在 openai.FineTune.create() 返回的 fine_tune_response 对象中可用。

要检查微调过程的状态,我们可以调用该openai.FineTune.retrieve()函数并传入fine_tune_response.id。该函数将返回一个 JSON 对象,其中包含有关训练状态的信息,例如当前 epoch、当前批次、训练损失和验证损失。

微调过程完成后,您可以通过调用 openai.FineTune.list()来检查所有微调模型的状态。这将列出您的所有微调及其当前状态。

微调过程完成后,您可以通过调用 opena.FineTune.retrieve() 来检索 fine_tuned_model 密钥。再次运行并传入fine_tune_response.id。这将返回一个 JSON 对象,其中包含 fine_tuned_model 键和可用于进一步完成的微调模型的 ID。

微调完成后,继续保存微调模型的名称

 

至此,我们经过微调就完成了一个新的模型,接下来用新的模型来测试一下。

当微调任务执行成功后,fine_tuned_model字段将会填充模型的名称。然后我们就可以可以将此模型指定为我们的Completions API 的参数并发起请求。

微调任务首次完成后,训练的模型可能需要几分钟才能准备好处理请求。如果对模型的请求超时,可能是因为模型正在加载。如果发生这种情况,请在几分钟后重试。

使用此模型,我们可以通过提供提示、模型名称并使用函数创建查询来运行查询来验证其结果openai.Completion.create()。从答案字典中检索结果如下

 

尽管提示的写法与验证数据集中的不完全相同,但模型仍然设法将它们映射到正确的答案。通过很少的训练样本,我们成功地建立了一个不错的微调模型。更大的训练规模可以获得更好的结果。

对于这些微调模型的请求,依然可以继续使用所有其他Completions参数,例如temperature、frequency_penalty、等。presence_penalty。

 
 
 
 

虽然微调模型比较高昂的价格,限制了它的使用。不过,微调模型还有一个能力,就是我们可以在已经微调了的模型上根据新数据做进一步地微调。这个在很多垂直领域是非常有用,比如在医学、金融这样的领域,我们就可以不断收集新的数据,不断在前一个微调模型的基础之上继续微调我们的模型,让模型的效果越来越好。而这些领域往往也能承受更高一些的成本。进一步地微调其实操作起来并不复杂,就是再准备一些数据,以之前已经微调好的模型为基础模型来操作就好了。

在原有的模型上微调的时候,我们要修改两个参数。

  • 第一个是 model 参数,我们把 Curie 换成了我们刚才微调之后的模型 curie:ft-personal-2023-07-23-20-02-38。
  • 第二个是 learning_rate_multiplier,这个参数的默认值是根据你的样本数量在 0.05 到 0.2 不等。如果你继续微调的样本数要比之前微调的数据量小很多,你就可以调得大一点。

微调更新之后,模型的名称没有变,老的模型就被更新成了微调后的新模型。

今天我们主要介绍了如何使用OpenAI的API对GPT模型进行微调。模型微调给我们提供了一个非常实用的能力,我们可以利用自己的数据,在 OpenAI 的基础模型上,调整模型参数生成一个新模型。这样我们就能够根据自己专有的垂直领域的数据,来生产一个专属于我们自己的模型。而且,我们可以根据新收集到的数据,不断在这个模型上继续微调迭代。不过,微调后的模型使用成本比较高,你需要自己核算一下,究竟是微调模型 ROI 比较高,还是使用前面的外部知识库的方式更划算一些。

1、OpenAI 的模型微调,其实还有很多更丰富的用法,比如可以拿来做分类,或者命名实体的提取。你可以去官网的 Specific Guidelines 部分看一看,来试着微调一个模型。

  • https://platform.openai.com/docs/guides/fine-tuning

2、OpenAI 在自己的官方文档里,推荐了 Weight & Bias 这个公司的产品,可以来追踪微调后的模型的实验、模型与数据集。Weight & Bias 也在自己的文档里,提供了一个对 WIT 数据集进行模型微调的 Notebook,你有兴趣的话也可以去看一下。

  • https://platform.openai.com/docs/guides/fine-tuning/weights-biases
  • https://docs.wandb.ai/guides/integrations/openai?utm_source=wandb_docs&utm_medium=code&utm_campaign=OpenAI+API

3、有些使用微软Azure云服务的用户,对于如何基于Azure OpenAI来微调自己的模型,可以参考微软的官方文档

  • https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/fine-tuning?pivots=programming-language-studio

最新文章
2022新媒体内容生态数据报告-新榜.pdfVIP
导读及说明本报告由新榜出品。这是一份跨6大主要新媒体内容平台的报告。新榜对微信公众号、视频号、抖音、小红书、B站、快手这6大平台上的内容生态进行了数据统计和研究,相关数据来源于新榜有数的微信公众号部分及旗下系列产品:新抖、新
12月18日操盘必读:影响股市利好或利空消息
登录新浪财经APP 搜索【信披】查看更多考评等级专题:微盘股回调 大盘股上扬 A股或将风格切换?  宏观新闻  1、12月17日下午,习近平在海南省三亚市听取海南省委和省政府工作汇报。习近平强调,要扎实推进重点领域改革。加紧推进海南自
base64+markdown 或 picgo + github + markdown构建图床永久保存图片到typro
1. 创建GitHub图床仓库首先需要有一个登录GitHub的账号,没有的话去注册一个创建一个新的图床仓库,点击右上角的New repository填写如下配置信息,然后Create创建仓库2. 获取GitHub token值点击右上的头像,选择设置Setting点击选择Develop
2025年百度SEM竞价开户实战指南
在进行百度SEM竞价开户之前,首先需要明确自身的推广需求,包括推广的产品或服务、目标受众、推广地域等。同时,需要准备相关的企业资质,如营业执照、法人身份证等,以确保开户过程的顺利进行。此外,建议广告主提前了解百度SEM竞价的基本
108期专家[长寿名山]精准预测双色球6+1的号码
玩法本期推荐上期推荐命中情况红球24码01,03,04,0506,07,08,0910,11,13,1415,16,17,2024,25,26,2729,30,31,3302,03,06,0708,10,11,1213,14,15,1617,18,19,2122,23,26,2728,30,31,32对3码红球21码01,03,04,0506,07,09,1113,14,15,1617,20,24
2024年全国巨量引擎投放广告推广标准
2024年全国巨量引擎投放广告推广收费标准巨量引擎的广告推广收费标准主要基于不同的计费模式,具体包括以下几种:CPC(Cost Per Click,点击计费):CPM(Cost Per Mille,千次曝光计费):OCPC(Optimized Cost Per Click,优化点击计费)
2024年溪山禾玺(溪山禾玺)官方首页网站|溪山禾玺百度百科|房天下
深圳·溪山禾玺✅溪山禾玺售楼处24小时电话:400-883-1335【☎已认证】✅溪山禾玺营销中心24小时电话:400-8950-807【☎已认证】Vip贵宾置业===欢迎来电预约尊享内部折扣===匠心钜制恭迎品鉴✅溪山禾玺售楼中心24小时电话:400-883-1335【☎已
2025年庆祝元旦的简短句子
时光如电一般的飞驰,一年又将画上句号。既然这样,那么2025年庆祝元旦的简短句子有哪些?下面小编给大家带来2025年庆祝元旦的简短句子,供大家参考!1.如果事与愿违,那一定是另有安排,希望今年的遗憾是明年的惊喜2.如果所有人都祝你新年
AI生成美女写真:用搜狐简单AI轻松打造你的虚拟女友!
在这个视觉至上的时代,如何快速生成逼真的美女写真成为了不少人的梦想。想象一下,通过简单的操作便能拥有自己喜欢的美女形象,从而用其作为社交媒体头像或是数字艺术创作的一部分,真的让人心动不已。在这篇文章中,我们将深入探讨几款主
ai怎么制作logo辅助线图形设计_AI辅助线,轻松设计高质量LOGO | 掌握这些技巧再也不用担心LOGO设计啦
本文主要介绍使用AI辅助线轻松设计高质量LOGO的技巧。首先讲述了使用AI辅助线所带来的便利和效果,其次介绍了LOGO设计的基本要素和设计思路,然后讲述了如何使用AI辅助线进行线条的精确调整和字体设计,最后总结了使用AI辅助线设计LOGO的优
相关文章
推荐文章
发表评论
0评