Back to blog
    数据集策划数据质量无代码微调

    无数据科学团队也能清洗和策划微调数据集

    使用无代码工具清洗、验证和策划微调数据集的分步指南——涵盖去重、标签验证、格式检查和分布分析。

    Edward Xi Yang

    大多数微调失败的根源都在训练开始之前,也就是数据集里。数据脏,模型的输出就脏;标签前后不一致,模型的分类就不一致;训练数据和生产环境的真实输入对不上,模型上线后的表现自然好不了。

    麻烦在于,数据清洗历来被当成数据科学的活儿:写 Python 脚本做去重、做统计分析看分布、搭一套定制的校验流水线。如果你是一家 AI 服务商、产品负责人,或者没有数据工程背景的独立开发者,这一关看上去就像一堵墙。

    这堵墙是可以绕过去的。下面这套 6 步流程只用无代码工具、电子表格技巧和 LLM 辅助校验,就能产出干净、可直接投入生产的微调数据集。我们见过服务商团队用这套方法在 2 到 4 小时内清完 1,000 条样本的数据集:不用 pandas,不用 Python,也不需要数据科学学位。

    数据清洗为什么这么关键

    以下是我们经常见到的三种场景:

    场景一: 某家服务商从客户那里收集了 2,000 条客服样本,拿到手就直接开始微调。模型在他们的测试集上得到 78% 的准确率。接下来两周,他们换了各种超参数、学习率和训练轮数,这个数字几乎没动过。

    场景二: 另一家服务商面对同类客户,只收集了 800 条样本,先花半天时间清洗数据,然后才开始微调。模型在难度相当的测试集上得到 91% 的准确率。

    差别就在数据上。

    脏数据会在训练时喂进互相矛盾的信号。第 142 条样本把输入 X 标成类别 A,第 891 条样本把几乎一模一样的输入标成类别 B,两边模型都学不牢。这类矛盾在收集阶段看不出来,到了训练阶段却是致命的。

    经验法则: 每花一小时清洗数据,后面就能省下 3 到 5 小时排查模型性能的时间。

    6 步清洗流程

    步骤 1:格式验证(15 到 30 分钟)

    动手做别的之前,先确认数据集里每一条样本的结构都是对的。这一步能拦下那些会直接导致训练失败、或者悄悄污染数据的明显问题。

    需要检查的内容:

    • 每条样本都带齐必填字段(输入、输出,以及训练流水线要用到的元数据字段)
    • 必填字段里没有空值或 null
    • 输出值符合预期类型,比如类别标签取自你预先定义好的集合,而不是随手写的自由文本
    • 文本字段里没有编码乱码、HTML 标签或不可见字符

    不写代码怎么做:

    把数据集用电子表格打开(Google Sheets 或 Excel),然后用下面这几招:

    • 缺失值:对每一列排序,空单元格会集中到最上面或最下面,标记出来逐个排查。
    • 非法标签:给类别列建一个下拉校验列表,任何不在有效类别里的单元格都会报校验错误。Google Sheets 的路径是「数据 > 数据验证 > 列表项」。
    • 长度检查:新增一列写 =LEN(A2),分别看输入和输出的长度,再按长度排序。短得离谱的输入(不到 10 个字符)多半是录入错误;长得离谱的输出往往夹带了复制粘贴的残留。
    • 字符问题:用 =CLEAN(A2) 去掉不可打印字符。如果 A2 <> CLEAN(A2),说明这个单元格里藏着会污染训练的不可见字符。

    用 Ertas Vault: 上传数据集后,Vault 会自动跑一遍格式校验,把缺失字段、非法标签值、编码问题和长度异常都标出来。你只要复核并修正被标记的条目,不用自己大海捞针。

    典型结果: 3% 到 8% 的样本存在格式问题。修起来通常很直接:补上缺失字段、改掉类别标签里的拼写错误、清掉编码残留。

    步骤 2:去重(15 到 30 分钟)

    完全重复和近似重复的样本会浪费训练容量,还会让模型去背具体样本,学不到通用规律。

    完全重复很好办:按输入列排序,扫一眼有没有一模一样的行。在 Google Sheets 里可以用条件格式把重复项高亮出来,路径是「格式 > 条件格式 > 自定义公式」,填入 =COUNTIF(A:A, A2)>1

    近似重复更难找,也更值得花力气。这类输入措辞略有差别,传达的信息完全一样。例如:

    • 「我要怎么取消订阅?」
    • 「订阅可以怎么取消?」
    • 「我想取消订阅」

    这三条样本教给模型的东西基本一样。数量少的时候三条都留着影响不大;可一旦数据集里有 15% 是近似重复,你的有效数据量就比你以为的少了 15%。

    不写代码: 按输入文本排序后用肉眼扫。大部分近似重复排序后会挨在一起,把和上下行高度相似的行标出来即可。

    借助 LLM: 每批 50 到 100 条输入,粘进 Claude 或 GPT-4o,配上这段提示词:

    Review these inputs and identify groups that are near-duplicates
    (same meaning, different phrasing). List each group with the
    row numbers. Only flag true semantic duplicates, not inputs
    that happen to discuss the same topic.
    
    [paste inputs with row numbers]
    

    用 Ertas Vault: Vault 会计算所有输入两两之间的嵌入相似度,自动标出超过相似度阈值的组合(阈值可配置,默认 0.92 余弦相似度)。你只要复核这些被标出的组合,决定留哪一条。

    典型结果: 人工收集的数据集里,5% 到 15% 的样本是近似重复;合成数据集里这个比例能到 15% 到 25%。每一组重复只留一条,保留质量最高的那个版本。

    步骤 3:标签一致性检查(1 到 2 小时)

    这一步收益最大。标签不一致是训练效果劣化的头号原因,而且不专门去找就发现不了。

    问题出在哪: 不同的标注者(或者同一个人在不同的日子)会把相似的输入标成不同的类别。类别之间的边界,每个人的理解都有出入。边界情况被归到哪一类,取决于谁标的、什么时候标的。

    不写代码怎么查:

    方法一:分类通读。 按类别逐个筛选表格,每个类别读 20 到 30 条样本,问自己一句:「这些真的都属于这个类别吗?」把看着模棱两可或者明显放错的标出来。

    方法二:易混类别对分析。 对每一对容易混淆的类别(比如 billing_errorrefund_request),把两类一起筛出来对照着看,判断边界是否清晰、是否前后一致。

    方法三:LLM 辅助复核。 这是最快的路子。每次把 50 到 100 条样本(输入加上已标注的标签)粘进一个前沿模型:

    Review these labeled examples for consistency. For each example,
    confirm whether the assigned label is correct or suggest a
    correction. Pay special attention to:
    - Examples that could belong to multiple categories
    - Labels that seem inconsistent with similar examples
    - Edge cases where the labeling guideline may be ambiguous
    
    Format: Row [number]: [CORRECT / INCORRECT -> suggested label] - [brief reason]
    
    [paste examples]
    

    分批跑完整个数据集。凡是被 LLM 判为错误的样本,都要再过一遍人工复核。

    典型结果: 5% 到 12% 的样本存在标注不一致。修正之后,模型准确率通常能提升 3% 到 8%,这是整条微调流水线里投入产出比最高的一件事。

    步骤 4:分布分析(30 到 45 分钟)

    训练数据的分布应该接近生产数据的分布。两者对不上,模型的置信度就会失准:在罕见类别上过度自信,在常见类别上反而发挥不好。

    需要检查的内容:

    • 类别分布。 统计每个类别的样本数,算出各自的占比,再和生产环境的分布(或者你能给出的最好估计)对比。
    • 输入长度分布。 训练输入能代表模型上线后会见到的东西吗?如果生产环境的输入在 20 到 800 词之间,而训练数据清一色是 100 到 200 词,模型在过短和过长的输入上都会吃力。
    • 时间分布。 如果数据是长期陆续收集的,检查分布有没有漂移。半年前的数据反映的模式,可能和现在的线上流量已经不一样了。

    不写代码怎么做:

    在电子表格里:

    • 类别计数: 每个类别用一次 =COUNTIF(B:B, "category_name"),再画一张简单的柱状图。
    • 长度分布: 加一列词数统计 =LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ",""))+1,然后插入直方图(插入 > 图表 > 直方图)。
    • 和生产数据对比: 如果手上有生产数据,把两张图并排放。从形状上看,两者应该差不多。某个类别在生产环境只占 5%,在训练数据里却占了 25%,那就是分布错配。

    发现错配怎么办:

    • 占比过高的类别: 删掉多出来的样本,优先删质量较低的和重复的。
    • 占比不足的类别: 为这个类别补充样本(合成数据在这里很好用),或者去收集更多真实样本。
    • 输入长度错配: 针对缺少的长度区间,专门造一批样本。

    典型结果: 大多数人工收集的数据集里,都有 1 到 3 个类别的占比明显偏高或偏低。重新配平之后,占比不足的类别性能通常能提升 10% 到 20%,占比过高的类别几乎不受影响。

    步骤 5:异常值移除(30 到 45 分钟)

    训练数据里的异常值,是那些和数据集其余部分差异极大的样本。它们有可能是合理的边界情况,本身未必有错,但对训练的影响会被放大,数据集越小越明显。

    要留意的异常值类型:

    • 极长或极短的输入。 98% 的输入都在 50 到 300 词,其中两条却有 2,000 词,这两条在训练时可能主导梯度更新。
    • 跑题样本。 不知怎么混进数据集、和任务领域完全不沾边的输入。
    • 含义模糊的样本。 连领域专家都没法有把握地给出正确标签的输入。这类样本是训练噪声,算不上有价值的边界情况。

    不写代码怎么找:

    • 按输入长度排序,检查头尾各 2% 到 3% 有没有异常。
    • 按输出长度排序,同样查一遍。
    • 在每个类别内部按字母序排序,扫一下最前和最后几条:内容上的异常值经常会被排到两端。

    判断标准: 对每个异常值问一句:「模型上线后会遇到这样的输入吗?」会,就留下(同时考虑补几条类似样本,别让它太孤立)。不会,就删掉。

    典型结果: 1% 到 3% 的样本属于值得删掉的异常值。单看每一条影响都很小,和其他清洗步骤叠加起来才见效果。

    步骤 6:最终人工审查(1 到 2 小时)

    最后一步,是针对步骤 1 到 5 中被标记的所有内容做一次集中的人工审查,再加一轮随机抽样。

    复核被标记的条目: 把前面每一步标出来的样本逐条过一遍,做最终决定:修、留,还是删。

    随机抽检: 从清洗后的数据集里随机抽 30 到 50 条,逐条读完。如果 50 条里发现超过 1 到 2 个问题(错误率高于 4%),就还需要再来一轮清洗。如果只有 0 到 1 个问题,数据集可以用了。

    把决定记录下来。 简单记下你定下的标注规则、处理过的边界情况、澄清过的类别定义。等以后要扩充数据集时,这份记录价值极高:它能让新增的数据和原有数据保持一致。

    不同任务类型的常见数据问题

    分类任务

    最常见的问题: 标错标签,尤其是在类别边界上。两个概念上有重叠的类别(比如「投诉」和「反馈」),标注一定会出现不一致。 解法: 为每一条类别边界写出明确的判定标准,再拿这套标准把所有边界样本重新过一遍。

    文本生成任务

    最常见的问题: 输出风格不统一。有的样本用正式语气,有的很口语;有的带小标题,有的不带。模型会把这种不统一一起学走。 解法: 给输出定一份风格规范,把偏离规范的样本改写。哪怕是很小的格式差异(比如输出末尾有没有句号)也会有影响。

    抽取任务

    最常见的问题: 字段缺失。有的样本把目标字段全抽出来了,有的漏掉了可选字段。模型于是学到「字段缺了也没关系」。 解法: 先定清楚哪些字段必填、哪些可选。必填字段,每条样本都得有。可选字段,「没找到」要用统一的表示方式(null 还是空字符串,二选一)。

    对话任务

    最常见的问题: 轮次结构不统一。有的对话以寒暄开场,有的直接进入正题;有的带 system 消息,有的没有。 解法: 把对话结构标准化。轮次顺序、角色标签、system 消息格式,所有对话都套同一个模板。

    时间估算

    根据我们和服务商团队合作的经验,完整走完这 6 步大致要花这些时间:

    数据集规模手动清洗Vault + LLM 辅助质量提升
    250 条样本1.5 到 2.5 小时30 到 45 分钟准确率 +5% 到 10%
    500 条样本2 到 4 小时45 到 90 分钟准确率 +5% 到 12%
    1,000 条样本3 到 6 小时1 到 2 小时准确率 +5% 到 15%
    2,500 条样本6 到 12 小时2 到 4 小时准确率 +5% 到 15%
    5,000 条样本12 到 20 小时4 到 8 小时准确率 +5% 到 15%

    准确率提升那一列,指的是相对于直接用未清洗的数据训练,在留出测试集上通常能拿到的增益。这部分性能完全来自清洗本身,模型、超参数和训练方法都没有变。

    什么时候该清洗,什么时候该补更多数据

    先清洗,如果:

    • 随机抽检发现的问题超过 5%
    • 你还没做过任何一轮清洗
    • 学习曲线已经走平(继续加数据也不见效)
    • 类别之间的数量差距超过 2 倍

    补更多数据,如果:

    • 数据已经很干净(标签准确率高于 96%)
    • 在当前数据量下,学习曲线还在往上走
    • 某些类别样本不足,而且找不到更多真实样本
    • 你需要覆盖现有数据里没有的输入模式

    大多数情况下,正确的顺序是:先清洗,再评估,需要的话再补数据。跳过清洗直接去收集数据的团队,总耗时往往会多出 2 到 3 倍,因为新收进来的数据只会在原有的质量问题上继续叠加。

    结论

    要产出干净的微调数据,你需要的是一套系统的流程、2 到 6 小时的专注投入,以及愿意逐条细读自己训练样本的耐心。数据科学团队并不是前提条件。

    上面这 6 步:格式验证、去重、标签一致性、分布分析、异常值移除、最终审查,能拦下造成 80% 微调质量问题的那些毛病。用电子表格做得了,配合 LLM 复核做得了,用 Ertas Vault 内置的校验工具会更省事。

    模型的上限,就是它所学数据的上限。这份时间值得提前花。


    延伸阅读

    就本文向 AI 提问

    Ship AI that runs on your users' devices.

    Free plan with 30 credits/mo, no card required. Paid plans from $10/mo USD.

    Keep reading