Day11微调的数据到底怎么准备——几百条数据怎么挑、怎么标注、怎么避免把模型教坏前言微调效果 80% 看数据别本末倒置我看过不下 20 个微调项目的复盘结论就一句话微调效果不好80% 不是模型不行、不是超参没调对是数据没准备好。最离谱的是很多人愿意花两周调学习率、换基座模型、试 5 种 LoRA rank却不愿意花两天把训练数据从头到尾看一遍。上一篇 Day10我讲了什么场景才该微调、LoRA 和全参怎么选。今天补上最后一块拼图——数据到底从哪来、怎么造、怎么避免把模型教坏。PART 01先想清楚要教模型什么——别急着收集数据很多人一听要微调第一反应是赶紧去搞数据。爬论坛、扒日志、买数据集、找开源……忙活一圈几千条堆在面前然后懵了这堆东西到底要教模型干嘛微调的第一步不是找数据是定义任务。你得先回答一个问题——你想改变模型的什么行为微调用的指令数据本质是一张张输入→输出的对照表。你真正在教的不是某个孤立的知识点而是一种从输入到输出的姿态。所以我有个特别管用的二分法知识型问题模型不知道某个事实公司内部报销流程、产品库存、客户合同条款——别微调上 RAG。微调教不会它记住新事实只会让它学会瞎编得更有底气。行为型问题模型其实知道答案但答得不对你的胃口你要 JSON 它给散文、你要克制它偏要吹牛、你要走固定 SOP 它自由发挥——这才是微调的地盘。分清楚这件事比准备数据本身重要 10 倍。我见过最浪费的一个团队花两个月爬了三万条客服问答去微调最后发现他们要的模型知道最新产品参数根本是知识型问题RAG 加个知识库就解决了。三万条数据方向全错。PART 02几百条数据怎么挑、怎么造——质量 数量定义好任务下一步才是搞数据。而数据这件事最大的认知陷阱是以为越多越好。2023 年 Meta 的 LIMA 论文干了件事——只用1000 条人工精挑的指令数据就微调出一个效果惊艳的模型。它证明了一件事质量是数量之上的降维打击。几百条好数据能教会模型一种新姿态几万条脏数据只会把它教坏。那数据从哪来按值钱程度排个序真实业务日志——最值钱。客服工单、真实问答记录、用户对 AI 输出的改写痕迹这些都是真实世界的姿态含金量最高。人工标注 / 改写——可控但慢。适合在真实日志不够时补量或把粗糙样本打磨精细。Self-Instruct / 大模型合成——量大、便宜但必须质检。让 GPT-4 级模型帮你造 instruction-response 对再人工筛一轮。无论哪种来源最后都要落成同一种格式。最常见的是alpaca 格式三段式instruction指令、input可选上下文、output期望输出。写个最小可运行的例子把原始问答整理成训练用的 JSONLimport json # 原始数据从业务日志 / 工单里捞出来的问答对 raw_pairs [ {q: 我的订单还没到怎么办, a: 请提供订单号我帮您查物流。}, {q: 能开发票吗, a: 可以的请在订单页申请电子发票1 个工作日内开具。}, # 真实场景下这里通常是几千条 ] def to_alpaca(pairs, out_pathtrain.jsonl): with open(out_path, w, encodingutf-8) as f: for p in pairs: record { instruction: p[q].strip(), input: , # 多轮 / 带上下文时填这里 output: p[a].strip(), } f.write(json.dumps(record, ensure_asciiFalse) \n) to_alpaca(raw_pairs) # 产物 train.jsonl每行一条{instruction: ..., input: , output: ...}构造数据时记住一条心法多样性比数量重要。同样是催物流的问题你要覆盖直接问的、带情绪骂人的、半夜发的、把订单号记错的……500 条各不相同的远胜 5000 条重复。PART 03怎么标注、怎么避免把模型教坏——质检是生死线Day09 我讲数据清洗时说过垃圾进则垃圾出。这句话在微调里会被放大 100 倍。原因很简单预训练是把模型泡在万亿 token 的数据海里脏数据被稀释了微调是用几百几千条数据直接塑形——你刻多深它就长多深。所以质检不是可选项是生死线。最常见的三种教坏姿势踩中任何一个模型基本就废了标注不一致同一个意图这条样本这么答那条样本那么答。模型学到的不是怎么答是看心情。幻觉样本标注答案里编造了不存在的接口、参数、产品名。模型会把一本正经地胡说当成正确姿势。格式漂移你训练目标是结构化 JSON 输出标注里却混进了自然语言碎句。模型上线后时而 JSON 时而散文调用方直接崩溃。怎么防先上一个最起码的自动化质检脚本把机器能筛的先筛掉import json def qc_check(pathtrain.jsonl): seen, problems set(), [] with open(path, encodingutf-8) as f: lines f.readlines() for i, line in enumerate(lines): r json.loads(line) # 1) 字段完整性 if not r.get(instruction) or not r.get(output): problems.append(f第{i}行instruction / output 为空); continue # 2) 完全重复多样性的头号杀手 key r[instruction].strip() if key in seen: problems.append(f第{i}行instruction 重复); continue seen.add(key) # 3) 长度异常过短无信息过长易噪声 out_len len(r[output]) if out_len 5 or out_len 2000: problems.append(f第{i}行output 长度异常({out_len})) print(f共 {len(lines)} 条发现问题 {len(problems)} 处) for p in problems[:20]: print( -, p) qc_check()机器筛完还有三板斧人工层面的质检抽检 5%~10%自己逐条读鼻子最灵的问题是这条我看着别扭吗。多人交叉标注算一致性同一批数据两人各标一遍对不上的地方就是雷区。拿强模型当质检员让 GPT-4 级模型逐条审查你的 instruction-output 对问它这条标注有没有矛盾、有没有幻觉。这是我用过性价比最高的一招。最后说数据量。LoRA 入门500~2000 条高质量数据就够开工了。别迷信万级数据集小而精先跑通整条链路确认方向对了再扩量。结尾你喂什么形状它就长成什么形状盘点一下这篇的核心先定义任务知识型上 RAG行为型才微调别搞反质量 数量LIMA 用 1000 条精挑数据就够500 条各不相同胜过 5000 条重复质检是生死线标注一致性、去幻觉、防格式漂移机器筛 人工抽检 强模型当质检员微调这件事没有奇迹。模型是面镜子你喂的数据是什么形状它就长成什么形状——喂之前先想清楚你要它照出什么。工具再强数据不行它只会又快又自信地帮你把错误放大。互动时间你手头要微调的那个场景是知识型还是行为型数据你现在有多少条、从哪来的评论区说说我帮你判断够不够开工。下一篇 Day12 预告微调完怎么科学评估——别只盯着 loss 曲线自我感动怎么搭一个能反映真实业务的评估集怎么避免训练指标漂亮、上线效果翻车。关注小刘檀木一篇都不错过。— END —小刘檀木 · 帮普通人把 AI 学进简历