内容提要
本文系统介绍纯文本LLM监督微调(SFT)训练数据预处理全流程,涵盖数据收集、格式统一、清洗过滤、去重、分布评估、混合策略及打包管理。强调数据质量优于数量,提供多任务采样、语种比例、难度分布等实操建议,并结合客户案例说明,旨在提升模型微调效果。
延伸解读
数据质量优先于数量
文章强调SFT训练中数据质量远比数量重要,引用LIMA论文指出1000条高质量数据即可训练出优秀模型。低质量数据堆量反而引入噪声,导致模型退化。实践建议宁可精标5000条,也不要粗标50000条。这提醒读者在资源有限时,应优先投入数据清洗和标注质量,而非盲目扩充数据量。
多任务采样策略的选择
针对多任务全参数SFT,文章介绍了均匀采样、按比例采样、温度采样和基于难度加权等方法。其中温度采样(T=2~5)是常用方案,可平衡任务数据量差异。同时建议设置数据量上限、动态调整采样权重,并强调每个任务应独立评估验证集指标。这有助于读者根据任务特点和数据分布选择合适的采样策略,避免任务遗忘。
多轮对话数据的特殊处理
多轮对话数据预处理需关注轮次间依赖关系,不能只看单轮质量。文章建议逐轮检查空轮、重复轮、角色错乱和截断问题,并评估对话连贯性和推进性。对于有缺陷的对话,宁可裁剪为高质量的前几轮,也不要保留带错误的完整对话。这提醒读者在处理多轮数据时,需从整体对话质量出发,而非仅关注单轮内容。
混合数据的适用场景与比例
文章指出LoRA场景下一般不需要混合数据,因为冻结的base model已保留通用能力。对于全参数SFT,混合数据比例建议从20%开始,大多数场景15%~25%即可。混合数据需根据知识遗忘风险选择非监督数据,如百科、代码或对应语言文本。这为读者在决定是否混合数据及确定比例时提供了实用参考。
Q&A
SFT训练数据预处理的核心原则是什么?
核心原则是数据质量优于数量,宁精勿滥。1000条高质量数据可能胜过50000条粗标数据。
多任务SFT中如何采样不同任务的数据?
常见方法有均匀采样、按比例采样、按温度采样和基于任务难度加权。其中按温度采样最常用,公式为p_i = (n_i^(1/T)) / Σ(n_j^(1/T)),T常用2~5。
SFT数据预处理中如何确定各语种样本比例?
以目标业务语种分布为锚点,根据base model的语种强弱调整,并用验证集效果驱动最终比例。例如业务流量70%中文、20%英文、10%日文,初始比例参考此分布。
SFT数据清洗中基于规则的过滤包含哪些类型?
包含四类:Language-based(剔除非目标语言)、Statistic-based(基于统计特征如标点占比)、Keyword-based(删除广告等关键词)、Policy-based(借鉴Falcon,过滤大写、纯数字等模式)。
SFT数据去重有哪些方法?
主要有精确去重(hash)、基于Overlap ratio的去重、基于LSH的去重(MinHash和SimHash)。SimHash将文本映射为64bit,海明距离≤3视为重复。
多轮对话数据在质量过滤时有哪些特殊考虑?
需要关注轮次间依赖,进行turn级检查(空轮、重复轮、角色错乱、截断)和对话级检查(连贯性、推进性、轮次合理性)。若某轮质量差,宁可裁剪为高质量的前几轮。
SFT数据打包时如何应用chat模板?
根据具体模型应用chat template,将纯语义数据渲染为带特殊token的格式。数据中只存语义内容,模板和特殊token交给tokenizer的chat_template处理。
SFT数据预处理中如何评估数据分布?
从语种、任务类型、样本长度、难度等维度评估。例如目标语言样本量低于1%且绝对数量不足5000需补充;单一任务占比不超过40%;难度比例建议简单:中等:困难=3:5:2。
SFT训练中混合数据策略如何选择混合比例?
推荐从20%开始,根据通用能力退化情况调整,大多数场景15%~25%即可。SFT数据量越大,混合比例越高。LoRA场景一般不需要混合数据。
SFT数据预处理中如何保证数据版本可复现?
每份数据集原始文件有SHA256校验,处理脚本与数据集版本绑定,不原地修改已产出数据集,新版本用新目录,并生成包含统计信息、质量指标、Packing统计和链路记录的数据报告。