数据科学家“恐怖故事”
我还算是幸运的。我对符号检索问题进行的修复确实提高了效果,新系统确实得到了改进。数周的实验最后都是竹篮打水一场空,我还得跟同事解释我这个模型差点就上线运行害了所有客户,以及为啥我越伤害这个模型线下精确度就越高。必须得说一句,他们最后只是大笑了一场这事儿就过去了,还是很客气的。 下面是我学到的经验教训: 第一,不要相信任何人、任何事情。 谁都想抓住你的把柄,尤其是数据科学界。大多数问题会将预测结果变得看起来糟糕很多,但有时结果看起来还是足够好且真实让人无法起疑心。实际上在语言建模领域,这是一个超级常见的问题。计算以及比较困惑度阶段超多陷阱,极小的错误都时常能够提高实验数字(而非降低!)。因此,这个领域的人对于证明的要求都很高;基于这个原因,我建议在将模型推广之前你最好多在开源评估工具上试验试验。 第二,更不要相信你自己。 在我整个学术生涯中,我很快就学到了我需要过分质疑任何我得到的结果,尽管我本性并非如此。我现在会为了模型结果持续寻求外部意见,最好是使用一个完全不同的代码库。 第三,写简单的防卫代码 不要自作聪明。你的代码应该跟你本人一样偏执,就算是合同里最小的细节有一点不符,你的模型都该立刻引人注目地垮掉。每个程序员都肯定经历过这样的事:阅读堆栈跟踪到一段标注为“这就永远不该发生”的代码。大量数据被写入磁盘,甚至位翻转这种事情都时有发生。我以前有过一个生产系统,因为XML分析错误就直接崩溃了。磁盘上配置文件(程序自动生成的)看起来就像这样:
看到哪里不同了嘛?我都等不及下一次日冕物质抛射活动来让我们都变成更厉害的程序员啦(译者注:这个作者只是在这里发泄怨气…)。 第四,不要相信你的代码,更不要相信你自己的数据处理能力。 想让你的数据出错,方法超多的。即使你只有1%的数据出错,你的A/B测试结果可能也完全不对。比如,有些著名网络数据集里的某些图片就是无法被某些图像解析器读取。如果你使用另一个解析器,或者你将这些图片计入分母,最后的结果都会与别人不同。很长一段时间内,我都在评估结果内重复计入了某些测试图像,因此得到了压根不正确却看似很可信的数字结果。 第五,尽量故意扰乱你的实验。 把标签打乱,计算概率层面精确度。在1%的数据上进行训练,确保你过度拟合。更好的方法是:把你的模型交给别人,让他们自己上手使用。每个实验室都有这么一个永远能第一时间挂掉你完美代码的人。盯住他们就对啦! 这种对结果的有益的怀疑论可能是我在博士与非博士之间发现的品质上的最大区别。我们博士都经受过这样的打击。回想起来,我很幸运能够以这么一种尴尬又没有很不合适的方式在职业生涯早期收到惊讶,以确保我永远都小心翼翼地进行研究。必须说不幸的是,数据科学界从来没有“幸福小事故”这种事情(西方公众名人Bob Ross名言:世上没有“错误”一说,它们只是“幸福小事故”)。 相关报道:https://medium.com/s/story/no-happy-little-accidents-8663540763f8 【本文是51CTO专栏机构大数据文摘的原创译文,微信公众号“大数据文摘( id: BigDataDigest)”】
戳这里,看该作者更多好文 【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |