写点什么

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

  • 2019-10-15
  • 本文字数:2621 字

    阅读完需:约 9 分钟

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,添加请备注来意。


2019-10-15 10:077073
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 394.3 次阅读, 收获喜欢 1983 次。

关注

评论 1 条评论

发布
用户头像
OMG
2019-10-21 10:09
回复
没有更多了
发现更多内容

五种重要的 AI 编程语言

3D建模设计

人工智能 AI

6种限流实现,附代码![通俗易懂]

王磊

Java Java面试题

浪潮信息 KeyarchOS 助力 IT 企业安全管理业务完成 CentOS 迁移替换 | 龙蜥案例

OpenAnolis小助手

开源 操作系统 IT 浪潮信息 龙蜥案例

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

阿里巴巴云原生

阿里云 云原生 dubbo

Node.js 的 Buffer 是什么?面向开发者的指南

Liam

JavaScript node.js 程序员 后端 buffer

ARTS 打卡第二周

直须

个人成长 前端 ARTS 打卡计划

高效数据传输与管理利器:镭速传输方案助力企业提升效率与安全

镭速

数据传输 分发数据 管理数据 镭速数据传输

如何在浏览器中启用 WebGL 以使用 HTML5 3D 查看器

3D建模设计

html5 WebGL 3D 查看器

火山引擎边缘云,助你沉浸式回忆童年

火山引擎边缘云

CDN CDN加速 内容分发 CDN技术

隐语纵向联邦 SecureBoost Benchmark白皮书

隐语SecretFlow

大数据 AI 数据安全 隐私计算 开源社区

PyTorch 提高生产力的技巧

3D建模设计

机器学习 PyTorch

Paper推荐|「隐私集合求交PSI系列」奖励升级

隐语SecretFlow

大数据 数据安全 隐私计算 开源社区 论文推荐

推荐前 6 名 JavaScript 和 HTML5 游戏引擎

3D建模设计

游戏引擎

WiFi7 is coming -IPQ9574-QCN9274-speeds up to 30Gbits per second-quaclomm-chipset

wifi6-yiyi

WiFi7 30g

【高危】Kubernetes Windows节点kubernetes-csi-proxy提权漏洞 (CVE-2023-3893)

墨菲安全

网络安全 漏洞情报

动态规划-编辑距离-两字符串集合重排序

alexgaoyh

重排序 动态规划 编辑距离 文本对齐 编辑距离变化过程

mysql基础——认识索引

树上有只程序猿

MySQL 索引

【中危】Spring Kafka 反序列化漏洞 (CVE-2023-34040)

墨菲安全

网络安全 漏洞情报

StarRocks 存算分离技术探索活动回顾

StarRocks

数据库 数据仓库 OLAP 存算分离

Sentieon | 应用教程: TNscope®使用机器学习模型进行有匹配正常样本的体细胞变异发现

INSVAST

基因测序 应用教程 TNscope

ARTS 打卡第二周

直须

个人成长 前端 ARTS 打卡计划

HoudahSpot最新中文版+补丁安装教程

胖墩儿不胖y

Mac软件 文件搜索 搜索工具 搜索软件

文心一言 VS 讯飞星火 VS chatgpt (81)-- 算法导论7.4 6题

福大大架构师每日一题

福大大架构师每日一题

7个用于机器学习和数据科学的基本 Python 库

3D建模设计

Python AI人工智能

一文讲透低代码开发的优势

高端章鱼哥

软件开发 低代码 应用开发 JNPF

1000行Python代码脚本bug,或影响上百篇学术论文_文化 & 方法_小智_InfoQ精选文章