Q998训练与微调真题解析LLM 训练AgentAlpha 社区真题库约 7 分钟更新 2026-09-29

SFT 指令微调数据 如何构建

面试官想考察的不是你会不会用现成数据集,而是你从零到一构建高质量SFT数据的工程思维。这是P1进阶题,刁钻点在于:多数人只会说“用Alpaca格式”,但实际落地时数据质量直接决定模型能力天花板。答好了能展示你对数据配比、

SFT 指令微调数据 如何构建

P1 · llm_training

📊 考点:sft · data-quality

🏷 标签:data-construction, instruction-tuning

1️⃣ 考察意图

面试官想考察的不是你会不会用现成数据集,而是你从零到一构建高质量SFT数据的工程思维。这是P1进阶题,刁钻点在于:多数人只会说“用Alpaca格式”,但实际落地时数据质量直接决定模型能力天花板。答好了能展示你对数据配比、噪声控制、任务覆盖的深度理解,以及从数据侧提升模型对齐效果的硬实力。考察类型:系统设计+工程取舍。

2️⃣ 标准答

构建SFT数据不是简单拼凑,而是系统工程,分五步走:

第一步:明确数据构成与格式

  • 核心三要素:指令(Instruction)、输入(Input,可选)、输出(Output)。多轮对话需加历史上下文。
  • 格式标准化:推荐ChatML格式(<|im_start|>system...<|im_end|>),比Alpaca原生JSON更灵活,支持系统提示和角色区分。为什么:统一格式便于后续多任务混合训练,避免tokenizer乱码。
  • 实际坑:不同来源数据字段名不统一(如prompt vs instruction),需写脚本强制映射,否则训练时丢字段。

第二步:数据来源与采集策略

  • 公开数据集:Dolly(15k,人工标注)、OASST1(70k,多语言)、ShareGPT(用户真实对话)。取舍:人工标注质量高但成本大,模型生成(Self-Instruct)效率高但易引入噪声。建议按3:1:1比例混合人工、模型生成、真实对话数据。
  • 模型生成:用GPT-4或Claude生成种子指令,再通过Self-Instruct扩展。关键:控制生成温度(0.7-0.9),避免重复模板。
  • 实战坑:ShareGPT数据含大量低质对话(如“你好”),必须用规则过滤(长度<10字符或重复率>80%直接丢弃)。

第三步:质量控制——去重、过滤与平衡

  • 去重:用MinHash+LSH对指令去重,阈值设0.85。为什么:重复数据会让模型过拟合特定模式,降低泛化能力。
  • 过滤:基于规则(含敏感词、URL乱码)和模型(用GPT-4打分,只保留评分>3/5的样本)。取舍:模型过滤成本高,但能筛掉语义垃圾;规则过滤快但漏检多。建议先用规则粗筛,再用模型精筛。
  • 平衡:按领域(代码、数学、写作)、难度(简单/中等/困难)、长度(短/中/长)分层采样。具体做法:用TF-IDF聚类指令,确保每类至少100条;难度用指令复杂度(如指令长度+关键词数)近似估计。
  • 实际坑:数学领域数据天然少,需人工补充或从MATH数据集转换,否则模型数学能力塌陷。

第四步:数据增强与多样性

  • 多轮对话:将单轮数据拼接成多轮(如“写一首诗”→“改成五言”),用模板生成历史。为什么:单轮训练让模型不会追问,多轮提升对话连贯性。
  • 负样本:加入错误输出(如“1+1=3”),让模型学会拒绝。取舍:负样本比例过高(>10%)会导致模型过度保守,建议控制在5%。
  • 对抗样本:用同义词替换指令(如“写”变“创作”),测试模型鲁棒性。

第五步:验证与迭代

  • 小模型验证:在GPT-2或LLaMA-1B上微调,看loss下降曲线和生成质量。关键:如果loss不降,检查数据格式或噪声;如果生成重复,增加多样性。
  • 迭代策略:先构建5000条种子数据,验证后再扩展。实际案例:某团队用10万条数据训练,发现代码能力差,回溯发现代码数据占比仅5%,调整到20%后提升明显。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从数据构成、来源策略、质量控制、增强验证四个层面回答。数据构成上,用ChatML格式统一指令、输入、输出;来源上,按3:1:1混合人工、模型生成、真实对话数据;质量控制上,用MinHash去重、规则+模型双过滤、按领域和难度分层平衡;最后通过小模型验证迭代。总结一句:SFT数据构建的核心是质量优于数量,平衡优于堆砌。”

4️⃣ 高频追问 & 应对

追问 1:如果数据量只有1万条,怎么保证效果?

用数据增强:1)对每条指令做同义词替换(如“写”变“创作”),生成3-5个变体;2)多轮对话拼接,把单轮变2-3轮;3)加入10%负样本(错误输出+拒绝回答)。取舍:增强后数据量翻倍,但质量可能下降,需用GPT-4过滤低质变体。实际案例:某团队用1万条增强到5万条,在LLaMA-7B上效果接近10万条原始数据。

追问 2:如何评估数据质量?有没有量化指标?

用三个指标:1)指令多样性:用TF-IDF向量化指令,计算平均余弦相似度,<0.3说明多样性好;2)输出完整性:检查输出是否包含关键信息(如代码数据需有运行结果);3)噪声率:用GPT-4随机采样10%数据打分,噪声率<5%算合格。实战:如果噪声率>10%,回溯过滤步骤,检查MinHash阈值是否太低(调高到0.9)。

追问 3:多轮对话数据怎么构建?有什么坑?

用模板拼接:从单轮数据中随机选2-3条,用“用户:...\n助手:...”格式串联。坑:1)历史对话过长(>2048 tokens)会截断,需按token数截断;2)角色标签不一致(如“Human” vs “用户”),统一用ChatML格式;3)多轮逻辑不连贯(如从“写诗”跳到“解方程”),用主题聚类保证同一轮内主题一致。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说“直接用Alpaca数据集就行,不用自己构建” → ✅ 正确切入:公开数据集质量参差不齐(Alpaca有10%噪声),必须自己清洗、过滤、平衡,否则模型能力受限。
  • ❌ 说“数据越多越好,堆到100万条” → ✅ 正确切入:数据量不是关键,质量才是。100万条低质数据不如10万条高质量数据,且训练成本高。建议先构建5000条验证,再扩展。
  • ❌ 说“格式不重要,反正模型能学” → ✅ 正确切入:格式混乱会导致tokenizer乱码、训练不稳定。必须统一格式(如ChatML),并在预处理时检查字段完整性。

6️⃣ 简历呼应

  • 如果你有RAG项目:从数据多样性切入,强调如何从RAG检索结果中提取高质量指令-输出对(如用户query+答案),并过滤低质检索结果。
  • 如果你只做过传统NLP:用文本分类数据类比,强调如何将分类标签转换为指令(如“判断情感:正面/负面”),并平衡类别分布。
  • 如果你是校招无项目:聚焦Self-Instruct论文复现,用GPT-2生成5000条种子数据,写脚本做MinHash去重和格式转换,输出构建流程文档。

7️⃣ 延伸阅读

  • Self-Instruct: Aligning Language Models with Self-Generated Instructions (Wang et al., 2022)
  • LIMA: Less Is More for Alignment (Zhou et al., 2023) —— 强调数据质量
  • Alpaca: A Strong, Replicable Instruction-Following Model (Taori et al., 2023)
  • ChatML: OpenAI's Message Format for Multi-turn Conversations
  • MinHash for Near-Duplicate Detection: A Practical Guide (博客)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。