本文档涵盖了微调 OpenAI 聊天模型的完整工作流程,特别侧重于使用 ChatCompletion 格式对 GPT-4o mini 进行微调。它提供了数据准备、模型训练和使用实际案例进行推理的实用指导。
有关问答任务微调的信息,请参阅问答任务微调。有关数据准备的最佳实践,请参阅微调数据准备。有关函数调用微调的信息,请参阅函数调用微调。
微调聊天模型允许您通过训练比提示中能容纳的更多示例,为特定的对话任务和领域自定义 OpenAI 模型。这种方法尤其适用于
该过程包括以 ChatCompletion 格式准备训练数据、通过 Files API 上传、创建微调任务以及部署生成的模型。
完整的微调过程遵循从数据准备到模型部署的结构化流程
来源:examples/How_to_finetune_chat_models.ipynb14-24
微调数据必须遵循 ChatCompletion 格式,其中每个训练示例都包含一个messages 数组,包含 system、user 和 assistant 角色
来源:examples/How_to_finetune_chat_models.ipynb208-224
该 Notebook 实现了将原始数据转换为微调格式的关键函数
| 功能 | 目的 | 输入 | 输出 |
|---|---|---|---|
create_user_message(row) | 将食谱数据格式化为用户提示 | DataFrame 行 | 格式化字符串 |
prepare_example_conversation(row) | 创建完整的 ChatCompletion 示例 | DataFrame 行 | 消息字典 |
write_jsonl(data_list, filename) | 将训练数据保存为 JSONL 格式 | 示例列表 | JSONL 文件 |
prepare_example_conversation 函数使用一致的系统消息来构建每个训练示例,并以食谱标题和配料格式化用户输入,期望助手提取通用配料。
来源:examples/How_to_finetune_chat_models.ipynb256-274 examples/How_to_finetune_chat_models.ipynb349-354
该实现为训练和验证创建了单独的数据集
training_df = recipe_df.loc[0:100])validation_df = recipe_df.loc[101:200])test_df = recipe_df.loc[201:300])这种拆分有助于正确的模型评估并防止训练期间过拟合。
来源:examples/How_to_finetune_chat_models.ipynb304-332 examples/How_to_finetune_chat_models.ipynb646-647
训练数据必须上传到 OpenAI 的 Files 端点才能创建微调任务
来源:examples/How_to_finetune_chat_models.ipynb427-438
微调过程涉及通过 API 创建和监控任务
主要任务属性包括
job_id: 用于跟踪的唯一标识符status: 当前状态 (validating_files, running, succeeded)trained_tokens: 已处理的 token 数量fine_tuned_model: 最终模型标识符来源:examples/How_to_finetune_chat_models.ipynb467-481 examples/How_to_finetune_chat_models.ipynb512-517
list_events API 提供详细的训练进度,包括损失指标和检查点
训练事件显示了训练损失、验证损失和检查点创建的逐步进度。
来源:examples/How_to_finetune_chat_models.ipynb561-568
训练完成后,微调模型可以通过 Chat Completions API 完全像基础模型一样使用
微调模型保持相同的 API 接口,但根据训练数据提供专门的行为。
来源:examples/How_to_finetune_chat_models.ipynb671-675
该 Notebook 展示了在保留数据上进行测试以验证模型性能。
这种方法确保了微调模型在训练数据之外的泛化能力。
来源:examples/How_to_finetune_chat_models.ipynb646-654
gpt-4o-mini-2024-07-18 作为微调的基础模型。在训练期间,对话被拆分,其中最后一条作为完成目标,其余作为提示。这种结构对于多轮对话训练至关重要。
来源:examples/How_to_finetune_chat_models.ipynbexamples/How_to_finetune_chat_models.ipynb221-224 examples/How_to_finetune_chat_models.ipynb282-283 examples/How_to_finetune_chat_models.ipynb468-469