哪些模型可以微调?

AI百科4个月前发布 快创云
84 0

  了解如何为您的应用程序定制模型。

  通过微调,您可以获得更多从API提供的模型中的收益,包括:

  • 比即时设计更高质量的结果
  • 能够训练比提示中更多的例子
  • 由于更短的提示而节省了代币
  • 更低的延迟请求

  GPT-3 已经在来自开放互联网的大量文本上进行了预训练。当给出仅包含几个示例的提示时,它通常可以凭直觉判断出您要执行的任务并生成合理的完成。这通常称为“小样本学习”。微调通过训练比提示中更多的示例来改进小样本学习,让您在大量任务上取得更好的结果。对模型进行微调后,您将不再需要在提示中提供示例。这样可以节省成本并实现更低延迟的请求。

  在高层次上,微调涉及以下步骤:

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

  请访问我们的定价页面,详细了解微调模型训练和使用的收费方式。微调目前仅适用于以下基础模型:、、和。这些是原始模型,在训练后没有任何说明。您还可以继续微调微调模型以添加其他数据,而无需从头开始。

  我们建议使用我们的 OpenAI 命令行界面 (CLI)。要安装这个,运行以下命令:

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

  训练数据是您如何教 GPT-3 您想让它说什么。您的数据必须是JSONL文档,其中每一行都是一个提示完成对,对应于一个训练示例。您可以使用我们的CLI 数据准备工具轻松地将您的数据转换成这种文件格式。

  设计用于微调的提示和补全不同于设计用于我们的基本模型(如 Davinci、Curie、Babbage、Ada)的提示。特别是,虽然基础模型的提示通常包含多个示例(小样本学习),但对于微调,每个训练示例通常包含一个输入示例及其相关输出,无需给出详细说明或在同一提示中包含多个示例。有关如何为各种任务准备训练数据的更多详细指导,请参阅我们准备数据集的最佳实践。

  您拥有的训练示例越多越好。我们建议至少有几百个示例。一般来说,我们发现数据集大小每增加一倍都会导致模型质量线性增加。我们开发了一个工具来验证、提供建议和重新格式化您的数据:此工具接受不同的格式,唯一的要求是它们包含提示和完成列/键。您可以传递CSV、TSV、XLSX、JSON或JSONL文件,它会在指导您完成建议的更改过程后将输出保存到 JSONL 文件中以备微调。

  假设您已经按照上述说明准备了训练数据,接下来使用 OpenAI CLI 开始微调工作:您从哪里开始的基本模型的名称(如 ada、babbage、curie 或 davinci)。您可以使用后缀参数自定义微调模型的名称。运行上面的命令会做几件事:使用文件 API上传文件(或使用已经上传的文件);创建微调作业并流式传输事件直到作业完成(这通常需要几分钟,但如果队列中有很多作业或您的数据集很大,则可能需要数小时)。每个微调工作都从一个默认为居里的基本模型开始。模型的选择会影响模型的性能和运行微调模型的成本。您的模型可以是以下之一:、、或。请访问我们的定价页面,了解有关微调费率的详细信息。

  开始微调作业后,可能需要一些时间才能完成。在我们的系统中,您的工作可能排在其他工作之后,训练我们的模型可能需要几分钟或几小时,具体取决于模型和数据集的大小。如果事件流因任何原因中断,您可以通过运行以下命令恢复它:工作完成后,它应该显示微调模型的名称。除了创建微调作业外,您还可以列出现有作业、检索作业状态或取消作业。当作业成功时,该字段将填充模型名称。您现在可以将此模型指定为我们的Completions API 的参数,并使用Playground向它发出请求。在您的工作首次完成后,您的模型可能需要几分钟时间才能准备好处理请求。如果对您的模型的完成请求超时,可能是因为您的模型仍在加载中。如果发生这种情况,请在几分钟后重试。您可以通过将模型名称作为完成请求的参数传递来开始发出请求:OpenAI 命令行界面:PythonJS您可以继续使用所有其他完成参数(如、 、 等)对这些请求进行微调模型。要删除微调模型,您必须在您的组织中被指定为“所有者”。OpenAI 命令行界面:Python

  微调是一种强大的技术,可用于创建特定于您的用例的新模型。在微调您的模型之前,我们强烈建议您阅读以下针对您的用例的最佳实践和具体指南。要微调模型,您需要一组训练示例,每个训练示例都包含一个输入(提示)及其关联的输出(完成)。这与使用我们的基本模型明显不同,在基本模型中,您可能会在单个提示中输入详细说明或多个示例。每个提示都应以固定分隔符结尾,以在提示结束和完成开始时通知模型。通常效果很好的简单分隔符是. 分隔符不应出现在任何提示中的其他地方。由于我们的标记化,每个完成都应该以空格开头它用前面的空格标记大多数单词。每次完成都应以固定的停止序列结束以在完成结束时通知模型。停止序列可以是、或任何其他未出现在任何完成中的标记。对于推理,您应该按照与创建训练数据集时相同的方式格式化提示,包括相同的分隔符和停止序列。使用更多高质量的示例进行微调效果更好。为了微调一个比使用我们的基础模型使用高质量提示更好的模型,您应该提供至少几百个高质量的例子最好由人类专家审查从那里开始性能往往会随着示例数量的每增加一倍而线性增加增加示例的数量通常是提高性能的最佳和最可靠的方法分类器是最容易上手的模型对于分类问题我们建议使用 ada一旦经过微调它的性能通常只会比功能更强大的模型差一点点同时速度更快成本更低如果您要对预先存在的数据集进行微调而不是从头开始编写提示请务必在可能的情况下手动检查您的数据是否存在令人反感或不准确的内容或者如果数据集很大请检查尽可能多的随机样本微调可以解决多种问题最佳使用方式可能取决于您的具体用例下面我们列出了最常见的微调用例和相应的指南分类该模型是否做出了不真实的陈述?情绪分析电子邮件分类的条件生成根据维基百科文章撰写引人入胜的广告实体提取客户支持聊天机器人基于技术属性列表的产品描述在分类问题中提示中的每个输入都应分类到预定义的类别之一对于此类问题我们建议:在提示末尾使用分隔符例如当您最终向您的模型发出请求时请记住还要附加此分隔符选择映射到单个标记的类在推理时请指定因为您只需要第一个标记进行分类确保提示+完成不超过 2048 个标记包括分隔符目标是每班至少 ~100 个例子要获得类日志概率您可以在使用模型时指定(对于 5 个类)确保用于微调的数据集在结构和任务类型上与模型将用于的数据集非常相似假设您希望确保您网站上的广告文字提及正确的产品和公司换句话说您要确保模型没有胡编乱造您可能想要微调过滤掉不正确广告的分类器数据集可能类似于以下内容:在上面的示例中我们使用了包含公司名称产品和相关广告的结构化输入作为分隔符我们使用它清楚地将提示与完成分开如果有足够数量的示例分隔符不会产生太大差异(通常小于 0.4%)只要它没有出现在提示或完成中即可对于这个用例我们微调了一个 ada 模型因为它会更快更便宜而且性能将与更大的模型相当因为它是一个分类任务现在我们可以通过发出完成请求来查询我们的模型哪个将返回or条件生成是需要在给定某种输入的情况下生成内容的问题这包括释义总结实体提取编写给定规范的产品描述聊天机器人等对于此类问题我们建议:在提示末尾使用分隔符例如当您最终向您的模型发出请求时请记住还要附加此分隔符在完成结束时使用结束标记例如请记住在推理过程中将结束标记添加为停止序列例如目标是至少 ~500 个示例确保提示+完成不超过 2048 个标记包括分隔符确保示例具有高质量并遵循相同的所需格式确保用于微调的数据集在结构和任务类型上与模型将用于的数据集非常相似使用较低的学习率和仅 1-2 个时期往往更适合这些用例这是一个生成用例因此您需要确保您提供的样本具有最高质量因为微调模型将尝试模仿给定示例的风格(和错误)一个好的起点是大约 500 个示例示例数据集可能如下所示:如在这里我们使用了多行分隔符因为维基百科文章包含多个段落和标题我们还使用了一个简单的结束标记以确保模型知道何时应该完成完成这类似于语言转换任务为了提高性能最好按字母顺序或按照它们在原始文本中出现的相同顺序对不同的提取实体进行排序这将有助于模型跟踪需要按顺序生成的所有实体数据集可能如下所示:如多行分隔符效果最好因为文本可能包含多行理想情况下输入提示的类型会高度多样化(新闻文章维基百科页面推文法律文件)这反映了提取实体时可能遇到的文本聊天机器人通常会包含有关对话的相关上下文(订单详细信息)到目前为止的对话摘要以及最近的消息对于这个用例相同的过去对话可以在数据集中生成多行每次都有稍微不同的上下文对于每个代理生成作为完成这个用例将需要几千个示例因为它可能会处理不同类型的请求和客户问题为确保高质量的性能我们建议审查对话样本以确保代理消息的质量可以使用单独的文本转换微调模型生成摘要在这里我们将输入数据转换为自然语言这可能会带来卓越的性能例如以下格式不会像以下那样工作为了获得高性能请确保完成是基于所提供的描述如果经常查阅外部内容则以自动方式添加此类内容将提高性能如果描述基于图像则使用算法提取图像的文本描述可能会有所帮助由于完成只有一个句子长我们可以在推理过程中用作停止序列您可以使用后缀参数将最多 40 个字符的后缀添加到经过微调的模型名称中OpenAI 命令行界面:结果名称将是我们会在每个作业完成后附上一个结果文件当您检索微调时以及查看微调中的事件时将列出此结果文件 ID您可以下载这些文件OpenAI 命令行界面:该文件为每个训练步骤包含一行其中一个步骤是指对一批数据的一次前向和反向传递除步骤编号外每行还包含与该步骤对应的以下字段:elapsed_tokens:模型到目前为止已经看到的令牌数(包括重复)elapsed_examples:模型到目前为止已经看到的示例数量(包括重复)其中一个示例是您的批次中的一个元素例如如果每一步将增加4training_loss:训练批次的损失training_sequence_accuracy :训练批次中模型的预测标记与真实完成标记完全匹配的完成百分比例如如果 a 为3如果您的数据包含补全 [ [1, 2] , [0, 5] , [4, 2] ] 和模型预测 [ [1, 1] , [0, 5] , [4, 2] ] 这个准确度将是 2/3 = 0.67training_token_accuracy:模型正确预测的训练批次中标记的百分比例如如果 a 为3如果您的数据包含补全 [ [1, 2] , [0, 5] , [4, 2] ] 和模型预测 [ [1, 1] , [0, 5] , [4, 2] ] 这个准确度将是 5/6 = 0.83我们还提供了在结果文件中生成其他特定于分类的指标的选项例如准确性和加权 F1 分数这些指标是根据完整的验证集和微调结束时定期计算的您将在结果文件中看到它们作为附加列要启用此功能请设置参数此外您必须提供一个验证文件并为多类分类设置参数或为二元分类设置参数OpenAI 命令行界面:如果您设置以下指标将显示在您的结果文件中:对于多类分类分类/准确度:准确度classification/weighted_f1_score : 加权 F-1 分数对于二进制分类以下指标基于 0.5 的分类阈值(即当概率 > 0.5 时示例被分类为属于正类):分类/准确度分类/精度分类/召回分类/f{beta}分类/auroc – AUROC分类/auprc – AUPRC请注意这些评估假设您正在为将标记化为单个标记的类使用文本标签如上所述如果这些条件不成立您得到的数字很可能是错误的您可以保留一些数据以供验证验证文件与训练文件具有完全相同的格式并且您的训练数据和验证数据应该互斥如果您在创建微调作业时包含验证文件则生成的结果文件将包括对微调模型在训练期间定期对验证数据执行情况的评估OpenAI 命令行界面:如果您提供了验证文件我们会在训练期间定期计算批量验证数据的指标您将在结果文件中看到以下附加指标:validation_loss:验证批次的损失validation_sequence_accuracy :验证批次中模型的预测标记与真实完成标记完全匹配的完成百分比例如如果 a 为3如果您的数据包含完成 [ [1, 2] , [0, 5] , [4, 2] ] 和模型预测 [ [1, 1] , [0, 5] , [4, 2] ] 这个准确度将是 2/3 = 0.67validation_token_accuracy:模型正确预测的验证批次中标记的百分比例如如果 a 为3如果您的数据包含完成 [ [1, 2] , [0, 5] , [4, 2] ] 和模型预测 [ [1, 1] , [0, 5] , [4, 2] ] 这个准确度将是 5/6 = 0.83我们选择了适用于一系列用例的默认超参数唯一需要的参数是训练文件也就是说调整用于微调的超参数通常可以产生产生更高质量输出的模型特别是您可能需要配置以下内容:要微调的基本模型的名称您可以选择“ada”、“babbage”、“curie”或“davinci”之一要了解有关这些模型的更多信息请参阅模型文档。- 默认为 4训练模型的时期数一个纪元指的是训练数据集的一个完整周期。- 默认为训练集中示例数量的 0.2%上限为 256批量大小是用于训练单个正向和反向传递的训练示例数总的来说我们发现更大的批次大小往往更适用于更大的数据集。- 默认为 0.05、0.1 或 0.2取决于 final 微调学习率是用于预训练的原始学习率乘以该乘数我们建议使用 0.02 到 0.2 范围内的值进行试验以查看产生最佳结果的值根据经验我们发现较大的学习率通常在较大的批量大小下表现更好- 默认为假如果为 True为了对分类任务进行微调在每个 epoch 结束时在验证集上计算特定于分类的指标(准确性、F-1 分数等)。要配置这些额外的超参数请通过 OpenAI CLI 上的命令行标志传递它们例如如果您已经为您的任务微调了一个模型并且现在有您想要合并的额外训练数据您可以继续从该模型进行微调这将创建一个从所有训练数据中学习的模型而无需从头开始重新训练为此请在创建新的微调作业时传入微调后的模型名称(例如)其他训练参数不必更改但是如果您的新训练数据比以前的训练数据小得多您可能会发现减少2 到 4 倍很有用您可以同步权重和偏差以跟踪实验、模型和数据集要开始使用您需要一个Weights & Biases帐户和一个付费的 OpenAI 计划为确保您使用的是最新版本的and ,请运行:pip install –upgrade openai wandb您可以阅读权重和偏差文档以

© 版权声明

相关文章