您现在的位置是:网站首页> 内容页

数据科学家“恐怖故事”

  • dw777大旺国际
  • 2019-04-22
  • 149人已阅读
简介《大数据摘要》编纂:张秋月和蒋宝山的文本语音转换圈有一个真伪不明的故事:研究人员花了几个月(甚至几年)调整他/她的语音生成模型,使得他/

    《大数据摘要》编纂:张秋月和蒋宝山的文本语音转换圈有一个真伪不明的故事:研究人员花了几个月(甚至几年)调整他/她的语音生成模型,使得他/她的语音样本听起来非常好。最后,他们发现他们始终误用同一个语音文件进行训练,并且最终的模型只符合语音文件的特点,因此他们有如此平滑的语音样本输出。这个故事直到今天还令人心寒。想象一下另一个可怕的故事:你是个小实习生,你的老板让你建立一个语音识别分类器,用来判断和识别“是”和“否”。你有这些音频文件:yes1.wav、no1.wav、yes2.wav、no2.wav、yes3.wav等等。你建立了分类器,它工作得很好。在显示结果之前,您会发现模型所做的唯一事情是通过读取文件名中的“是”或“否”来预测结果,而完全不监听文件中的音频。你害怕,你哭,你准备逃跑。这是本文作者文森特·万豪克的恐怖故事。完全正确。这些小事故也决定了谷歌首席科学家的职业生涯。以下是他的第一人称故事。让我们看看我们能从中学到什么:这是我作为研究人员的第一份工作。任务非常明确,提供了大量的数据和优良的预测精度标准来评价模型的有效性。模型的基准测试结果非常强大,我最终在生产实践中与客户一起部署了模型。我试图以我认为聪明和强大的方式改进模型的性能指标——它不是完美的,但它每天都在提高。我能看到一篇优秀的学术论文在我的脑海中慢慢形成。生活是美好的。这是一项行业研究,因此在开始撰写论文之前,我需要通过最后一个测试:使用真实的客户数据来评估模型,以便我能够在生产实践中快速部署改进。我的模型在真实数据集上达到零精度。我一直在提高我认为是一个超级性能指标。其中80%是bug,或者真实客户数据的质量很差——我想是的,我急于开始写手写论文,因为它无关紧要。但事实上,我不能把这个坏结果完全放在一边,所以我开始研究发生了什么。我最终发现的是全世界数据科学家的噩梦:准确度是零,毫无疑问。我所有其他的精确数据都是所谓的鬼数。我真不敢相信:这些数字看起来非常可信。它们高于基准,但并非不可能。人们常说,灾难不是以单一的方式发生的,而是当两件事一起出错时,因为我们通常擅长预测和纠正单个错误。为了充分理解一系列几乎不可能发生的事件导致这些看似可信和准确的数字,我必须从细节开始。该模型的目标是改进用于标识名称的语法数据结构。例如,如果你叫罗伯特·摩尔,语音识别系统可能会把你的名字编译成一个语音图表,它大致看起来像一个正则表达式:“/(b.t 108我的任务是生成更好的语音图。我的数据以键值对数据库的形式存储:.{key(string):“robert_moore”value(Grammar):/(b.q t|Bob|Q b)m/}这里有一个错误:我的语法数据结构中使用的一些语音符号没有被发音引擎识别。系统试图将语法数据结构编译为应该表示正则表达式的图像对象,但是失败了。在代码的深层中,有些人试图使系统对这些故障更加健壮:毕竟,在生产实践中,无论何时,您都不希望系统突然崩溃。代码如下所示:Graph*.=compile(.->value);if(!图形){//编译失败。.=compile(.->key);和//(见鬼?)这真的让我大吃一惊:如果数据库记录被损坏了,那么怎么会有人觉得表示数据库记录的键包含真正的负载呢?这怎么可能呢?Value”是一个序列化的语法,“key”只是一个字符串而已。深入挖掘——看,这里有一个“健壮的”方法:Grammar*grammar=parse(.);if(!语法){//未能解析。语法=解析(发音(记录);//(什么?)如果数据不是我们所期望的类型,我们将尝试提取该记录的内容以进行发音。为什么不?无论如何,这是无可救药的。此外,语音生成是非常耗时和计算的操作。设想一下,不管出于什么原因,一群无意义的垃圾邮件字符(包括针对拒绝服务的报复性操作)突然进入系统,这对系统意味着什么。系统将立即超载,而不是“逐渐失败”。你可能已经意识到接下来会发生什么。我的数据的键是用户的真实姓名,比如“robert_moore”。发音引擎可以很容易地将它近似为“/B.t m/”。因此,我的数据的问题直接来自于确定评估模型的标准。理论上,这与我前面提到基于文件名预测音频是否为是(yes)的原因相同。我没有想到的是,语音模型的随机试验似乎确实改善了结果。然而,这仅取决于每个实验中未成功编译的数据的比例。我的模型失败次数越多,它产生的错误越多,它使用的密钥就越真实,并且模型的精度也越高。至于实现零精度解锁的真实数据?那个数据库中的键是杂乱的字符串,看起来像“h4a7n6ks2l”的发音模型。我很幸运。我对符号检索问题的修复确实改善了结果,新系统也确实得到了改进。几周的实验以竹篮子倒空而告终,我必须向同事解释为什么我的模型几乎上线并伤害了所有客户,以及为什么我越伤害模型,它就变得越精确。必须说他们最后笑了,这是礼貌的。以下是我学到的教训:首先,不要相信任何人或任何东西。每个人都想抓住你,特别是在数据科学领域。大多数问题使预测看起来更糟,但有时结果看起来足够好和真实,足以令人怀疑。事实上,在语言建模领域,这是一个非常普遍的问题。计算和比较混淆阶段的超多重陷阱和最小误差通常可以提高实验次数(而不是减少实验次数!)因此,这个领域的人对证明有很高的需求;因此,我建议您在概括模型之前测试更多的开源评估工具。第二,不要相信自己。在我的整个学术生涯中,我很快意识到,即使我不是天生的,我也需要过分质疑自己得到的任何结果。现在,我将继续为模型的结果寻求外部意见,最好使用完全不同的代码库。第三,在编写简单的防御代码时不要太聪明。您的代码应该像您一样多疑,即使契约的最小细节不一致,您的模型也应该立即显著地崩溃。每个程序员都必须经历过这样的情况:读取堆栈跟踪标记为“不应该发生这种情况”的代码。大量的数据被写入磁盘,甚至位翻转时有发生。我曾经有一个由于XML分析错误而崩溃的生产系统。磁盘上的配置文件(由程序自动生成)如下所示:……像这样的一百万行……省略了100万行。知道有什么不同吗?我等不及下一次日冕物质抛射使我们都成为更好的程序员。第四,不要相信你的代码,更不要说自己的数据处理能力了。有很多方法可以使数据出错。即使只有1%的数据是错误的,A/B测试结果也可能是完全错误的。例如,一些著名的网络数据集中的一些图片不能被一些图像解析器读取。如果使用另一个解析器,或者将这些图片按分母进行计数,则最终的结果与其他解析器不同。长期以来,我多次在评价结果中包括一些测试图像,因此我获得了完全不正确但看起来可信的数字结果。第五,故意破坏你的实验。对标签进行加扰以计算概率水平的准确性。训练1%的数据以确保你过胖。更好的方法是把你的模型交给别人,让他们自己使用。每个实验室都有一个人,他总是可以先挂断你完美的代码。小心!这种对结果的有益的怀疑可能是我在博士和非博士之间发现的最大的质量差异。回想起来,我很幸运,在我职业生涯的早期阶段,以这样一种尴尬和不适当的方式确保我总是认真学习,这让我感到惊讶。不幸的是,数据科学界从来没有发生过“幸福事故”(著名的西方公众人物鲍勃·罗斯(Bob Ross)曾说过,世界上没有“错误”,它们只是“幸福事故”)。

, 1, 0, 9);

文章评论

Top