合成数据什么时候最有用?
错误是将合成数据用作现实的替代品。更好的用途是作为故意攻击系统的工具。
梯形图转SCL | 博途AI辅助编程文档 | AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
今天我在看一个小的收据测试集时,遇到了一个熟悉的争论:如果图像是合成的或高度控制的,它们是否应该被视为有用的数据?
我的回答越来越是肯定的,但前提是我必须精确地说明它们被允许证明什么。
我看的那些收据作为测试用例是有用的,但它们显然不能证明提取系统能够应对人们在现实世界中拍摄的收据的全部混乱。这个区别很重要。几个干净的例子无法告诉我当热敏纸褪色、收据被折叠穿过总额、有人在黄色厨房灯下拍摄、半页在阴影中、相机倾斜、边缘被撕掉、手写覆盖了一行项目、或者纸张在嘈杂背景中被弄皱时,管道的行为如何。
传统的答案是收集更多真实的收据,最终这是必要的。但将现实世界的数据收集视为所有健壮性工作的先决条件会产生另一个问题:我已经知道系统可能失败的许多方式,但我选择不测试它们,直到用户恰好为我产生正确的失败。
这就是合成数据变得极其有用的地方。
错误是将合成数据用作现实的替代品。更好的用途是作为故意攻击系统的工具。
1、合成基准可以回答一个更窄但非常有用的问题
假设我从一个内容完全已知的收据开始。我知道商家、日期、行项目、税款、总额、付款信息以及解析器应该返回的每个其他字段。那个干净的收据成为事实来源。
我现在可以创建同一文档的受控变体。将纸张折叠穿过一个行项目。淡化热敏打印。添加透视失真。将上半部分置于阴影中。撕掉部分商家标题。稍微模糊照片。将其放在杂乱的桌子上。添加邮票。弄皱它。裁剪得太靠近一个边缘。
重要的是语义事实没有改变。视觉条件改变了。
这给了我一个非常干净的实验。如果原始收据解析正确但折叠版本丢失了总额,我就了解了关于系统的特定信息。如果某个OCR提供商能够承受透视失真但在褪色打印上失败,我可以测量这一点。如果一个模型对杂乱更鲁棒但成本是五倍,这就变成了一个真实的产品权衡,而不是模糊的印象。
合成数据在这里特别强大,因为生成过程可以被参数化。我可以创建困难程度的家族:轻度、中度和严重模糊;增加旋转;不同的阴影位置;逐渐褪色的文本;多个折叠位置。基准测试然后可以揭示的不仅是系统是否失败,还有它的性能开始下降的地方。
这比一堆随机示例更有用的工程信号。
2、基准只有在我保持其声明狭窄时才有效
当这些合成结果被提升为它们无法支持的声明时,危险就出现了。
如果我的系统在大型合成收据集上得分96%,我不能得出结论说它在真实客户上传的收据上也会得96%。生成器可能系统地产生比手机摄像头更清晰的文本。它对撕裂收据的概念可能与纸张实际撕裂的方式不匹配。它可能重复生成相同风格的阴影。商家布局、字体、语言、打印机缺陷和相机行为可能与我最终遇到的分布不同。
照片级真实并不意味着统计代表性。
这个区别足够重要,我希望合成鲁棒性和现实世界性能保持为单独的指标。
合成鲁棒性套件回答这样的问题:这个系统能否容忍已知的失真,哪些类型的损坏会破坏它?
现实世界评估回答一个不同的问题:产品在用户生成的实际分布上表现如何?
一个不能替代另一个。它们相互补充,因为它们暴露了不同类型的弱点。
3、合成数据在寻找失败方面异常出色
真实数据集通常被视为现实的样本。当目标是估计预期性能时,这是有道理的。
然而,对于健壮性工作,我并不总是想要一个代表性样本。有时我想要一个对手。
如果只有一百个真实收据中有一个被严重折叠,代表性基准可能几乎不包含这种失败的示例。平均分数看起来很健康,而一个已知的弱点几乎完全没有被测试。
合成套件让我可以故意过度采样我害怕的情况。
即使折叠不常见,我也可以创建五十个折叠收据。我可以生成病理组合,如模糊加低光加透视失真。我可以测试撕裂专门穿过总额或税款部分的收据。我可以创建一个课程,逐步增加难度直到每个提供商失败。
这不是代表性采样,它不应该假装是。
它更接近风洞。
飞机制造商不期望每次飞行都经历风洞中使用的完全相同的人工条件。受控环境的存在是因为它让工程师隔离力量、推动边界并安全地观察失败。现实仍然是最终测试,但等待现实暴露每个弱点将是一个荒谬的工程策略。
这就是我 increasingly 想要思考合成鲁棒性数据的方式。
4、受控生成也使诊断更容易
还有另一个我低估了的优势:合成为我提供了来源。
对于随机的真实世界失败,我可能知道提取失败了,但不知道确切原因。收据可能同时倾斜、模糊、褪色和部分遮挡。修复问题变得更难,因为几个变量一起改变了。
通过受控合成,我可以一次改变一件事。
取一个正确解析的收据,只引入透视失真。如果准确率下降,这给了我更强的因果线索。保持透视固定,逐渐添加模糊。将折叠移动到不同的语义区域。在保持其他所有不变的情况下,比较干净背景与杂乱背景。
这使得数据集不仅对评分有用,对调试也有用。
这也意味着失败可以成为回归测试。一旦我发现特定的折叠模式导致解析器错过GST金额,我可以永久保留该示例。以后的更改不应该默默地重新引入相同的弱点。
随着时间的推移,合成基准成为系统学会承受的失败目录。
5、生成需要结构,否则它会变成合成垃圾
这并不意味着我想生成数千个随机的"真实收据"并称问题已解决。
有用的合成管道需要一个正在变化的内容模型。
对于收据,我会将语义变化与捕获变化分开。语义变化涵盖商家类型、布局、货币、税款、字体、行项目结构和信息密度。捕获变化涵盖相机角度、光照、模糊、纸张状况、裁剪、遮挡和背景。
这些维度应该作为每个生成示例的元数据记录。如果图像有thermal_fade=severe、rotation=12°、fold=through_total和background=cluttered,我可以有意义地聚合失败。没有这种结构,我只有一个充满困难图像的文件夹,不知道它们教会了我什么。
我还希望生成尽可能机械地保留基本事实。如果我先创建基础收据数据,然后渲染或转换视觉文档,预期的提取仍然是已知的。这比先生成任意图像然后让另一个模型告诉我它包含什么安全得多。
事实来源应该先于损坏。
这个原则使合成评估更加可信。
6、真实数据最终应该攻击合成假设
一旦真正的收据开始到达,它们除了测量生产性能之外还有另一个有用的工作:它们可以揭示合成生成器忘记了什么。
也许用户在仍然拿着收据时拍摄,引入手指和弯曲的纸张。也许印度热敏收据以我的生成示例没有捕捉到的方式褪色。也许药房收据有不寻常的多列布局。也许WhatsApp压缩创建了我没有建模的伪影。也许用户经常提交数字收据的截图而不是纸质收据的照片。
每个真实的失败都可以扩展损坏模型。
这创造了一个我喜欢的循环:
合成假设 → 鲁棒性测试 → 现实世界部署 → 意外失败 → 新的合成场景 → 回归测试。
合成套件逐渐被现实扎根,而不是作为一个平行的人工宇宙存在。
这也是为什么我不会等到拥有大量真实数据集才开始。早期的合成测试可以在真实使用仍然稀少时消除明显的弱点。随着真实示例的积累,它们逐渐将基准重塑为实际重要的失败模式。
这两个数据源可以相互改进。
7、从"合成还是真实?"转变为"我需要什么证据?"
我认为很多关于合成数据的争论一旦评估声明首先被陈述就会变得更简单。
如果我想知道用户拍摄的印度杂货收据的真实预期提取准确性,我需要代表性的现实世界数据。合成示例不能诚实地建立那个数字。
如果我想知道我的OCR管道在文本被折叠穿过时是否会崩溃,我不需要等到五十个用户恰好上传折叠收据。
如果我想在相同失真下比较两个提供商,受控合成数据可能实际上是更干净的实验。
如果我想发现失败边界,代表性采样可能不如故意对抗性生成有用。
不同的问题需要不同的证据。
这是我从今天的工作中采用的操作原则。我很乐意使用越来越真实的合成收据,包括带有折叠、撕裂、污渍、褪色、不良光照和尴尬捕获条件的丑陋收据。我只是不想称它们为它们不是的东西。
它们不是系统理解现实世界的证明。
它们是让系统赢得面对现实世界权利的一种方式。
原文链接:Synthetic Data Is Most Useful When You Stop Pretending It Is Real Data
汇智网翻译整理,转载请标明出处