菜单

微调

相关源文件

微调是一种技术,通过使用您提供的额外数据对OpenAI的预训练模型进行训练,以提高它们在特定任务上的表现。这个过程使模型的能力适应您的用例,从而提高性能、降低成本并提供更一致的响应。有关嵌入模型或改进模型输出的其他方法,请参阅嵌入和向量搜索以及检索增强生成 (RAG)

微调概述

微调是在预训练模型现有知识的基础上,通过在特定于您用例的数据集上进一步训练它们来实现的。这使模型能够适应您的领域、风格和特定任务要求。

来源:examples/fine-tuned_qa/olympics-3-train-qa.ipynb14-23 examples/fine-tuned_qa/olympics-1-collect-data.ipynb14-23

何时使用微调

微调在以下情况下最为有利:

  1. 您需要模型学习特定领域的知识
  2. 您希望输出格式或风格一致
  3. 您需要提高模型在特定请求类型上的可靠性
  4. 您需要更低的响应延迟
  5. 您希望通过更高效的交互来减少令牌使用量

对于需要超出模型训练截止日期的新信息,或只有少量示例数据的使用场景,微调不太适用。

微调流程

1. 数据准备

成功微调的基础是高质量数据,这些数据能代表您期望的任务。数据必须根据您使用的模型类型进行格式化。

补全格式(旧版)

用于旧模型(如 davinci-002),包含提示和补全对

{"prompt": "Input text here", "completion": " Expected output here"}

聊天格式

用于现代聊天模型(如 GPT-3.5-turbo 和 GPT-4o mini),包含消息数组

{
  "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Input text here"},
    {"role": "assistant", "content": "Expected output here"}
  ]
}

来源:examples/How_to_finetune_chat_models.ipynb206-224 examples/How_to_finetune_chat_models.ipynb257-274

2. 上传训练数据

将训练数据准备为 JSONL 格式后,使用 Files API 将其上传到 OpenAI

来源:examples/fine-tuned_qa/olympics-2-create-qa.ipynb320-327 examples/fine-tuned_qa/olympics-3-train-qa.ipynb346-350

3. 创建微调作业

数据上传后,通过选择以下选项创建微调作业:

  • 要微调的基础模型
  • 训练文件ID
  • 可选的验证文件ID
  • 可选的超参数

来源:examples/Fine-tuned_classification.ipynb317-323 examples/fine-tuned_qa/olympics-3-train-qa.ipynb384-402

4. 监控训练进度

微调作业可能需要几分钟到几小时不等,具体取决于模型和数据集大小。您可以使用以下方式监控进度:

来源:examples/Fine-tuned_classification.ipynb348-350 examples/fine-tuned_qa/olympics-3-train-qa.ipynb384-402

5. 使用您的微调模型

训练完成后,可以使用其ID访问微调模型

来源:examples/Fine-tuned_classification.ipynb566-567 examples/fine-tuned_qa/olympics-3-train-qa.ipynb478-482

常见用例

微调可应用于各种任务,并根据用例采用不同的架构。

来源:examples/Fine-tuned_classification.ipynb8-9 examples/fine-tuned_qa/olympics-3-train-qa.ipynb14-18

分类任务

分类涉及训练模型将文本归入预定义类别。这对于情感分析、主题分类和意图检测非常有用。

来源:examples/Fine-tuned_classification.ipynb121-130 examples/Fine-tuned_classification.ipynb192-199

带上下文的问答

微调可以创建基于所提供上下文回答问题的模型,从而提高事实准确性并减少幻觉。

来源:examples/fine-tuned_qa/olympics-3-train-qa.ipynb442-446 examples/fine-tuned_qa/answers_with_ft.py46-69 examples/fine-tuned_qa/olympics-3-train-qa.ipynb565-579

实体提取

微调可以创建专门从文本中提取结构化数据(如名称、日期、产品和特定实体)的模型。

来源:examples/fine-tuned_qa/olympics-1-collect-data.ipynb14-23

定制聊天助手

模型可以进行微调,以采用与您的用例相关的特定语调、个性特征或领域知识。

来源:examples/fine-tuned_qa/olympics-3-train-qa.ipynb14-18 examples/book_translation/translate_latex_book.ipynb7-12

微调的最佳实践

数据质量指南

  1. 多样性:包含涵盖任务不同方面的广泛示例
  2. 数量:更多示例通常会带来更好的性能(建议100+个示例)
  3. 质量:确保训练数据的一致性和正确性
  4. 平衡:对于分类,平衡每个类别的示例数量

数据准备技巧

  1. 在提示和补全之间使用清晰的分隔符(例如\n\n###\n\n
  2. 在补全文本前添加一个空格以改进分词
  3. 将示例保持在令牌限制内(检查最大块大小)
  4. 使用验证集来衡量泛化性能

来源:examples/Fine-tuned_classification.ipynb244-252 examples/fine-tuned_qa/olympics-1-collect-data.ipynb54-65 examples/fine-tuned_qa/olympics-3-train-qa.ipynb346-350

模型选择

  1. 从较小的模型开始(例如,GPT-3.5-turbo),然后再尝试更大的模型
  2. 分类等简单任务可以使用更高效的模型
  3. 复杂的推理或创意任务受益于更大的模型

训练参数

  1. 学习率:微调时较低,显著变化时较高
  2. 轮次:更多轮次可能会提高性能,但有过度拟合的风险
  3. 批次大小:根据数据集大小和模型调整(例如,分类任务为16)

来源:examples/Fine-tuned_classification.ipynb317-323 examples/fine-tuned_qa/olympics-3-train-qa.ipynb384-402

高级微调技术

微调中的少样本学习

将示例直接包含在提示中并结合微调,以结合两种方法的优点。

来源:examples/book_translation/translate_latex_book.ipynb135-143

结合检索

微调模型可以与检索系统结合,以提高事实准确性。

来源:examples/fine-tuned_qa/answers_with_ft.py46-69 examples/fine-tuned_qa/olympics-3-train-qa.ipynb596-618

判别器模型

训练独立的模型来判断给定上下文中是否可以回答问题,从而减少幻觉。

来源:examples/fine-tuned_qa/olympics-3-train-qa.ipynb266-321 examples/fine-tuned_qa/olympics-3-train-qa.ipynb430-446 examples/fine-tuned_qa/olympics-3-train-qa.ipynb565-579

成本考量

微调涉及以下成本:

  1. 训练计算
  2. 微调模型的存储
  3. 使用微调模型进行推理

成本因以下因素而异:

  • 基础模型大小
  • 训练数据集大小
  • 训练轮数
  • 推理使用量

结论

微调提供了一种强大的方式,可以根据您的特定需求调整预训练模型,从而提高在特定领域任务上的性能。通过遵循数据准备、模型选择和训练的最佳实践,您可以创建在目标用例中表现优于基础模型的专业模型。