微调数据从哪来?怎么保证质量?多少条够?

Q4-09训练数据工程高频数据构造标注判准评测集切分数据量去重合成数据

谁在问:二面必问;有落地经验的面试官用它筛"真攒过数据集的人"

口语化问法

  • 你们微调用的数据是怎么来的?标了多久、几个人标的?
  • 多少条数据才够?你怎么判断数据量到位了?
  • 怎么保证数据质量?验证集是怎么切的?

考察意图

这题看着像常识题,实际是本章性价比最高的筛子

  1. 有没有真攒过数据集。真攒过的人会主动讲判准、讲一致率、讲去重,而不只是讲"从业务库里导的"。
  2. 评测集怎么切绝大多数候选人会说"随机切 10%"——这是本题最有效的一刀,因为同源随机切的评测集只能自证,证明不了泛化,更抓不到遗忘。
  3. 成本重心放在哪。把微调成本讲在 GPU 上的人,八成没自己组织过标注。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

数据来源主要有几种:业务历史数据(工单、客服对话、审核记录)、人工标注、用大模型合成,以及公开数据集。

质量保证上:去重、清洗掉明显有问题的样本、人工抽检、保证类别分布均衡。

数量上要看任务:简单的分类任务几百条可能就够,复杂的领域任务通常要几千条。业界的共识是质量比数量重要,几百条精挑的数据可能比几千条粗糙数据效果更好。

会切出一部分做验证集,一般 10% 到 20%。

该说的都碰到了,及格。但没有可执行的动作(怎么去重、怎么定判准、怎么切),最后一句"随机切 10%"还会在追问里翻车。

90

90 分答案(有生产经验的回答)

我按一条流水线做,四步:来源 → 判准 → 体检去重 → 切分

① 来源,优先级从高到低:线上真实 query + 人工修正 > 历史业务数据 > 大模型合成 > 公开数据集。核心判据是分布贴不贴近线上。 公开数据集训出来的模型在自己的线上分布上通常水土不服。合成数据可以用,但只用来补覆盖度不足的长尾,不用来凑总量。

② 判准先于标注——这是最容易跳过、代价最大的一步。 判准没定清楚,标注员会退化到用表面特征做判断:长度、有没有小标题、语气客不客气。我们踩过一次:做偏好数据时判准写的是"选更好的那个",结果 chosen 比 rejected 平均短 40%,训完模型学到的是"更短"不是"更好",复杂问题开始敷衍。

所以现在的流程是:判准写完 → 让两个人各标 50 条 → 算一致率 → 一致率上不去先改判准,而不是加标注量

③ 体检去重,至少三件事:

  • 近重复剔除(embedding 或 MinHash)。重复样本会让模型在那个模式上过拟合,还会让评测虚高。
  • 分布体检:把长度、类别占比、来源渠道、时间跨度打出来。任何和预期不符的系统性倾向都会被原样学进权重。 这现在是我们开训前的固定脚本。
  • 边界覆盖检查:每个主类别至少 20–30 条,且必须含"差点就是另一类"的边界样例。模型学不会边界,是因为你没给边界。

④ 切分:评测集必须与训练集异源。 这是我最想强调的一条。从同一批数据随机切 10%,切出来的是同一批标注员、同一时间段、同一采样口径的数据,它只能证明模型拟合了这批分布。正确做法是三条至少满足两条:

  • 时间上晚于训练集(防信息泄漏,也检验对新分布的适应)
  • 由不同的人标注(检验判准可复现,而不是某个标注员的个人习惯)
  • 另加一份"任务外"的通用能力评测集(专门抓灾难性遗忘)

第三条经常被忽略,但它救过我们一次:一个工单分类微调,任务准确率 82% → 94% 很漂亮,上线后模型把所有输入都当工单分类,问它"帮我润色这段话"它回一个类别名,MMLU 掉了 11 个点。同源切的评测集永远看不到这个。

多少条够(截至 2026-08 的经验区间):

任务类型 建议条数
分类 / 路由 每类 100–300(有实测:8B 模型 5 类共 150 条 LoRA 到 92%)
结构化抽取 200–500,schema 复杂取上限
内容生成(文案 / 摘要) 500–2000
复杂领域适配(医疗 / 法律 / 技术支持) 1000–5000,通常还要配复演数据
厂商侧下限 OpenAI SFT 最低 10 条、建议 50 条起看效果

共识是质量压倒数量:200 条精挑通常打得过 2000 条粗收。 数据不够时的正确动作是提高每条的质量和覆盖度,不是合成一批凑数。

最后一句关于成本:7B 的 LoRA 微调几小时、几百块钱,真正贵的是"谁来标这 1500 条、标多久、判准谁定"。把微调成本讲在 GPU 上,是把账算错了。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
五问围着一件事转:你到底攒过数据集,还是只导过数据

  1. 数据不够怎么办?用大模型合成行不行?

    期望可以,但有边界:合成适合补覆盖度(长尾类别、边界样例、格式变体),不适合凑总量 —— 合成分布来自教师模型而不是你的线上,凑得越多偏得越远。必须配拒绝采样过滤(采样 N 次后用规则或判分器筛,只留通过验证的),否则教师的错误率原样烧进学生;合规上还要看训的是不是同类通用模型
    信号能区分「补覆盖度」和「凑总量」→ 真用过合成数据;答「让 GPT 生成一万条」→ 没做过,或做过但没测过效果
  2. 怎么定判准?两个标注员标得不一样怎么办?

    期望判准要写成可操作的规则 + 正反例,不是形容词。不一致时先算一致率(Cohen's kappa / Krippendorff's alpha),再看不一致集中还是分散:集中 → 改判准(那类样本没写清);分散 → 培训或换人。绝不用多数投票直接盖过去,那会掩盖判准的模糊
    信号说得出「先看不一致是集中还是分散」→ 组织过标注;答「取多数意见」→ 没意识到不一致本身是信号
  3. 评测集你怎么切?

    期望不能从训练集随机切。三条标准 —— 时间靠后、标注员不同、另加一份通用能力集 —— 至少满足两条。评测集还要冻结:不能因为某次分数难看就去改它,那等于没有基线
    信号答「随机切 10%」且没有补充说明 → 基本可判定没做过严肃评测;主动提「另加通用能力集抓遗忘」→ 踩过遗忘的坑
  4. 业务数据里有隐私和脏东西,你怎么处理?

    期望脱敏在入数据集前做,不是入模后补 —— 训进权重就拿不出来了;PII 识别后替换为占位符,且占位符形态要与线上一致,否则分布对不上;敏感样本剔除要留记录,避免无意中剔掉整个类别造成分布倾斜;用外部标注要走数据出域审批
    信号说得出「脱敏必须在入数据集前」和「占位符形态要和线上一致」→ 真处理过;只答「做脱敏」→ 泛泛
  5. 业务方只给 200 条数据、两周出结果;两周后不如 few-shot 基线,怎么向上汇报?

    期望先判 200 条够不够:2–3 类分类可能真够,复杂生成肯定不够,不够就直说,别硬跑一轮 → 第一周不训练:挑 50 条最有代表性的做评测集、150 条训练,跑 few-shot 基线 → 第二周训练 + 对照 → 不够时靠重写提质、补边界,别合成凑 2000 条 → 汇报写「当前数据量下相对基线无稳定增量,交付物是 50 条评测集 + 可复现基线
    信号直接开训、两周后报一个没有基线对照的数字 → 最常见也最扣分;第一周不训练、先做评测集和基线 → 本题最强信号
一句「随机切 10%」就把「导过数据」和「攒过数据集」切开了 —— 第 3 层是分水岭;第 5 层再问一次:只有 200 条时,你先做的是训练还是评测集。

评分要点

  1. 能给出四步流水线(来源 / 判准 / 体检去重 / 切分),而不只是列数据来源
  2. 强调判准先于标注,并知道判准缺位会导致标注退化到表面特征
  3. 知道要算标注一致率,并知道不一致的分布形态是信号
  4. 知道评测集必须与训练集异源(本题核心)
  5. 知道要另加一份通用能力评测集抓遗忘
  6. 能给出按任务类型分档的数据量区间
  7. 知道质量压倒数量,数据不够时提质量而不是合成凑数
  8. (加分)知道近重复剔除和分布体检的具体做法
  9. (加分)知道微调成本大头在标注不在算力

常见错误

"从业务数据库里导出来的"只答了来源,没有任何质量动作。
"随机切 10% 做验证集"本题最有效的判负点。 同源评测集只能自证。
"数据当然越多越好"与当前共识相反,也说明没做过数据消融。
"用 GPT 生成了一万条"没有拒绝采样、没有分布意识,且可能有合规问题。
"标注不一致就投票"把判准模糊掩盖过去,问题会在训练后以另一种形式出现。
"清洗了一下脏数据"含糊回答的典型形态:用"清洗"这类动词代替具体动作。 追问"具体清了什么、剔了多少"即见底。
成本只讲 GPU说明没组织过标注。
提不到边界样例说明只关心平均指标,没管过 badcase。

关联学习