训练模型从未如此简单

但构建一个真正可用的模型?那是另一回事

训练模型从未如此简单
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI模型价格对比 | AI工具导航 | ONNX模型库 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

在2026年,创建数据集、训练本地分类器并将其集成到你的产品中,可能比等待第三方提供商回复一个支持工单还要快。这很了不起。但也很危险,因为速度让你很容易跳过那些真正重要的步骤。

1、公交车站旁训练出的模型

我最近在Apiiro运行了一个大型实验,结果惨败。原因之一是我们的LLM提供商出现了意外的延迟飙升,从0.5秒跳到了将近50秒。这彻底毁了实验,我不得不关闭它。

在等待提供商回复工单的时候,我开始为关键的分类部分开发一个本地TinyBERT模型。我实际上是在回家的公交车上开始构建它的。当我到站时,我已经有了一个3毫秒延迟且准确率很好的工作演示。感觉像是一场巨大的胜利。

接下来的几天我仔细看了之后发现,任务是不平衡的,我们的数据有限,而且我没有正确衡量指标。我尝试了更多模型,但没有太大改善。最终,我们保留了LLM并加上了一个故障安全机制,因为它仍然便宜、更灵活,而且只需一个提示就能产生更好的整体质量。

公交车上那个感觉像是突破的演示?它远没有准备好进入生产环境。差得远呢。

在之前的一篇文章《50种BERT》中,我论证了你并不总是需要一个万亿参数的大语言模型来处理简单任务。我仍然相信这一点。但这次经历教会了我那篇BERT文章没有涵盖的东西:训练一个模型和训练好一个模型之间的距离是巨大的。工具让第一部分变得微不足道。让模型真正在生产环境中运作,仍然需要没有任何框架能替你抽象掉的专业知识和常识。

这就是为什么我和Sapir Tzabari一起写了这篇文章。Sapir在Axonius作为产品数据科学家有构建ML分类系统的经验。我从构建者的角度接触模型训练。AI热潮让我这样的人能够在几小时内训练模型。通过处理经典ML,Sapir学到了正确处理数据、分割和指标有多棘手。我直接跳到了闪亮的工具,然后不得不学习为什么那些基础东西存在。

如果你正在训练一个分类器,这里有六个关键概念需要牢记:

  1. 数据收集与标注:你的模型的上限取决于你的数据
  2. 数据清洗:垃圾进,垃圾出
  3. 不平衡数据集:当准确率对你撒谎时
  4. 训练/验证/测试分割:可信赖评估的基础
  5. 了解你的指标:真正重要的术语
  6. 过拟合:当你的模型在死记硬背而不是学习
6 concepts overview

1. 数据收集与标注

你的模型的上限取决于你的数据。

在你清洗数据之前,在你分割数据之前,在你甚至考虑指标之前,有一个决定一切的问题:你的数据从哪里来,谁标注的?

这是每个ML项目看不见的基础。也是受到最少关注的部分。工程师想直接跳到训练。管理者想看到结果。没有人想听到项目的前80%是收集、标注和验证模型永远不会直接"看到"的数据。

你的数据从哪里来?

你的数据源决定了你的模型能学到什么。这可能意味着客户支持工单、医疗记录、交易日志、代码提交或设备遥测数据。在Axonius,Sapir对来自多个来源的数据进行分类,以改善整个平台的洞察和自动化。在Apiiro,我处理代码变更和安全发现。数据源决定了模型将会和不会接触到什么。

标注问题

必须有人决定每个样本的含义。这个支持工单是"紧急"还是"常规"?这笔交易是"欺诈"还是"合法"?这个数据字段是"敏感"还是"标准"?这些决定看起来很显而易见,直到你把两个专家放在一个房间里看他们产生分歧。

2026年的一个令人不安的现实:试试告诉你的经理你需要停止正在进行的工作来手动标注数千个样本。在一个以速度为优先的世界里,求助于LLM来处理这项任务是很自然的。但当你使用AI模型来标注训练另一个AI模型的数据时,你是在一个从未验证过的地基上建造。信心和一致性不等于正确。

AI可以帮助标注作为起点。但需要具有真正领域专业知识的人来审查和纠正这些标注。人在回路中不是瓶颈。他们是质量关卡。

一致性、质量和50行测试

标注一致性就是一切。如果一个人标注得很激进,另一个人标注得很保守,你不是在训练一个分类器。你是在训练一个掷硬币。如果你的标注者不能达成一致,你的模型也不应该被期望能达成一致。

在写任何代码之前,坐下来手动阅读50-100个样本。标注正确吗?样本合理吗?这只需要一个小时,但可以省下你数周时间。我们遇到的一些最严重的bug在前20行就能看到。记住:1,000个标注良好的样本将胜过100,000个嘈杂的样本。

反馈循环陷阱

这里有一个微妙的问题:当你使用规则标注数据时("如果交易超过10,000美元,标注为欺诈"),模型学会了检测大数字,而不是欺诈。小额欺诈会直接漏掉。如果这些规则足够了,你就不需要模型了。重点是要超越它们。但当你的训练数据基于这些规则时,模型无法超越它们。它不是在扩展覆盖范围,而是在自动化你现有的盲点。

Sapir: 在我的一个项目中,我们首先手动标记了几百个样本,然后创建确定性规则来扩展数据集,自动标注了数千个更多样本。这些规则准确且强有力,因为它们反映了我们手动会使用的相同逻辑——如果我们有更多时间审查它们找到的每个样本,我也会用同样的方式标记它们。这是一种实用的方法,可以在不浪费数周重复工作的情况下标注数千个样本。感觉像是一个可靠的捷径。但这种方法后来揭示了一个重要的局限性。

2. 基本数据清洗

你已经收集了数据并仔细标注了。现在是时候清洗它了。即使是最强大的模型,如果你的数据混乱也会失败。垃圾进,垃圾出。

这一步是区分notebook演示和生产模型的分水岭。分类器失败不是因为模型错了,而是因为没有人注意到数据集被重复了,或者一批标注带有尾部空格创建了幽灵类别。当同一个概念被分散到多个标签变体中时,模型看到太多碎片化的选项,学到更弱的模式,可能无法学到真正的类别边界。清洗并不光鲜,但跳过它意味着你的模型在从噪音中学习。

AI工具可以帮助自动化其中的部分工作。但如果你让模型清洗数据而不了解它删除了什么,你可能会把信号和噪音一起丢掉。使用工具,但要验证它们做了什么。

删除空值和缺失值 确保每行都有文本和标注。也要去除仅含空白的字符串。缺失或空值是无形的墙壁:你的模型无法处理空白文本,没有标注也无法学习。

删除重复项 移除重复的样本。重复的文本可能使模型产生偏差,导致它"死记硬背"而不是学习模式。为什么重要: 重复项给模型虚假的信心,导致过拟合和泛化能力差。

标准化你的文本 通过小写化、去除多余空格以及可选地清理标点或特殊字符来标准化文本。为什么重要: 标准化减少噪音,保持词汇一致性,确保分词器正确解释词语。

过滤极端文本 过短的文本信息量太少,过长的文本超出token限制。使用分词器来截断和填充序列到统一长度。

3. 不平衡数据集:96%的陷阱

当你的大部分数据属于一个类别时,准确率就变成了一个说谎者。这在许多现实世界的分类任务中很常见:垃圾邮件vs正常邮件、缺陷品vs合格品、正面vs负面。你真正关心的东西往往存在于极少数中。

如果96%的数据属于一个类别,一个总是预测该类别的模型就能获得96%的准确率。纸上看起来很好。但它对少数类别什么也没捕捉到。这正是我在公交车上用TinyBERT遇到的情况。我看到的"很好的准确率"是模型走了最简单的捷径:总是预测多数类。

总是设置基线

在庆祝任何结果之前,问问:一个愚蠢的模型会得多少分?如果我先计算了多数类基线,我会立即看到它也得96%。我那个花哨的模型表现不比一个偏向一面的硬币好。基线是ML中最便宜的健康检查,跳过它就是我在意识到模型什么也没学到之前浪费了好几天的原因。

如果你的数据集不平衡,准确率不是你的朋友。而且没有任何工具会警告你。你的训练框架会高兴地报告96%然后继续。你需要自己知道这个数字是无意义的。

如何处理

这个问题没有银弹,但有几种技术可以帮助:

  • 类别权重: 告诉损失函数对少数类别的错误给予更重的惩罚。这通常是最简单和最有效的第一步。
  • 过采样少数类别: 复制少数样本或使用SMOTE等技术合成生成新样本。
  • 欠采样多数类别: 移除一些多数样本来平衡比例。当你有充足的数据时效果很好。
  • 分层分割: 当你分割为训练/验证/测试集时,确保每个分割保持原始的类别分布。否则你的验证集可能没有任何少数样本。

正确的方法取决于你的数据量、领域和不平衡的极端程度。但第一步始终相同:停止只看准确率。

4. 训练/验证/测试分割

这是一个容易犯但难以发现的错误:在模型已经看过的数据上评估它。

模型从训练数据中学习。测试集在最终评估前保持完全不可见。验证集位于两者之间:在训练期间用于调整超参数和提前检测过拟合。没有它,你就像用学生复习过的那套试卷来打分。

常见的起点是80/10/10或70/15/15的分割,但正确的比例取决于你的数据集大小。如果你的数据集不平衡,使用分层分割来保持每个集合中的类别分布。

当心数据泄漏

如果测试集的信息通过其他渠道泄漏到训练中,干净的分割是不够的。这种情况比人们想象的更常见:一个与标注批次相关的时间戳、编码了答案的元数据、或者从整个数据集而不是仅从训练集派生的特征。你的指标会看起来很好。你的模型在新数据上会毫无用处。

随机种子的作用

随机种子控制样本如何分配到各个集合。没有固定的种子,你无法判断改进是来自更好的模型还是来自幸运的分割。我们看到过仅仅因为改变种子就导致F1值波动5个百分点。一个可靠的模型不应该依赖运气。

Train/Val/Test split

5. 了解你的指标:真正重要的术语

在评估任何模型之前,你需要会说这种语言。这些术语出现在每篇ML论文、每个排行榜和每张模型卡中。如果你不熟悉它们,你会误读自己的结果。

混淆矩阵

每个分类结果都落入四个桶之一:

  • 真正例(TP): 模型预测为正例,且预测正确。
  • 真负例(TN): 模型预测为负例,且预测正确。
  • 假正例(FP): 模型预测为正例,但预测错误。误报。
  • 假负例(FN): 模型预测为负例,但预测错误。漏报。

其他一切都建立在这四个数字之上。

核心指标

  • 准确率(Accuracy): (TP + TN) / 总数。整体正确预测的百分比。听起来很好,直到你的数据集不平衡。
  • 精确率(Precision): TP / (TP + FP)。当模型说"正例"时,它有多大概率是对的?高精确率意味着很少误报。
  • 召回率(Recall/Sensitivity): TP / (TP + FN)。在所有实际正例中,模型找到了多少?高召回率意味着很少漏报。
  • F1分数: 精确率和召回率的调和平均值。对两者赋予相等权重。
  • F2分数: 类似F1,但更重视召回率。当漏掉正例比误报代价更高时使用。
  • 患病率(Prevalence): 数据集中正例的百分比。4%的患病率意味着你的模型需要在草堆中找针,而大多数通用指标会掩盖模型在那些针上表现有多差。

为什么这在实践中重要

权衡取决于你的领域。在医学诊断中,漏掉一个正例可能是致命的,所以你倾向于召回率。在垃圾邮件过滤中,太多误报会让用户忽略过滤器,所以你倾向于精确率。没有"最好"的指标,只有适合你问题的指标。AI可以优化一个指标,但它无法决定哪些错误更重要。这需要理解你模型的现实世界影响。

Metrics

6. 过拟合:当你的模型在死记硬背而不是学习

过拟合发生在模型把训练数据学得太好的时候——包括噪音和特定样本——而不是学习通用模式。它在训练数据上表现完美,在其他一切上失败。

如何发现它:

  • 训练集上表现非常高,但验证/测试集上低得多
  • 精确率和召回率等指标非常高,有时可疑地接近100%
  • 在新数据上评估时性能下降

标注陷阱(再访)

如果你的标注是由狭窄的规则生成的,模型学到的是规则,而不是问题。过拟合变得不可见,因为模型按照它唯一被给定的定义来说是"正确的"。你的训练数据必须足够多样化,使模型学到可泛化的信号,而不是死记硬背的模式。

过拟合也可能由于小型或不具代表性的数据集(鼓励记忆)和过度复杂的模型(让模型把噪音和真实信号一起拟合)而发生。还有很多其他原因,但这些是需要注意的常见陷阱。

如何对抗它:

  • 更多样化的数据: 最根本的修复。如果你的模型过拟合了,它可能只是需要看到更多不同的样本。
  • 早停法: 在训练期间监控验证损失。当它开始上升而训练损失继续下降时,停止。那就是分歧点。
  • Dropout: 在训练期间随机"关闭"神经元,防止模型过度依赖特定特征。
  • 正则化: 在损失函数中添加对模型复杂度的惩罚。

Sapir: 还记得前面那个基于规则的标注捷径吗?当我们在那个数据上训练时,结果具有欺骗性。在未见过的样本上,性能急剧下降。模型学到的是规则,而不是底层的问题。要泛化,模型需要接触到规则无法覆盖的样本。

Overfitting

我们的真实看法

我在公交车上做的TinyBERT感觉像是一次胜利,因为构建很快,数字看起来很好。但我几乎跳过了这篇文章中的每一个步骤。我没有仔细检查数据。我没有考虑不平衡问题。我没有设置基线。我信任准确率数字。最终,我们保留了带有故障安全机制的LLM,因为它更灵活,只需一个提示就能产生更好的质量。

我们已经进入了一个AI标注数据、清洗数据、训练模型和评估结果的时代。在某些时候你不得不问:人类专业知识到底在哪里进入了这个循环?如果答案是"哪里都没有",你就没有模型。你有一条没有人验证过的假设链。

在你按下"训练"之前,问问自己:

  • 我手动看过数据了吗?
  • 我知道我的标注从哪里来以及它们有多一致吗?
  • 我的数据集平衡吗?如果不平衡,我在衡量正确的指标吗?
  • 我的测试集真的是不可见的吗?
  • 一个愚蠢的基线会击败我的模型吗?

如果你无法回答全部五个,你还没有准备好。工具会让你继续训练。这才是问题所在。

当你的模型看起来好得不真实时,它很可能就是不真实的。


原文链接: Training a Model Has Never Been Easier

汇智网翻译整理,转载请标明出处