SFT数据及处理的业内共识
1.prompt的质量和多样性远重要于数据量级,微调一个 30 b 量级的base model只需要 10 w 量级的数据即可
参考:《LIMA:Less Is More for Alignment》
2.合成数据很重要!一般需要通过不同方式进行多路合成,减少合成数据的bias
参考:《Phi-3 Technical Report:A Highly Capable Language Model Locally on Your Phone》
3.可以加点预训练的数据进去,减轻灾难性遗忘现象
参考:《The Llama 3 Herd of Models》
4.一般训练一个epoch,垂域模型数据少训练3epoch去过拟合
5.可以做全量微调,就不要去做PEFT
6.SFT阶段不能太多的知识注入,过多的知识注入,或者超过模型能力本身的回答过多会导致对齐税
数据飞轮
最简单的做法,拉取线上近半个月的真实用户prompt,先用启发式规则进行清洗,然后用GPT-4o打标,留下可用的数据
为什么要用数据飞轮?
1.prompt 的生产是需要有 seed 种子的,seed的数据量和多样性有限,数据合成的质量不够高。
2.用户的问题干奇百怪,尤其是多轮聊天数据,自己生成的多轮对话数据,通常都默认模型回复的是正确的,用户会 follow 模型的回复。但线上可不是这种情况,你聊你的,我聊我的是时有发生的事情 (伪多轮)。
1.数据收集:首先,需要收集和获取大量的数据。这可以通过各种方式实现,例如用户近一个月赞踩,用户行为追踪,用户社交媒体数据等
2.数据存储和处理:收集到的数据需要进行存储和处理,以便后续的分析和应用。这可能涉及到数据仓库,数据库,云存储等技术
3.数据分析和洞察:通过对数据进行分析和挖掘,提取有价值的信息和洞察。这可以使用数据分析工具,机器学习算法等技术来实现,以发现数据中的模式,趋势和关联关系
4.数据应用和价值实现:将分析得到的洞察应用到实际场景中,创造价值。这可能包括优化业务流程,改进产品设计,个性化推荐等
5.数据反馈和增强:应用数据带来的改进和收益,进一步增加数据的质量和数量。这可能包括更好的数据收集方法,更准确的数据标注等
一、数据飞轮的本质(类比理解)
将数据系统想象为一个永动机,每一轮旋转都会积累更多动能(高质量数据),最终形成自增强的正反馈循环:
飞轮效应:每个环节的质量提升都会带动下一轮的数据优化,形成自我升级的生态闭环。
二、为何传统数据合成需结合飞轮机制
1. 初始种子数据的缺陷
- 问题:人工构造的种子问题类型有限,且可能存在隐性偏见
(例如:过于书面化,缺乏口语表达样本) - 飞轮修复机制:通过真实用户数据补充长尾场景案例
2. 合成数据的失真风险
- 问题:模型生成的提问可能与真实用户分布存在偏离
(如:合成数据中问答过于规范,实际用户存在模糊表达) - 飞轮校准作用:用真实数据中的“反例”修正模型认知偏差
示例对比:
# 合成数据 | # 真实用户数据
"写一首关于春天的五言绝句" | "整点春天的诗,别太长,要押韵"
"牛顿三大定律的内容是什么?" | "物理考试复习重点求总结,急!"
三、数据飞轮的5环节详解
1. 数据收集:获取原材料
- 核心目标:覆盖用户真实意图的全面性
- 操作技巧:
- 用户行为埋点:记录搜索记录、对话中断率、主动点赞/踩
- 多源采集:API日志、客服对话记录、应用内反馈表单
2. 存储与处理:打造高标准数据工厂
- 架构示例:
flowchart TDA[原始数据] --> B[清洗层:去重/去噪]B --> C[结构化层:JSON格式化]C --> D[标注层:质量分类+实体标记]D --> E[特征库:存储embedding向量]
- 工具推荐:
- 清洗:用Python的
pandas
处理重复数据 - 存储:Elasticsearch实现快速检索
- 标注:Snorkel框架实现弱监督标注
- 清洗:用Python的
3. 分析与洞察:挖掘数据金矿
- 关键分析维度:
维度 分析方法 实战用途 意图分布 聚类分析(K-means) 发现模型未覆盖的新用户需求 对话质量 二分类模型(优质/低质) 过滤无效数据提升训练效率 会话流分析 序列模式挖掘(PrefixSpan算法) 优化多轮对话的上下文管理策略
4. 应用与价值:数据驱动决策
- 典型应用场景:
- 产品优化:高频出现的模糊提问 → 改进用户引导文案
- 模型增强:
# 假设分析发现用户常问"怎么安装XXX" # 则定向增加对应安装指导的SFT数据 new_prompts = generate_install_qa("XXX软件")
5. 反馈与增强:闭环迭代
- 质量提升循环:
while True:当前模型 = 训练(现有数据)部署后用户提问 = 收集新数据()数据缺陷 = 分析模型错误案例(当前模型, 新数据)增强数据 = 针对性补全漏洞数据(数据缺陷)合并数据 += 增强数据
四、实战案例解析
案例1:客服对话系统的飞轮优化
- 初始问题:20%的客户因模型不理解方言而转人工
- 飞轮介入:
- 收集方言类对话样本 → 清洗后生成标注数据
- 微调时增加方言理解专项训练集
- 新版本上线后相关转人工率降至7%
案例2:代码助手的多轮对话增强
- 痛点:用户常在三次对话后丢失上下文
- 解决方案:
- 解析对话日志中的状态丢失节点
- 基于真实中断案例构建强化训练样本:
{"dialog": [{"role":"user", "content":"写一个Python排序函数"},{"role":"assistant", "content":"使用sorted()函数..."},{"role":"user", "content":"不要用内置函数自己实现"}],"label": "需要保持算法实现焦点" }
五、避开数据飞轮的常见误区
误区 | 后果 | 科学做法 |
---|---|---|
只收集显式反馈 | 丢失90%潜在信息 | 结合隐式行为分析(如停留时长) |
过度依赖自动化标注 | 噪声数据污染模型 | 人机协同校验(如置信度过滤) |
迭代周期过长 | 无法及时响应需求变化 | 建立小时级数据更新通道 |
六、前沿优化方案
1. 动态数据加权
为每个训练样本分配动态权重:
weight = α * 用户重要性 + β * 数据新鲜度 + γ * 模型不确定度
- 用户重要性:VIP用户的数据权重更高
- 模型不确定度:使用蒙特卡洛Dropout计算置信度
2. 对抗样本挖掘
主动生成让当前模型犯错的问题,加入训练集:
adversarial_prompts = generate_hard_samples(model)
train_data += adversarial_prompts
3. 数据蒸馏技术
用大模型标注结果指导小模型训练:
原始数据 → GPT-4标注 → 训练Llama 3
七、阶段总结(思维导图版)
通过将数据飞轮与合成技术结合,可使模型始终保持对现实场景的强适应力,这正是打磨优秀LLM的核心要义。