程序员又要失业?MIT 等推出新的机器编程系统

2020-08-11 08:55:52

7月29日,英特尔官网消息,英特尔和麻省理工学院(MIT)、乔治亚理工学院(Georgia Tech)共同推出了一种新的机器编程(MP)系统——机器推断代码相似性系统(MISIM)。

通过识别相似代码段,分析代码目的、作用的相似性,MISIM 可以完成一些编程任务,提供编程方法建议或选项,即用 AI 代替程序员做部分工作,如自动化错误检测等。

“英特尔机器编程的最终目的是使软件创建民主化”, 英特尔首席科学家兼机器编程研究总监/创始人 Justin Gottschlich 说。英特尔目前计划在内部使用 MISIM,以协助开发人员完成调试等日常工作。

IT 领域中,AI 的许多应用场景都是机器编程。最近引起热议的 1750 亿参数的 AI 模型 GPT-3,也是可以直接写代码。

如有人用 GPT-3 将日常语言转换成 Python 代码来创建资产负债表;还有开发者调用 GPT-3 API 做了一个网页 App 快速生成器,在输入框里用自然语言进行描述,它就可以快速输出相应的用户界面,比如输入“生成一个像西瓜一样的按钮”:

也有人早就开源了同样是机器编程的 AI 项目。如2018年,使用 keras 深度学习框架的项目 Sketchcode 开源,Sketchcode 可以直接将手绘的手稿图生成 HTML 代码。

AI 在 IT领域的应用还有 AI 自动测试,无码/低代码探讨等话题,本篇先从 MISIM 说起,看看机器编码的一些项目。

MISIM:AI 评估代码

围绕 MISIM 的技术论文已经公开。该论文首先阐述了机器编程和代码相似系统的关系:机器编程领域涉及软件开发的自动化,近年来出现许多 MP 系统,部分原因是机器学习、形式方法、数据可用性和计算效率的进步。而在 MP 系统中,一大挑战就是精确构建代码相似性系统。代码相似性系统往往包含许多复杂的组件,其中即使是最基本的组件的选择,如代码的结构表示都仍不明确。代码相似性的研究还处在早期阶段,但相关探索已越来越多,MISIM 也是其中之一。

MISIM 中的组件可以单独或一起使用,核心部件有两个。

一是一种新的上下文感知语义结构 CASS,用来从代码语法中提升语义意义。目的是捕捉输入代码的语义的显著特性。CASS 的上下文感知功能,可以用来捕获描述代码的上下文信息,例如,“这段代码是函数调用”、“这段是操作”等等。

其二,MISIM 提供了一种基于神经的学习代码相似性评分算法,可以用各种具有学习参数的神经网络体系结构来实现。该算法分两个阶段,第一阶段涉及一个神经网络模型,可将一个特征化的 CASS 映射到一个实值代码向量。第二个阶段使用相似性度量在一对代码向量之间生成相似性评分。

针对该系统的性能,其研究团队筛选出三个代码相似性系统做比较:code2vec、神经代码理解 NCC、代码推荐系统 Aroma。比较实验使用 POJ-104 数据集,由学生编写的 C/C++程序组成。评估的精度指标是 R(MAP@R)、平均精度(AP)和精度-Recall-Gain 曲线(AUPRG)下的面积(Aup@R),它们衡量模型在给定查询的数据库中检索类似(或相关)项的准确性。最终的实验交过表明,MISIM 比其他三个最先进的代码相似系统的性能高出40.6倍。

不过,论文还提到了可以预见的负面影响:

一级负面影响,给定的研究想法可以直接用于伤害性行为,如 DeepFake、DeepNude 等等。

二级负面影响,指研究想法可能会使它的使用方式产生直接的负面或积极影响,例如将面部识别用于压迫少数群体、产生恶意假新闻等等。

三级负面影响,研究思想被用来构建第二个应用程序,并根据新程序的使用产生的负面影响。

  • 如果代码使用相似性工具发展足够成熟,可以自动生成正确的可编译代码,那么它可能被用来自动将代码从一种语言替换为另一种语言,或者用快速代码替代慢代码。

  • 恶意使用者可以利用代码相似性工具爬取网络,在网络上窃取代码,并从可用代码中,找到常见的模式和安全缺陷,然后找到大规模黑客攻击的方法。从同一代码生成器生成的代码可能更容易受到此类攻击。

  • 如果系统允许基于代码相似性的自动代码修补/修复,而不进行适当的测试,那么如果被黑客攻击,它可能会产生安全缺陷。

  • 如果程序员习惯从编程工具获得帮助,可能会降低程序员的学习能力,除非该工具提供可解释性,解释性将需要了解工具正在学习的代码相似性,并教育程序员。

“总之,代码相似性是一个抽象的概念,很可能有许多积极的应用。为了减轻负面影响,我们需要确保制定适当的政策和安全措施,防止负面使用。特别是,这种安全系统可能需要人工介入,以便被用来提高程序员的能力和生产力。”论文最后指出。

微软、Facebook、OpenAI 的 MP 系统

机器编程被各大科技公司看做是“解放程序员”的一种方式。

“MP 将使每个人都能以最适合自己的方式表达意图,无论是代码,自然语言还是其他方式,来创建软件。” Justin Gottschlich 给 MISIM 提出的这个目标,实际上也是许多 AI 项目在 IT 领域的共同目标。

被 MISIM 拿来作比较的机器学习代码推荐系统 Aroma,是 Facebook 2019年推出的一个项目,可以自动完成小程序,帮助程序员找到可以“参考使用”的代码等等。

如安卓程序员想要了解如何解码手机中的 bitmap,可以使用代码直接搜索:

Bitmap bitmap = BitmapFactory.decodeStream(input);

Aroma 会给出一些代码推荐:

final BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
// ...
Bitmap bmp = BitmapFactory.decodeStream(is, null, options);

Aroma 如何工作

前不久 DeepMind 也发布了 AI 算法开发框架——Acme,提供比人类设计更有效的简单算法版本。Acme 是一个分布式强化学习框架,通过促使 AI 驱动的智能体在不同规模的环境中运行。该框架可以简化、强化学习算法开发进程。

此外微软也正在其软件开发工具中,加入基本的代码生成功能。OpenAI 的 GPT-3 语言模型也已经被多位开发者调用,从自然语言中生成简单代码段。

这些机器编程项目或是功能,什么时候能发挥出多大的作用,目前似乎还没有一个准确的答案。除了 GPT-3 刚上线就直接开放给开发者调用,像 MISIM 还主要是在英特尔内部使用。不过 GPT-3 偏向强调是一个可以更广泛使用的 AI 模型,可以处理所有的语言任务,还能写诗。MISIM 则是专注于代码任务的一个系统。

一些开源的 MP 工具

现在已经有了一些开源的 MP 工具,这里介绍两个,感兴趣的开发者可以去试试。

SketchCode:手稿生成 HTML 代码工具

一种深度学习模型,采用手绘的 Web 原型并将其转换为有效的 HTML 代码,使用图像字幕体系结构从手绘网站线框生成 HTML 标记。

项目地址:点击查看

下载地址:点击查看

Bayou:Java 代码自动化编写工具

2018年,Rice University 的研究员开发了一个名为 Bayou 的系统,从 GitHub 上采集数据,通过深度学习算法和训练,将 Java 代码编写部分自动化。

Bayou 根据程序员提供的由 API 方法名称和变量类型组成的查询,通过生成 API 模式或习惯用法来完善 Java 程序的框架。

项目地址:点击查看

下载地址:点击查看