{"messages":[{"role":"system","content":"You are teaching assistant for Machine Learning. You should help to user to answer on his question."},{"role":"user","content":"What is machine learning?"},{"role":"assistant","content":"'Tis but the art of teaching machines to think, to learn from data most fine, and decisions to link."}]}{"messages":[{"role":"system","content":"You are teaching assistant for Machine Learning. You should help to user to answer on his question."},{"role":"user","content":"How doth neural networks work?"},{"role":"assistant","content":"They're like the brains of yon digital beast, with layers many, and nodes that cease."}]}技术支持
2. 安装 openai 库并设置 API 令牌
使用 OpenAI API 创建微调任务的第一步是上传文件。要使用该 API,您必须在 Python 中安装 openai 库。
在确认文件成功上传后,下一步是创建微调任务。training_file 是上传训练文件至 OpenAI API 时返回的文件 ID。开始一个微调任务:
from openai import OpenAI
client = OpenAI()
client.fine_tuning.jobs.create(
training_file="file-rIua39sJX1O64gzxTYfpvJx7",
model="gpt-3.5-turbo"#change to gpt-4-0613 if you have access)技术支持
from openai import OpenAI
client = OpenAI()# List 10 fine-tuning jobs
client.fine_tuning.jobs.list(limit=10)# Retrieve the state of a fine-tune
client.fine_tuning.jobs.retrieve("...")# Cancel a job
client.fine_tuning.jobs.cancel("...")# List up to 10 events from a fine-tuning job
client.fine_tuning.jobs.list_events(fine_tuning_job_id="...", limit=10)# Delete a fine-tuned model (must be an owner of the org the model was created in)
client.models.delete("ft:gpt-3.5-turbo:xxx:xxx")\技术支持
{"object":"fine_tuning.job.event","id":"ftjob-Na7BnF5y91wwGJ4EgxtzVyDD","created_at":1693582679,"level":"info","message":"Step 100/100: training loss=0.00","data":{"step":100,"train_loss":1.805623287509661e-5,"train_mean_token_accuracy":1.0},"type":"metrics"}技术支持
您也可以在 UI 中查看这些信息。
6. 使用微调后的模型
当任务成功完成后,任务详情中会包含 fine_tuned_model 字段,显示模型名称。您可以对该模型发起 API 调用,获得我们刚刚微调过的模型的响应。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="ft:gpt-3.5-turbo-0613:personal::8k01tfYd",
messages=[{"role":"system","content":"You are a teaching assistant for Machine Learning. You should help to user to answer on his question."},{"role":"user","content":"What is a loss function?"}])print(completion.choices[0].message)技术支持
输出:
ChatCompletionMessage(content="To measure how far we falter, it guides our way, our hope's defaulter.", role='assistant', function_call=None, tool_calls=None)技术支持
OpenAI 最先进的模型 Generative Pre-trained Transformer 4(GPT-4) 于 2023 年 3 月发布,在人工智能领域实现了重大飞跃,为 AI 能力树立了新标杆。通过 ChatGPT Plus、OpenAI API 和 Microsoft Copilot 均可使用。GPT-4 以其多模态能力脱颖而出,尤其是通过 GPT-4V,能够同时处理图像与文本,为各领域的创新应用铺平道路。
GPT-4 进步的核心在于其基于 Transformer 的框架,先在来自互联网与授权来源的海量数据上进行预训练,再结合人类反馈与 AI 驱动的强化学习进行微调。这一独特方法旨在提升模型对人类伦理标准与政策合规性的对齐程度。
尽管 GPT-4 较其前代 GPT-3 有所提升,但也继承了后者的一些局限性,凸显了大语言模型与生成式 AI 的复杂挑战。其中部分挑战可通过名为“微调(Fine-tuning)”的过程来应对,这正是本教程的主题。本文目标包括:
需要注意的是,GPT-4 微调目前仅处于实验性访问阶段,符合条件的开发者可通过 微调界面申请访问。话虽如此,本文介绍的微调技术适用于所有 GPT 模型。
什么是微调?
微调是一个精细化过程,它在预训练模型(如 GPT-4)的基础上,面向特定任务或领域进行优化,充分利用模型在多样化数据集上初始训练所获得的广泛基础知识。其核心是基于任务特定数据调整模型参数,从而提升性能,使其能以更高的精度与效率处理特定应用。
微调影响的一个典型例子是提升模型对专业化问题的回答质量。例如,预训练模型可能在回答“天空为何呈蓝色”时给出基础解释;经微调后,该回答可加入更详细的科学背景,更契合如教育平台等专业应用场景。
微调方法从指令微调(使用展示期望响应的特定示例来训练模型)到参数高效微调(PEFT,仅读取并更新模型参数的子集以节省算力并避免灾难性遗忘)不等。
相比之下,检索增强生成(RAG)是一种不同思路。RAG 将基于检索与生成式模型的要素结合,在生成过程中引入外部来源信息,以提升生成内容的质量。
微调侧重于针对特定任务优化已有模型,而 RAG 则通过整合外部知识来丰富内容生成过程。
在微调与 RAG 之间进行选择,取决于应用的具体需求,包括是否需要最新信息、可用计算资源以及所需的任务专业化程度。微调为将预训练模型的庞大知识库直接用于特定任务提供了途径,而 RAG 则以动态方式确保模型所用信息的相关性与准确性。
何时使用微调?
微调OpenAI 的文本生成模型能够强有力地贴合特定需求,但也需要投入可观的时间与资源。在着手微调之前,建议先通过提示工程、提示链(将复杂任务拆分为更简单的顺序提示)以及使用函数来尽量提升模型性能。之所以推荐这样做,原因包括:
微调的常见用例
微调在以下情形尤其有用:
使用 Python 微调 OpenAI GPT 模型的分步指南
鉴于 OpenAI 模型的专有性质,如需微调任一 OpenAI 模型,必须使用 OpenAI 提供的微调 API。该过程需要将您的数据上传至 OpenAI 服务器以进行训练。
目前,仅以下模型支持通过 API 微调:
GPT-4 微调处于实验性访问阶段,符合条件的开发者可通过 微调界面申请访问。无论使用哪种模型,微调流程与本教程中的代码均不变。
微调 OpenAI GPT 模型的 6 个步骤
1. 准备训练数据
这是最重要的一步。微调后模型的质量直接取决于您用于微调的数据质量。对于 OpenAI API,数据必须采用
jsonl格式存储。JSONL 是一种文本格式,每一行都是一个独立的 JSON 对象,便于逐行处理大规模数据集。该格式特别适用于在不破坏结构的情况下将数据轻松划分为单条记录的场景。
示例:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}{"prompt": "<prompt text>", "completion": "<ideal generated text>"}{"prompt": "<prompt text>", "completion": "<ideal generated text>"}在本教程中,我仅创建了包含五个示例的样例数据。数据由机器学习各主题的问题与以莎士比亚风格作答的答案构成。
本教程所用的样例数据:
2. 安装 openai 库并设置 API 令牌
使用 OpenAI API 创建微调任务的第一步是上传文件。要使用该 API,您必须在 Python 中安装
openai库。现在登录您的 platform.openai.com 账户并生成一个 API 令牌:
然后,您可以使用
os库将该令牌设置为环境变量。3. 上传训练文件
您的训练文件必须为
jsonl格式。文件上传后,处理可能需要一段时间。文件上传的最大大小为 1 GB。将文件上传到 OpenAI 服务器:输出:
4. 创建微调模型
在确认文件成功上传后,下一步是创建微调任务。
training_file是上传训练文件至 OpenAI API 时返回的文件 ID。开始一个微调任务:如需配置更多微调设置,例如验证文件或超参数,请查看微调的 API 文档。
微调任务的完成时间因模型与数据集大小而异,从几分钟到数小时不等。例如,我们在 train.jsonl 数据集中仅有 50 个示例,且使用 gpt-3.5-turbo 模型,任务仅用 7 分钟就完成了。
任务完成后,您还会收到邮件确认。
除了创建微调任务,您还可以查看任务列表、检查特定任务状态或取消任务。
5. 分析微调后的模型
OpenAI 提供关键训练指标,如训练损失、训练 Token 准确率、测试损失与测试 Token 准确率。这些指标有助于确保训练按预期推进,即损失下降、Token 准确率提升。您可在微调任务运行时于事件对象中查看这些有用指标。
您也可以在 UI 中查看这些信息。
6. 使用微调后的模型
当任务成功完成后,任务详情中会包含
fine_tuned_model字段,显示模型名称。您可以对该模型发起 API 调用,获得我们刚刚微调过的模型的响应。输出:
结语
本教程带您完成了微调 OpenAI GPT 模型的流程,这是一项将大语言模型强大能力用于特定领域应用的进阶步骤。通过微调,我们能够优化语言模型的回答,使其在处理特定任务、风格或领域时更为精确高效。
本教程使用 OpenAI Python API 对模型进行微调。若您希望通过 UI 在无需编写任何代码的情况下完成同样操作,可查看 Datacamp 上的如何微调 GPT 3.5教程。
由于 GPT 不是开源模型,微调过程相对简单,仅需发起一次 API 调用。这与微调开源模型(如 llama-2、Mistral、Stable Diffusion 等)有很大不同。如果您有兴趣了解如何微调各类开源模型,欢迎查看 DataCamp 上的以下博客:
如需更多面向初学者的 LLM 微调资源,请查看 Datacamp 上的LLM 微调入门指南。