Skip to content
This repository was archived by the owner on Aug 16, 2022. It is now read-only.

Latest commit

 

History

History
24 lines (14 loc) · 4.41 KB

43.artificial-data-synthesis.md

File metadata and controls

24 lines (14 loc) · 4.41 KB

43. 人工数据合成

你的语音系统需要更多听起来像是从车内获取的数据。相比在驾车时收集大量的数据,可能有一个更简单的方法去获取数据:通过人工合成数据。

假设你获得了大量的车/道路噪音音频剪辑。你可以在多个网站上下载这些数据。假设你也有一个大的训练集,数据是人们在安静的房间里说话。如果你把一个人的音频片段“添加”到一个汽车/道路噪音的音频片段,你会得到一个音频剪辑,听起来就好像那个人在嘈杂的汽车里说话一样。通过该过程,你可以“合成”大量听起来像是在车内收集的数据。

更一般的说,在几种情况下,人工数据合成可以让你创造出一个合理匹配开发集的庞大数据集。让我们以猫咪图片检测器作为第二个例子。你注意到开发集图片有更多的运动模糊,因为它们倾向于来自于手机用户,用户在拍照时会轻微移动手机。你可以从互联网图片训练集中得到不模糊的图片,并为它们添加模拟的运动模糊,从而使它们和开发集更相似。

请记住,人工数据合成存在一定的挑战:有时候创建对人来说看起来很逼真的合成数据比创建对电脑来说看起来很逼真的数据要容易。例如,假设你有 1000 小时的语音训练数据,但只有 1 小时的汽车噪音。如果你对原始1000小时训练数据的不同部分重复使用同样的这一小时的汽车噪声,你最终得到的合成数据集有着相同的汽车噪声,然而同样的汽车噪音会不断重复。虽然听这种音频的人可能不能区分(对我们大多数人来说所有的汽车噪声都一样),但学习算法可能会“过拟合”这一个小时的汽车噪声。因此,对于汽车噪声听起来不同的新音频剪辑,算法可能泛化能力较差。

或者,假设你有1000个小时不同的汽车噪声片段,但它们全部都只是来自10种不同的车。在这种情况下,算法可能会“过拟合”这些车,如果在不同的汽车音频上测试,算法性能会较差。不幸的是,这些问题很难被发现。

再看一个例子,假设你在构建一个识别车的计算机视觉系统。假设你和一个视频游公司合作,该公司拥有一些车的计算机图形模型。为了训练算法,你使用这些模型生成汽车的合成图像。即使合成图片看起来很逼真,该方法(已被很多人独立提出)可能不会工作的很好。在整个视频游戏中可能有约20辆车设计。构建一个3D的汽车模型成本非常高;如果你在玩游戏,你可能不会注意到你反复看到同样的车,也许只是油漆色不同,也就是说,这些数据看起来对你非常逼真。但是和路上所有车的集合相比(也就是你可能在开发/测试集里看到的),这20辆合成的车仅仅是世界上汽车分布的一小部分。因此,如果你10万个训练样本都来自这20辆车,系统将“过拟合”这20辆特定车的设计,并不能很好的泛化到包括其他车型设计的开发/测试集。

尽量避免给出合成数据的属性,这将使学习算法有可能将合成和非合成的样本区分开来——例如,所有的合成数据是否来自 20 个汽车设计中的某一个,或者所有的合成音频是否都来自于某个小时的汽车噪音。这个建议很容易被忽视。

在处理数据合成过程时,我的团队有时会花上几周的时间来生成带有细节的数据,这些数据与实际的数据分布非常接近,从而产生显著的效果。但如果你能够正确地获取这些细节,你可以突然获得比以前更大的训练集。

当合成数据的时,考虑一下你是否真的合成了一组具有代表性的样例。试图避免提供合成数据的属性,使得学习算法可以区分合成和非合成样本。例如,如果所有的合成数据都来自20辆车设计中的某一个,或所有的合成音频都来自仅仅一个小时的汽车噪声。这个建议难以遵从。

当开展数据合成工作时,我的团队有时在生成数据上会花费数周,使得生成数据的详细信息足够贴近真实分布的,以便产生显著的影响。但如果你能正确地获取这些细节,你将会瞬间获取到远比以前大的训练集。