1000 行 Python 代码脚本 bug,或影响上百篇学术论文

阅读数:6119 2019 年 10 月 15 日 10:07

1000行Python代码脚本bug,或影响上百篇学术论文

《Nature》杂志 2014 年的一篇论文包含了一个 Python 脚本,其中有一个模块是根据文件的排序返回值,但 Python 并没有定义查询的文件顺序。这意味着在不同的操作系统上,该脚本返回的值是不同的。这个 bug 直到最近才被发现,而这篇论文被引用了 158 次,如果这些论文使用了相同的脚本那么文章的结果很可能是错误的。

藏在《Nature》论文里的脚本 Bug

《Nature》杂志 1869 年创刊于英国,是世界上最早的国际性科技期刊,涵盖生命科学、自然科学、临床医学、物理化学等领域。对于学者而言,论文能被《Nature》收录是一种荣耀。许多自然科学、物理化学等领域的学者,在论文创作中也会使用各种编程语言或工具进行数据收集、分析等工作。

2014 年,《Nature》上发布了一篇名为《A guide to small-molecule structure assignment through computation of (1H and 13C) NMR chemical shifts》的化学论文,该论文试图找到对癌症有效的化合物。论文中包含了一个使用 Python 语言构建的脚本。

最近,夏威夷大学的一位研究生 Yuheng Luo (中国人)发现该脚本中存在一个 Bug:脚本中有一个模块是根据文件的排序返回值,但 Python 并没有定义查询的文件顺序。他在导师 Rui Sun (中国人)的指导下使用该脚本验证结果,结果发现无法匹配论文作者的结果。在测试期间,他们发现在 Mac、Windows、Linux 等不同的操作系统上返回的结果是不同的。

他将研究报告写成了论文,发布在了《Organic Letters》期刊上。5 年时间过去了,这篇包含错误脚本的《Nature》论文已经被引用了 158 次,这意味着如果这些论文使用了相同的脚本那么文章的结果很可能同样是错误的。对于学术论文来说,这是影响很严重的 Bug 了。

Yuheng Luo 在论文中写道:

原始脚本中这个简单的小错误对大量论文的结论造成了影响,这些论文涉及的话题非常广泛,很难从已发表的信息中得出结论,因为研究人员很少会提及其所使用的操作系统。使用这些脚本的作者当然应该再次检查他们的结果,以及使用 [补充资料] 中修改过的脚本得出的任何相关结论。

目前尚不清楚这种故障可能会影响多少篇论文,研究人员通常不会公开他们用于分析的操作系统,因为它应该无关紧要。根据数据显示,2014 年的这篇论文已被浏览过 1,900 余次,并被其他 158 个研究所引用。但是,并非所有引用该论文的研究都可能使用该脚本。

新西兰惠灵顿维多利亚大学的化学讲师罗伯·凯泽斯(Rob Keyzers)在今年发表的一项研究中引用了该方案,他在一封电子邮件中说,他不知道该 Bug 的存在。他补充说,他并不“过度担心”自己的结果,因为他的团队没有使用包含小故障的脚本。他说:“我当然会仔细检查我们的数据,以确保我们不会提出任何不当的论述。”

学术界的代码问题大讨论

长久以来,学术界和工业界都是互相独立的两个世界。学术界更多钻研于技术的进步与面向未来的研究,而工业界则更多关注技术的落地与商业化。学术界和工业界一直以来都很少合作,此前 AI 大神 Yann LeCun 也曾呼吁学术界、工业界紧密合作以加快 AI 的发展。

但事实上,学术界跟工业界的区别依旧明显。此次事件在 Reddit 上也引起了广泛讨论,不少用户表达了对学术界代码问题的困惑,这也从侧面印证了两个世界之间的缺乏理解与互通。

学术论文中的代码缺乏同行评审吗?

“由于很少提及操作系统,因此无法从发布的信息中轻松解析”。

本文中 Python 脚本出现的 bug 背后,折射出了这样的问题。ID:compsky 的用户十分困惑,同行评审本应是学术论文发表前的一个重要因素,但他所看到的几篇论文很少有关于如何重现他们声称已运行的程序的说明。

ID:Objective_Mine 的用户跟帖评论道:

我读过许多 NLP 相关内容的论文,其中描述了一种算法,但未提供源代码。你还必须至少猜测一些细节,并且想要做到复制精确的实验是不可能的。任何依赖实验而不是形式证明的东西都应该真正具有可用的确切程序,这背后就是源代码和环境细节。

科学家是糟糕的程序员

代码质量通常不是学术界关注的重点。一般意义上,学术论文中的代码唯一消费者就是研究人员,所以诸如稳定性和易用性之类的东西并不比简单地完成工作更重要。此外,研究代码必然是实验性的,并且规范变化比其他类型的代码更加剧烈,所以最终的代码将会有许多变更移植到它上面。

但最重要的因素只是因为学者们不认为自己是专业程序员(确实也不是),编程只是他们工作的一小部分。因此,根本没有能够维持代码审查过程的护理或激情水平。

在这样的情况下,计算机学术界也好,其他学界需要使用计算机代码的学者也好,代码质量通常达不到工业级的标准,也常常因此为工业界的程序员所惊讶。

如何看待科技公司从学术界挖角现象?

从前,学术界的大牛们分布在各个知名的研究院里:微软亚洲研究院、贝尔实验室、雅虎研究院等等不一而足。研究院通常来说不差钱,比如贝尔实验室长期以来总是用不需为经费发愁这一条理由来吸引优秀的科学家到该实验室工作。

但在近两年,科技公司越来越多地开始从学术界挖角,并成立自己的实验室网罗天下英才为己用。比如吴恩达加入百度(已离职)、李飞飞加入谷歌(已离职)、Yann LeCun 加入 Facebook(已离职)、颜水成加入 360(已离职)、贾扬清加入阿里巴巴、贾佳亚加入腾讯等等。

2017 年 10 月云栖大会上,阿里巴巴高调宣布成立达摩院,进行基础科学和颠覆式技术创新研究,并将在未来 3 年投入 1000 亿元进行基础科学研发。而在阿里以外,腾讯也有自己的优图实验室、玄武实验室,360 也有自己的研究部门。

为什么科技公司纷纷从学术界挖来众多大牛,收归己用?理由可能有很多,但最共通的一点就是:利用知名学者的名人效应,打造公司的技术品牌,凭着多年在学术圈积累下来的名望与成绩,为公司招徕人才,组建一支技术强军。

但这背后存在一个悖论:研究院通常需要大量的经费支持,但科技公司却是以盈利为目的,如果研究院光有研究没有产出,其存在的地位会非常尴尬。阿里巴巴成立达摩院时,马云就曾直言:达摩院未来要自己挣钱,还要比阿里巴巴活得更久。

InfoQ 的一位消息人士给出的观点,更是工业界技术人的一个普遍观点:

腾讯某实验室在研究的东西,我们自己团队也在搞,而且我们造出来的轮子性能还比他们的更好。每年花那么多钱养这么多博士、教授,最后做出来的东西还不如工程团队自己的。

在你看来,科技公司和学术大牛之间的关系应该是怎样的呢?科技公司的研究部门地位尴尬吗?

作者介绍

小智,InfoQ 编辑。关注架构、开源、泛互联网科技领域,个人公众号小智的互联网观察,个人微信:ryantz,添加请备注来意。

评论

发布
用户头像
OMG
2019 年 10 月 21 日 10:09
回复
没有更多了