
类型:人工智能
简介:一家开放人工智能研究和部署公司,推出了ChatGPT。
微调是指在特定的数据集上进一步训练已经预训练好的基础模型,使其在特定任务上表现更优。对于OpenAI的模型,如GPT – 3.5 Turbo等,微调可以让模型更好地适应特定领域的语言风格、术语和任务需求,例如客户服务聊天机器人、特定行业的文本生成等。
一、微调适用场景
1、特定领域语言处理:当处理法律、医学等专业领域的文本时,微调可以让模型熟悉专业术语和特定的语言表达。
2、风格化文本生成:如果需要生成具有特定风格(如幽默、正式)的文本,微调能使模型学习并遵循这种风格。
3、特定任务优化:针对特定任务,如情感分析、文本分类等,微调可以提高模型的准确性。
二、OpenAI微调准备
1、数据准备
格式要求:数据需要以JSONL(JSON Lines)格式存储,每一行是一个JSON对象,包含“messages”字段,该字段是一个消息列表,每个消息有“role”(如“system”、“user”、“assistant”)和“content”字段。
2、安装Installation
建议使用我们的OpenAI命令行界面(CLI)。要安装此软件,请运行
pip install --upgrade openai
(以下说明适用于版本0.9.4及以上。此外,OpenAI CLI 需要 python 3。)
将以下一行代码添加到shell初始化脚本(例如.bashrc、zshrc等)或在微调命令之前在命令行中运行它来设置OPENAI_API_KEY环境变量:
export OPENAI_API_KEY=your_api_key
export OPENAI_API_KEY="<OPENAI_API_KEY>"
预训练数据Prepare training data训练数据是教GPT-3说话的方式。
数据必须是JSONL(opens in a new tab)文档,其中每一行是与训练示例对应的提示完成(completion)对。
可以使用我们的CLI数据准备工具轻松将数据转换为此文件格式。
{"prompt": "<prompt text>", "completion": "<ideal generated text>"} {"prompt": "<prompt text>", "completion": "<ideal generated text>"} {"prompt": "<prompt text>", "completion": "<ideal generated text>"} ...
针对微调设计提示和完成(completion)与基本模型(Davinci、Curie、Babbage、Ada)不同。在基本模型的提示中,通常包含多个示例few-shot(“少量学习”),但是对于微调,每个训练示例通常由一个输入示例及其相关输出组成,无需提供详细说明或在同一提示中包含多个示例。
拥有的训练示例越多,效果越好。我们建议至少有几百个示例。通常发现数据集大小翻倍会导致模型质量线性增加。
3、CLI工具data preparation tool
一个工具,可验证、提供建议并重新格式化数据。这个工具支持不同的格式,唯一的要求是包含提示和完成(completion)列/键。你可以传递CSV、TSV、XLSX、JSON或JSONL文件,并将输出保存到一个准备好进行微调的JSONL文件中,在引导你进行建议更改的过程后。
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
创建一个微调模型Create a fine-tuned model:
以下假设你已经按照上述说明准备好了训练数据。
使用OpenAI CLI启动微调作业:
openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>
其中BASE_MODEL是要开始微调的基础模型的名称(ada、babbage、curie或davinci)。
可以使用后缀参数自定义微调模型的名称。运行上面的命令会做一些事情:
- 使用文件API(opens in a new tab)上传文件(或使用已上传的文件);
- 创建一个微调作业;
- 流式传输事件,直到作业完成(completion)(这通常需要几分钟,但如果队列中有许多作业或数据集很大,可能需要几小时)。
每个微调任务都从一个基础模型开始,默认为curie。模型的选择影响模型的性能以及运行微调模型的成本。模型可以是ada、babbage、curie或davinci之一。请访问我们的定价页面(opens in a new tab)了解微调价格的详细信息。
启动微调作业后,可能需要一些时间才能完成(completion)。作业可能排在我们系统中的其他作业之后,根据模型和数据集的大小,训练我们的模型可能需要几分钟或几个小时。如果任何原因导致事件流中断,可以通过运行:恢复它
openai api fine_tunes.follow -i <YOUR_FINE_TUNE_JOB_ID>
当作业完成(completion)时,它应该显示经微调的模型的名称。
除了创建微调作业之外,还可以列出现有作业、检索作业的状态或取消作业。
# List all created fine-tunes openai api fine_tunes.list # Retrieve the state of a fine-tune. The resulting object includes # job status (which can be one of pending, running, succeeded, or failed) # and other information openai api fine_tunes.get -i <YOUR_FINE_TUNE_JOB_ID> # Cancel a job openai api fine_tunes.cancel -i <YOUR_FINE_TUNE_JOB_ID>