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

.微调时的训练数据是怎么构建的?如何保证样本多样性和质量

微调时的训练数据是怎么构建的?如何保证样本多样性和质量

P1 · llm_training

🏷 标签:fine-tuning, data-construction, diversity, quality

1️⃣ 考察意图

面试官想看的不是“数据从哪来”这种表面答案,而是你能否在工程约束下,系统性地构建一个高质量、高多样性的微调数据集。考察类型是工程取舍 + 系统设计。刁钻点在于:你能否说清楚“多样性”和“质量”之间的张力,以及如何用具体方法(如MinHash去重、基于困惑度的难度分级、LLM-as-Judge过滤)在有限预算下平衡二者。答好了能展示你从数据到模型的整条链路工程思维,以及踩过坑后的落地经验。

2️⃣ 标准答

微调数据构建的核心是从原始数据到训练样本的流水线,分为数据收集、多样性控制、质量过滤、迭代优化四个阶段。

1. 数据收集:来源与格式

  • 公开数据集:如ShareGPT(对话)、Alpaca(指令)、CodeAlpaca(代码)。注意:这些数据集常含噪声,比如ShareGPT的回复质量参差不齐,需要二次过滤。
  • 业务日志:从线上系统(如客服对话、搜索日志)中采样。坑:日志中90%是简单请求(如“查天气”),直接训练会导致模型对复杂任务泛化差。解法:按任务类型分层采样,确保长尾任务(如“写一篇关于量子计算的科普文章”)有足够样本。
  • 人工标注:针对特定场景(如医疗问答)写种子数据。成本高,通常只做100-500条作为种子,再用LLM生成变体。

2. 多样性控制:避免模型“偏科”

  • 指令多样性采样:用聚类(如K-means对指令embedding聚类)选择代表性样本,确保每个簇至少选1条。trade-off:聚类数K设多少?K太小(如10)会丢失细粒度任务;K太大(如1000)会导致每个簇样本太少。经验值:K=50-200,根据总数据量调整。
  • 去重:用MinHash + LSH(局部敏感哈希)对指令和回复去重。坑:单纯去重会误删语义相似但任务不同的样本(如“写一首诗”和“写一首关于春天的诗”)。解法:只对回复做去重,保留指令的多样性。
  • 难度分级:基于困惑度(perplexity)或模型损失值,将样本分为简单/中等/困难。例如,用一个小模型(如GPT-2)计算每条样本的困惑度,困惑度高的样本通常更复杂。控制比例:简单:中等:困难 = 3:5:2,避免模型只学会简单模式。

3. 质量过滤:剔除“垃圾数据”

  • 自动过滤:用规则(如长度<10字符、重复率>80%)筛掉明显低质样本。再用LLM-as-Judge:让一个强模型(如GPT-4)对每条样本打分(1-5分),只保留≥4分的。坑:LLM打分有偏差,比如偏好长回复。解法:用多个模型投票,或结合奖励模型(如基于RLHF的reward model)做交叉验证。
  • 人工审核:对自动过滤后的样本做抽样检查(如10%),确保无事实错误或有害内容。实际落地:一个5人团队每天能审500-1000条,适合小规模精调。

4. 迭代优化:难例挖掘

  • 训练一个基线模型后,用它在验证集上预测,收集预测错误的样本(如分类错误、生成内容不相关),补充到训练集中。这叫难例挖掘(hard negative mining)。trade-off:补充太多难例会导致模型过拟合,建议每次只加10%-20%的难例,并重新评估。

总结:数据构建不是一次性工作,而是“收集→过滤→训练→评估→补充”的完整流程。核心原则是:多样性保泛化,质量保精度,迭代补短板。

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

“这个问题我从数据收集、多样性控制、质量过滤、迭代优化四个层面回答。数据收集上,我用公开数据集、业务日志和人工标注,按任务类型分层采样。多样性上,用K-means聚类选代表样本,MinHash去重,并按困惑度做难度分级。质量上,用规则+LLM-as-Judge自动过滤,再人工抽检。最后,通过难例挖掘迭代补充。总结一句:微调数据构建是工程完整流程,核心是平衡多样性和质量。”

4️⃣ 高频追问 & 应对

追问 1:你说用LLM-as-Judge过滤质量,但GPT-4打分有偏差,怎么解决?

偏差确实存在,比如GPT-4偏好长回复或特定风格。解法:1)用多个模型投票,比如GPT-4、Claude、Gemini各打一次,取中位数;2)结合奖励模型,用RLHF训练过的reward model做交叉验证,reward model对事实性更敏感;3)人工校准:对GPT-4打分低的样本做抽样检查,发现误杀率超过5%就调整阈值。实际项目中,我们用GPT-4+reward model双过滤,误杀率从15%降到3%。

追问 2:你说按困惑度分级,但困惑度高的样本不一定质量高,比如可能是噪声?

对,困惑度高的样本可能是复杂任务,也可能是语法错误或事实错误。所以困惑度分级只用于多样性控制,不用于质量过滤。具体做法:先用困惑度把样本分桶(如低/中/高),然后在每个桶内用LLM-as-Judge过滤质量。这样既保证了难度分布,又避免了噪声污染。经验上,困惑度高的桶中,约20%是噪声,需要额外过滤。

追问 3:如果预算有限,只能做5000条数据,你怎么保证多样性?

预算有限时,优先保证任务类型覆盖。我会先列出目标任务的分类体系(如问答、摘要、代码、翻译等),每个类别至少500条。然后用K-means聚类(K=50)选代表样本,确保每个簇至少1条。最后,用MinHash去重,避免重复。如果还有余量,补充10%的困难样本(基于困惑度)。这样5000条数据能覆盖50+任务类型,泛化性比随机采样好30%以上(在AlpacaEval上验证过)。

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

  • ❌ “数据越多越好,直接爬取全网数据训练。” → ✅ “数据质量比数量重要。1000条高质量数据比100万条噪声数据效果好。需要先过滤、去重、分级,再训练。”
  • ❌ “多样性就是让数据覆盖不同领域,比如医疗、法律、金融。” → ✅ “多样性不只是领域覆盖,还包括指令复杂度、回复长度、任务类型。用聚类和难度分级控制,避免模型只学会简单模式。”
  • ❌ “质量过滤用规则就够了,比如长度、重复率。” → ✅ “规则只能过滤明显低质样本,对事实错误、逻辑矛盾无效。必须结合LLM-as-Judge或奖励模型做语义级过滤。”

6️⃣ 简历呼应

  • 如果你有RAG项目:从“数据构建中的检索增强”角度切入,比如用BM25检索相似样本做难例挖掘,或用embedding聚类控制多样性,展示你对检索和生成结合的理解。
  • 如果你只做过传统NLP:用“分类任务的数据增强”类比,比如在文本分类中,用回译(back-translation)生成变体,类似微调中的指令多样性采样。强调你对数据分布和噪声处理的通用能力。
  • 如果你是校招无项目:聚焦“论文复现”,比如复现Alpaca的52K指令数据构建流程,用GPT-4生成种子数据,再用MinHash去重。展示你对开源工具(如datasets库、sentence-transformers)的熟悉度。

7️⃣ 延伸阅读

  • 《LIMA: Less Is More for Alignment》—— 论证数据质量比数量重要
  • 《Alpaca: A Strong, Replicable Instruction-Following Model》—— 数据构建流程详解
  • 《Scaling Data-Constrained Language Models》—— 数据多样性对模型性能的影响
  • 《MinHash for Text Deduplication》—— 去重算法实现
  • 《LLM-as-Judge: A Survey》—— 自动评估方法综述

—— 本场面试完 ——