找回密码
 注册
搜索
查看: 308|回复: 0

[电脑数码] 可响应、可复现、可协作:计算笔记本正在变得越来越聪明 |《自然》技术特写

[复制链接]
发表于 2021-6-9 06:16 PM | 显示全部楼层 |阅读模式


可响应、可复现、可协作:计算笔记本正在变得越来越聪明 |《自然》技术特写

 Nature Portfolio Nature Portfolio  2021-06-08


原文作者:Jeffrey M. Perkel

新型的笔记本正在将数据可视化和协作功能提升到新高度,而使用如电子表格般简单。

今年是IPython笔记本(IPython Notebook)推出的第十个年头。这个开源工具现在更为人熟知的名字叫Jupyter笔记本(Jupyter Notebook),已经成为一个倍受欢迎的数据科学工具包,数以百万计的笔记本被放到了GitHub代码共享网站上。


计算笔记本(computational notebook)将代码、结果、文本和图像整合在一个文件中,Mathematica软件包的创建者Stephen Wolfram将其输出称作“计算论文(computational essay)无论用Jupyter、Mathematica、RStudio还是其他平台编写,研究人员都可以用它们来反复进行数据探索、交流、教学等工作。


但是计算笔记本也可能会给人带来一些困惑,并助长一些编写代码的不良习惯,而且它们很难共享、协作和复现。2019年的一项研究发现,在GitHub上公开的863878个Jupyter笔记本文件中,只有24%能够成功地重新运行,并且只有4%能够复现出和原来一样的结果[1]


“笔记本是乱哄哄的。”俄勒冈州立大学研究人机交互的计算机科学家Anita Sarma说,“你写了点什么,把老代码置诸脑后,而且它有点难以搞清楚按什么顺序运行哪个代码块,因为你在试的东西不一样。”


33.jpg

插图:The Project Twins

然而,越来越多的平台和工具正致力于打磨这些粗糙之处。有些把笔记本改良成了“响应式”的,这样每当软件里有变量改动时,代码就会重新运行;另一些则侧重于协作和版本控制。它们都为研究人员提供了新颖的方法,使他们得以探索、记录数据,并与同事和世界分享。


对于Sergei Pond来说,笔记本为记录这场大流行的遗传学信息提供了一个渠道。Pond是宾夕法尼亚州天普大学的一名计算生物学家,他已经创建了30多个与SARS-CoV-2(导致 COVID-19的病毒)有关的文档。他说,“我的预期计划是编写一个交互式笔记本并发送给我的合作者,这样他们就可以操作这些数据,即时看到其中的内容。”


他选择的笔记本创建平台叫作Observable。开发Observable平台的公司位于加利福尼亚州旧金山,由两位谷歌前员工于2019年创立,Mike Bostock(D3 JavaScript库的开发者,这个库支持如今网络上的许多交互式数据可视化)和Melody Meckfessel。这家公司基于网络的笔记本系统允许用户创建、共享和重新利用JavaScript编写的复杂精妙的交互式可视化产品(JavaScript是用来开发网络浏览器的编程语言)。据Meckfessel称, “数十万”用户每月使用他们的笔记本系统。


Observable与Jupyter不同的是,Jupyter要将代码先传递给外部的“内核(kernel)来执行,而Observable的代码则直接在浏览器自身里运行。Bostock解释说,这使得Observable平台能够快速运行和即时反应。但是由于JavaScript不是常规的数据科学编程语言,研究人员通常只用Observable来做数据可视化而不是数据处理。


例如,Pond就使用Observable笔记本来分享展示他的彩色图谱、图表、蛋白质结构和序列比对结果,而这里用的数据则是用其他软件处理的。Observable的模块化结构意味着其他程序员可以轻松地将这些可视化程序用到他们自己的数据中。但Pond的笔记本还利用了Observable另一个关键的特征:响应性。


34.gif

像Observable这样的响应式笔记本可以根据内容更改实时更新结果。

假设你用一个Jupyter笔记本来画一条直线。在一个代码单元中,你定义了直线的斜率和y轴截距,然后在下一个单元中画出这个图。这种笔记本结构允许程序员在画出图像后返回到上一个单元并修改斜率,但这个改动并不会自动画出对应的新图像,用户必须手动重新运行那个画图的单元。


这种工作流程可能导致“状态问题”,即笔记本的输出结果不能如实反映其代码。比如说,要是用户在运行一个定义变量的代码单元后,那就可能会发生上述问题。2018年,时任艾伦人工智能研究所(Allen Institute for Artificial Intelligence)软件工程师的Joel Grus在一次题为“我不喜欢笔记本(I don’t like notebooks)的热门演讲中特别指出了这种现象以及随之而来的混乱。但他现在说:“在很大程度上,完全响应式的笔记本消除了那个弊端。”。


响应式笔记本就好比电子表格,Bostock解释道。正如微软的Excel软件可以在单元格数值发生改动时立即重新计算相关公式一样,响应式笔记本也会追踪不同代码单元之间的关联,从而确保笔记本的输出结果始终可以反映其当前的变量值。


当这种特性与可视化小工具(如幻灯片和下拉列表)相结合,就使得笔记本有了交互性,让读者能够探究改变参数变量或假设条件会如何影响输出结果。例如,马萨诸塞大学阿默斯特分校的生物统计学博士生Herb Susmann就使用响应式笔记本文件来解释统计学概念。他说,“这确实帮到我更直观地去理解统计学那些东西是怎么回事。”(话虽如此,人们并非在所有情况下都想要响应式功能,尤其是当代码单元需要运行很久,或者数据集非常庞大时。)

响应与协作

还有其他的一些响应式笔记本系统,是为不使用JavaScript语言的研究人员而开设的。例如,Susmann为使用R语言的程序员建立了一个响应式笔记本,名叫Reactor。柏林的软件工程师Fons van der Plas创建了Pluto,一个为Julia语言设计的响应式笔记本平台。Henri Drake是麻省理工学院的一个气候物理学研究生,他用Pluto笔记本演示气候科学里的一些概念。Drake说:“把这些概念编码成一个交互式的Pluto笔记本,会让初次用户更有参与感,而且确实有助于人们理解我在构建的模型。”


加州大学伯克利分校的Fernando Pérez是Project Jupyter的开发者之一,他指出,Jupyter本身“在响应性上是兼容的”。虽然到目前为止大多数(Jupyter)内核都是非响应式的,但也不是非这样不可。例如,Richa Gadgil曾在加州理工州立大学做Jupyter实习生,她在实习期间与别人共同开发了给Python的实验性响应式内核。指导她进行工作的Brian Granger说,“这是对Jupyter架构的一次考验,而Jupyter架构通过了这个考验。”


另一个开源系统名为Vizier,专注于数据驱动的响应性,该项目负责人之一,纽约大学的计算机科学家Juliana Freire如是说。通过内置的数据验证功能和电子表格界面,Vizier用户可以对他们的数据进行提取和清理,从而消除不一致性,比如说有时候同一列里的响应返回值既有“Y/N”也有“yes/no”这种不统一表达。当他们这样做时,笔记本会重新运行代码。“你可以分析-清洗-再分析-再清洗。”Freire说, “并且随着你的工作,整个过程中的所有运行记录都会被保存下来以供追溯。”这样,用户就可以恢复到清洗前的某个步骤,然后重新来过,而且每次改动都有日志记录。(Vizier笔记本可以处理Python、SQL和Scala代码。)


有一些商业化的响应式笔记本系统,包括Observable、Deepnote和JetBrains的Datalore(最后两个的公司位于捷克共和国),还关注了笔记本的另一个痛点:协作性。例如,Observable可以让多个用户实时协作编辑,就像Google Docs一样,还可以写批注。Observable有两个计划版本:一个是个人版(在同一个交互式文档中最多5个成员可免费参与,另一个是团队版(可供6个或以上成员参与,每个编辑者每月15美元,仅阅览成员可免费使用)


Gábor Csányi是英国剑桥大学的一位分子建模领域的研究人员,他在教学中使用Deepnote笔记本(这款笔记本最多可供3名合作者免费使用,再多的话则是每人每月12美元)。他的大学以前的系统里,一名求助的学生可以给Csányi发一份笔记本副本,但两个人不能同时阅读和编辑同一个文档。Csányi说,“这让人很不爽。”但有了Deepnote之后,他就可以帮学生实时调试代码。他说:“就像使用Google Docs一样,我们可以互相看到对方的光标。我们是在编辑同一个笔记本,当他们在一个代码单元上按下shift-enter键时,我就能看到输出结果。这么高效的个性化支持可真是很棒的体验。”


Pérez指出,实时协作在Jupyter项目中也是“大量活动的主题”,在GitHub上有一个正在开发中的原型。他说:“我很有信心Jupyter差不多很快会实现。”。

版本控制

许多商业化的笔记本开发平台还解决了另一个笔记本难题:版本控制。


Jupyter笔记本的文件格式包括代码、元数据和计算输出。由于这些输出通常是二进制图像,因此版本控制可能会变得困难(版本控制是开发人员用来追踪文件更改的一个工作流程,最好是针对纯文本文件来进行)。使事情更加复杂的是,笔记本的数据探索是快速运行而又不断更迭的,程序员可能很难让那些标准化的版本控制工作流程去适应这种特性。结果就是,一些关键的实验细节可能会丢失。


商业化平台往往提供内置的笔记本版本管理。对于那些Jupyter的忠实用户来说,有两个插件可以用:一个是nbdime,它提供了一个智能化、结构化的文件更改视图,包括图形输出视图;另一个是Verdant,它提供了一个图形界面,可以用来追踪代码单元是如何被修改、重置和运行的。


卡内基梅隆大学研究人机交互的开发者Mary Beth Kery说,Verdant可以让各个协作者和同行评议者之间的互动更加顺畅。“可能有人会问,哎你在模型中试过这个没有,或者试过那个分析方法没有。”虽然很多时候确实是试过的,但由于并不奏效,所以代码就已经删掉了。“你在会议上可能想做的就是做一个复盘,然后说,哦我试过了你们说的这个,看,这样这样,不行。我们的工具可以让你真的这么做。”


这样的特性可以使笔记本这样一种已经堪称简捷易用的计算模式变得更加友好,并且更加容易与他人共享。这会使笔记本成为更强大的科学交流工具。“如果你真的做出了杰出的科学工作,但没有人能理解它,或者没有人看得到,那又有什么意义呢?”Drake说,“这类笔记本实在很吸引人,能让人们接受一般难以理解的概念。”

参考文献:

1. J. F. Pimentel et al. in 2019 IEEE/ACM 16th International Conference on Mining Software Repositories (MSR) 507–517; IEEE, 2019.


原文以Reactive, reproducible, collaborative: computational notebooks evolve标题发表在2021年5月3日的《自然》的技术特写版块上

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|www.hutong9.net

GMT-5, 2024-5-19 09:29 AM , Processed in 0.094374 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表