大模型微调数据工程避坑指南:数据决定上限,这 5 个坑我帮你踩过了

同样的模型、同样的 LoRA 配置,为什么有人微调后效果显著,有人却越调越差?90% 的差距不在训练参数,而在数据工程。这篇文章讲微调数据最容易踩的 5 个坑。

一、背景:数据是微调的第一生产力

微调的本质是"用数据教会模型你的领域"。模型再强,喂进去的是脏数据、重复数据、错误数据,产出必然打折扣。数据质量决定了微调效果的上限,训练只是逼近这个上限。

二、核心原理:高质量微调数据的三个维度

  1. 正确性:答案必须正确——错误数据会被模型"学坏"
  2. 多样性:指令和任务要覆盖真实场景,避免模型只会一种问法
  3. 一致性:相同问题的回答风格要统一,避免模型"精神分裂"

三、代码实战:最小数据质量检查

import re

def check_dataset(records):
    """最小数据质量检查:去重 + 长度 + 格式"""
    seen = set()
    issues = []
    for i, r in enumerate(records):
        text = r.get("instruction", "") + r.get("output", "")
        # 1. 查重
        h = hash(text)
        if h in seen:
            issues.append(f"#{i} 重复样本")
        seen.add(h)
        # 2. 长度检查
        if len(text) < 20:
            issues.append(f"#{i} 过短")
        # 3. 格式检查
        if not r.get("instruction") or not r.get("output"):
            issues.append(f"#{i} 缺字段")
    return issues

# 示例数据
data = [
    {"instruction": "解释什么是缓存", "output": "缓存是临时存储..."},
    {"instruction": "解释什么是缓存", "output": "缓存是临时存储..."},  # 重复
    {"instruction": "hi", "output": "hello"},                       # 过短
]
print(check_dataset(data))

输出会标记出重复样本和过短样本——这两类是最常见的数据污染源。

四、关键经验(5 个坑)

  1. 坑 1:不去重——训练集里 30% 重复数据,模型会过拟合到重复样本上。用 MinHash 近似去重,几百万条也能秒级处理
  2. 坑 2:测试集污染——评估数据混进了训练数据,指标虚高,上线就打脸。必须做 6-gram 重叠检测防泄漏
  3. 坑 3:指令单一——所有样本都是一个句式,模型换个问法就不会了。用模板扩写 + 人工补充多样性
  4. 坑 4:忽略偏好数据——只喂"正确答案"不喂"为什么这个更好",模型学不到偏好。构建对比对(chosen/rejected)
  5. 坑 5:不建评估集——没有独立评估集,改完数据不知道变好还是变坏。微调前先建领域评估基准

五、完整系列推荐

本文选自《大模型微调实战:从 LoRA 到全参微调》100 期系统教程,数据工程部分(第 004-015 期)系统讲解了采集、清洗、去重、指令/对话/偏好数据构建、评估集与基线评估。

该系列及 65+ 技术知识库已在 ima 知识号发布,搜索「Kruptos」即可订阅。

8 款 AI 技能(含 kb-content-qc 数据质检技能)已上线 ima 技能广场,搜索即装。


作者:Kruptos(西电毕业,13 年无线通信/DSP/嵌入式科研,现深耕 AI 与云原生)
原创内容,转载注明出处。

更多推荐