SFT 的完整执行流程与训练数据集如何构建?
未标记
考查重点:示范清洗、监督格式与训练评测。收集任务示范并清洗去重,划分无泄漏验证集,统一对话模板与标签mask后训练;以任务评测选checkpoint并验证导出推理行为
本题目录
参考答案
核心回答
SFT 的完整流程是:明确任务和评测基线,构建可靠的输入—答案示范,清洗去重并隔离验证、测试数据,按模型模板生成训练输入和监督标签,再训练、评测、选择检查点,最后验证导出后的推理行为。 数据集既要覆盖目标任务,也要保证答案正确、输出规则一致,不能只把原始文档堆成训练文本。
训练时还要分别决定更新哪些参数、使用什么训练配置。SFT 表示以参考答案提供监督,可以采用全参数更新,也可以用 LoRA。成功启动训练或训练损失下降,都不等于目标任务已经改善。
先确定要学什么、怎样判定变好
以文章关键词提取为例,先规定输入是什么、关键词如何选择、输出分隔符和重复词如何处理;再固定一批未参与训练的样本,测量原模型的内容正确性和格式合规情况。后续比较沿用相同任务规则与生成设置,才能知道变化来自哪里。
数据从原始材料变成可用示范
数据可以来自人工标注、经审核的历史样本或模型辅助生成。每条样本需要有完整输入、可靠答案与可追踪来源;模型生成结果同样要检查,不能把生成流畅当成标签正确。
先检查空值、字段与答案规范,再处理重复、近重复和冲突答案,最后按原文、用户或会话等来源分组划分。训练集用于更新参数,验证集用于选择配置和检查点,测试集留到方案确定后评估。同一篇文章改写出的多个问题,应留在同一组,避免训练时见过的内容流入测试集。
任务类别、难度和长度都应有覆盖。LIMA 的数据研究将输入多样性与回答质量分别考察,提示单纯增加条数未必带来对应收益;其样本规模和过滤阈值不能直接当作其他业务的标准。
把样本变成真正参与训练的输入
先选训练工具支持的记录格式,例如 Alpaca 的指令、输入、输出字段,或 messages 形式的角色对话,再按基座模型匹配的对话模板序列化和分词。数据文件的字段格式与模型内部的角色标记是两层约定。
训练前抽查实际 input_ids 和 labels:答案是否被截断,角色边界是否正确,填充是否被忽略,哪些助手轮参与损失。对只训练回答的目标,用户内容仍然保留为上下文,只是不直接计入对应位置的损失。TRL 和 ms-swift 都提供相关控制,但默认行为和配置条件需要分别核对。
先用少量样本跑通预处理和训练,再按资源选择批量、学习率、训练轮数、精度与参数更新方式,保存配置、数据版本及训练记录。
评测与导出要形成闭环
用验证集观察损失和任务指标,按错误类型区分数据问题、模板问题、欠拟合或过拟合,再决定调整数据还是训练配置。选定检查点后,用独立测试集比较任务质量、格式与边界样本,也检查原有能力是否回退。
导出时保存匹配的权重或适配器、基座版本、分词器与对话模板。随后在实际推理入口重跑代表样本,检查答案结束、输出格式和训练时的评测是否一致;权重文件成功生成,并不代表这一步已经完成。
对应教程
- 28-大模型微调概述与整体流程:第3.2、3.3节区分监督目标与参数更新方式,第5、6节串起数据、训练和评测。
- 29-微调数据准备与对话模板:第3、5、6节展示记录格式、清洗划分与模型模板,本文将这些步骤放入完整执行流程。
参考资料
- 国内:WeThinkIn:后训练:微调与对齐:采用任务匹配的数据质量、去重、模板和监督掩码检查,说明数据准备与训练输入的衔接。
- 国内:阿东玩 AI:SFT 与微调:采用训练前基线、训练后比较及导出部署的流程,并区分训练、验证和测试的用途。
- 国内:LLaMA-Factory:数据处理:采用指令、输入、答案及历史对话的字段约定,说明数据需要先适配训练工具。
- 国内:ModelScope:ms-swift 自定义数据集:采用记录格式转换和助手轮损失控制,说明字段映射与实际监督目标都需要检查。
- 国外:Hugging Face TRL:SFTTrainer:采用分词、交叉熵监督和回答损失配置,说明损失下降的含义及训练输入检查。
- 国外:Hugging Face:Chat templates:采用模型专属对话模板和训练时的预处理约定,说明导出推理需与训练组织方式匹配。
- 国外:Zhou 等:LIMA: Less Is More for Alignment:采用第2、5节对数据质量和任务多样性的分开考察,不沿用其样本规模或过滤阈值作为业务要求。
