你的语⾳识别系统需要更多听起来在车里录制的语音数据。相对于收集那些在开车的时候录制的音频,有⼀个更简单的方法获取这些数据:通过人工合成数据。

假设你已经获得足够的汽车/马路噪音的音频片段。你可以从多个网站上下载这些数据。如果你已经有很多安静环境下录制的训练样本。你可以选出其中⼀个音频片段,然后给它加上背景噪⾳,这样你就获得了⼀个听起来好像在嘈杂的车上录制⾳频。

用这种方法,你可以合成大量的数据,就好像是收集了大量在车里录制的语音。

更广泛的说,在⼀些应用场景中,人工数据合成让你可以创造⼀个庞大的数据集来充分的匹配开发样本集。用猫咪检测器作为第二个例子。你会意识到开发样本集中很多会有运动模糊,这是因为手机用户在照相的时候都会出现轻微的抖动。

你可以从网上找到没有模糊的图片组成训练集,然后加上⼀些模拟的运动模糊。

要记得人工数据合成也有它的挑战:有时候,合成的数据在人看来很真实,但是在机器看来就没有那么真实了。例如,假设你有1000个小时的语⾳训练数据,但是只有1个小时的汽车噪音数据。在合成数据的时候,如果你在训练样本集中1000个小时的原始数据中,总是重复的使用这1个小时的汽车噪音,最后你就得到⼀个有很多重复噪音的合成数据集。对于人来说可能并不能听出有失真的情况,毕竟所有的汽车噪音对我们来说都没有太大的区别,但是机器学习算法却可能因为这重复的1个小时的汽车噪音变得过拟合。那么,算法就很难泛化到其他新的有背景噪音的音频片段上,当汽车噪音和原来不同的时候,算法就会遇到识别的麻烦。

另⼀种相似的情况,假设你有1000个小时的汽车噪音,但是这些音频只来自10种不同的汽车。这种情况下,算法很可能会对这10种汽车过拟合,可能在处理其他类型车子的声音时性能表现的很差。不幸的是,这些问题很难会被注意到。
43.人工数据合成 翻译自 吴恩达新书-Machine Learning Yearning-LMLPHP
再举⼀个例⼦,假设你正在建造⼀计算机视觉系统来识别车子。假设你有⼀个伙伴在视频游戏公司,有几种车子图像模型。为了训练你的算法,你会用这些模型来生成车子的合成图像。即使这些合成的图片看起来非常真实,这个方法很能还是不能很好的工作。所有视频游戏的场景中可能只用到20种左右的车子的设计,如果你在玩游戏,你很可能根本不会注意到你看到的都是重复的车子,很多只是车子颜色不同。也就是说,这些车子在你看来都很真实。但是和马路上真实在开动的车子相比,也就是在开发/测试集中的样本相比,这些20种型号的车子只是世界上车子类型里很小很小的⼀部分。如果你用20种型号的车子来合成了100000个测试样本,你的系统会对这20种车子过拟合,系统会无法泛化,也就无法在开发/测试样本集中识别出其他车子的设计。

在合成数据的时候,要有意识的提醒自己是不是真的合成出了有代表性的样本。尽量避免使用那些能够被学习算法识别出人工合成的痕迹,比如所有数据都是从20种车子合成而来,或是所有的音频样本都是仅由1个小时的汽车噪音而来。这个建议实际上很难遵守。当合成数据时,我们的团队有时会在产生数据之前花上好几个星期在⼀些重要的细节上,来保证合成的数据可以足够接近真实的数据分布。如果你想正确的获知这些细节,你必须提前就接触非常大量的训练样本集。

10-05 09:30