Facebook的代码转换器AI可以在编程语言之间转换

2020-06-10 06:46:46

Facebook的研究人员表示,他们已经开发出所谓的神经转译器,这是一种将代码从一种高级编程语言(如C++、Java和Python)转换成另一种高级编程语言的系统。它是无人监督的,这意味着它在没有标签的数据集中寻找以前没有检测到的模式,并且只需最少的人工监督,据报道,它的表现比基于规则的基线“显著”高出一大截。

将现有代码库迁移到现代或更高效的语言(如Java或C++)需要源语言和目标语言的专业知识,而且成本通常很高。例如,澳大利亚联邦银行在五年的时间里花费了大约7.5亿美元将其平台从COBOL转换到Java。转译器在理论上可能有帮助-它们消除了从头开始重写代码的需要-但在实践中很难构建,因为不同的语言可能具有不同的语法,并依赖于独特的平台API、标准库函数和变量类型。

Facebook的系统-代码转换器,可以在C++、Java和Python之间转换-通过一种无监督的学习方法解决了这一挑战。代码转换器首先使用跨语言语言模型预训练进行初始化,它将表示相同指令的代码片断映射到相同的表示形式,而与编程语言无关。(源代码序列的输入流是随机屏蔽的,代码转换器的任务是根据上下文预测屏蔽的部分。)。一种称为去噪自动编码的过程训练系统生成有效序列,即使在输入有噪声的输入数据时也是如此,而反向转换允许代码转换器生成可用于训练的并行数据。

代码转换器的跨语言特性源于跨编程语言存在的公共标记(锚点)的数量,这些标记来自诸如“for”、“While”、“if”和“try”等常见关键字,以及源代码中出现的数字、数学运算符和英语字符串。反向翻译通过将源到目标模型与并行训练的“后向”目标到源模型相耦合来提高系统的翻译质量。目标到源模型用于将目标序列翻译成源语言,产生有噪源序列,而源到目标模型帮助从噪声源重构目标序列,直到两个模型收敛。

VB Transform 2020 Online-7月15-17日。加入领先的人工智能高管:注册免费直播。

Facebook的研究人员在一个公共的GitHub语料库上对代码转换器进行了培训,语料库包含超过280万个开源存储库,目标是在功能层面进行翻译。(在编程中,函数是用于执行单个相关操作的可重用代码块。)。在对所有可用的源代码进行代码转换器预培训之后,去噪自动编码和反向翻译组件仅在功能上进行培训,在具有大约6,000个令牌的批次组件之间交替。

为了评估代码转换器的性能,研究人员从GeeksforGeek提取了852个用C++、Java和Python编写的并行函数,GeeksforGeek是一个收集编码问题并用几种编程语言提供解决方案的在线平台。利用这些,他们开发了一种新的衡量标准-计算精度-测试假设函数在给定相同输入时是否会产生与参考相同的输出。

Facebook指出,虽然性能最好的代码转换器版本并没有生成许多与参考资料严格相同的函数,但其翻译的计算精度很高。他们将此归因于波束搜索的结合,这是一种维护一组部分解码的序列的方法,这些序列被附加到形成的序列中,然后进行评分,这样最好的序列就会冒泡到顶部:

当从C++转换到Java时,74.8%的代码转换器代返回了预期的输出。

当从C++转换到Python时,67.2%的代码转换器代返回了预期的输出。

当从Java转换到C++时,91.6%的代码转换器代返回了预期的输出。

当从Python转换到Java时,56.1%的代码转换器代返回了预期的输出。

当从Python转换到C++时,57.8%的代码转换器代返回了预期的输出。

当从Java转换到Python时,68.7%的代码转换器代返回了预期的输出。

根据研究人员的说法,代码转换器在实验中展示了对每种语言特定的语法以及语言的数据结构和方法的理解,并且它在适应小的修改(如当输入中的变量被重命名时)的同时,在编程语言之间正确地对齐库。虽然它并不完美-例如,代码转换器在生成过程中未能考虑到某些变量类型-但它的表现优于使用专家知识手动重写规则的框架。

“代码转换器可以很容易地推广到任何编程语言,不需要任何专业知识,而且性能远远超过商业解决方案,”合著者写道。“我们的结果表明,通过向解码器添加简单的约束以确保生成的函数在语法上是正确的,或者通过使用专用架构,可以很容易地修复模型中的许多错误。”

Facebook并不是唯一一个开发代码生成人工智能系统的组织。在今年早些时候的微软构建大会上,OpenAI演示了一个基于GitHub存储库的模型,该模型使用英语注释来生成整个函数。两年前,莱斯大学的研究人员创建了一个名为Bayou的系统,它能够通过将“意图”关联到公开可用的代码后面来编写自己的软件程序。

英特尔实验室首席科学家兼主任贾斯汀·戈特施利希(Justin Gottschlich)在最近的一次采访中告诉VentureBeat:“(像这样的程序)真的只是试图消除创建软件的细枝末节。”“(他们)可以帮助加快…的生产效率。(通过处理)窃听。(他们可以)增加(科技行业)的工作岗位数量,因为没有编程背景的人将能够利用他们的创造性直觉,通过这些意向性界面通过机器捕捉到这一点。