4.6 微调流程详解:数据准备、训练监控与模型评估

0 阅读6分钟

4.6 微调流程详解:数据准备、训练监控与模型评估

一、微调流程概览(与书 4.2.2 对应)

《大模型应用开发极简入门》第4章 4.2.2 微调流程 明确为:数据准备(格式/质量)、API 调用、训练监控、模型评估。本节按该流程展开,便于在「对格式与领域有极致要求」时落地微调。

微调(Fine-tuning)用业务数据更新模型参数,适配特定领域或格式。流程:数据准备 → 格式转换 → API 提交 → 训练监控 → 模型评估


二、数据准备(书 4.2.2 数据准备)

2.1 格式要求

OpenAI 微调需 JSONL 格式,每行一个 JSON 对象,且为 Chat 风格的多轮消息:

{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}

可无 system,但至少包含 user 与 assistant。多轮对话可在一行内包含多组 user/assistant。

2.2 数据质量(书 4.2.2 质量)

  • 数量:至少数十条,通常数百至数千条;越多且越多样,效果越稳,但成本上升。
  • 一致性:格式统一、无缺段、无乱码;assistant 内容需与任务一致(如都输出 JSON、都遵循同一风格)。
  • 多样性:覆盖目标场景的各种表述与边界情况,避免过拟合到少数句式。

2.3 数据清洗建议

  • 去除重复或高度相似的样本。
  • 检查长度:单条不宜过长,避免超出模型上下文。
  • 敏感信息脱敏后再用于微调。

三、格式转换与文件上传

3.1 从 CSV/Excel 到 JSONL

若原始数据为表格(如「输入」「输出」两列),可写脚本转为 JSONL:

import json

rows = [{"input": "用户问题1", "output": "期望回复1"}, ...]
with open("train.jsonl", "w", encoding="utf-8") as f:
    for r in rows:
        obj = {
            "messages": [
                {"role": "user", "content": r["input"]},
                {"role": "assistant", "content": r["output"]}
            ]
        }
        f.write(json.dumps(obj, ensure_ascii=False) + "\n")

3.2 上传与校验

通过 OpenAI API 上传文件(File API),得到 file_id。使用「校验」接口可检查格式是否符合微调要求,再提交训练任务。


四、训练与监控(书 4.2.2 API 调用、训练监控)

4.1 提交训练任务

调用 Fine-tuning API,传入 training_file(file_id)、model(如 gpt-3.5-turbo)、可选 validation_file、超参数(如 epochs、batch_size)。任务提交后返回 job_id

4.2 监控训练进度

通过 Jobs API 查询状态:pending → running → succeeded / failed。running 时可查看训练 loss、验证 loss(若提供验证集),便于判断是否过拟合或需早停。

4.3 训练完成后

成功后获得专属模型 ID(如 ft:gpt-3.5-turbo:xxx),在 ChatCompletion 等 API 中将该 ID 作为 model 传入即可使用。


五、评估(书 4.2.2 模型评估)

5.1 评估维度

  • 格式符合率:输出是否满足预定格式(如 JSON、字段完整)。
  • 任务准确率:在测试集上对比微调前后,按业务指标(如分类准确率、抽取 F1)评估。
  • 幻觉率:是否出现明显编造或与输入矛盾,可抽样人工标注或用规则/模型辅助判断。

5.2 测试集设计

预留与训练集同分布但未参与训练的测试集;可再加一批「边界样本」检验鲁棒性。

5.3 与提示工程对比

若微调后效果仍不如预期,可对比「同任务下仅用提示工程」的效果。有时高质量提示 + 少样本即可达到可用水平,无需微调;微调适合提示已优化到瓶颈、且对格式/领域有极致要求的场景(与书 4.2.1 适用场景一致)。


六、成本与权衡(书 4.2.4)

  • 训练成本:按训练 Token 计费,数据量越大成本越高。
  • 推理成本:微调后模型调用单价可能与基础模型不同,需以官网为准。
  • 数据要求:高质量标注数据是效果关键,数据不足或噪声大时,微调收益有限。
  • 迭代周期:数据准备 → 训练 → 评估通常需数天,迭代慢于提示工程,适合相对稳定的任务。

七、数据量不足时的替代方案

若当前仅有少量标注数据(如几十条),直接微调可能过拟合或效果不稳定。可考虑:(1)先用提示工程 + 少样本将现有样本作为 in-context 示例,验证任务可行性与格式;(2)再通过主动学习或业务积累逐步扩充数据,达到数百条后再启动微调;(3)或采用领域预训练/继续预训练(若平台支持)再微调,但成本与复杂度更高。书中 4.2.4 的「数据要求」与 4.3 的「组合策略」均支持「先提示、后微调」的路径,本节与之一致。


八、小结

微调适合对格式与领域有极致要求的场景;数据质量与数量是效果的关键。本节与书中 4.2.2「微调流程」完全对应,按数据准备、API 调用、训练监控、模型评估执行即可。下一节将给出法律文本分析与代码审查的微调实战案例。建议在立项微调前,先用 4.1~4.5 的提示技巧做到当前数据下的效果上限,再根据格式符合率与业务指标决定是否投入微调,避免过早投入而收益有限。


九、OpenAI 微调 API 的简要说明

微调通过 OpenAI 的 Fine-tuning API 提交:需先上传 JSONL 格式的训练文件(及可选的验证文件),获得 file_id 后调用创建 job 的接口,传入 model(如 gpt-3.5-turbo)、training_file、可选超参数(如 n_epochs)。任务创建后可通过 Retrieve job 接口轮询状态,成功后会返回 fine_tuned_model 的 ID,在 ChatCompletion 等接口中将该 ID 作为 model 参数即可使用。具体参数名与可选值以 OpenAI 官方文档为准,本书与本节侧重流程与数据准备,实现时以文档为准。书中 4.2.2「微调流程」中的「API 调用、训练监控」即对应上述步骤。


十、与 4.1 提示工程、4.7 实战案例的衔接

4.1~4.5 提示工程:微调前建议先用提示工程(角色、少样本、格式约束、防御性提示)做到当前数据下的效果上限;若格式符合率或领域术语仍不达标,再投入数据做微调。微调后的模型在推理时仍可使用 system/少样本等提示,与提示工程互补。4.7 节实战:法律文本分析与代码审查的数据格式、质量要求与本节 2.1~2.3 一致;按本节流程准备 JSONL、上传、监控、评估后,即可在 4.7 的两个场景中复现。书中 4.2.1 微调概述、4.2.2 流程、4.2.4 成本与权衡在本节已全部覆盖,4.2.3 实战在 4.7 节展开。与 1.6 节选型的关系:1.6 指出微调适合「格式与领域要求极高、有足够标注数据」的场景;本节的数据准备与质量要求即该判断的落地标准。立项微调前建议先用 4.1~4.5 的提示技巧做到当前数据下的效果上限,再根据格式符合率与业务指标决定是否投入微调,避免过早投入而收益有限。


下一节预告:4.7 微调实战案例:法律文本分析与代码审查应用