脸书的研究人员宣布,他们开发了一种神经变译器(neural
transcompiler)系统,可以将一种高级编程语言的代码转换成另一种,比如将 C++,Java 或 Python
转换成另一种。这个转换过程无需人为监督,可自动搜寻前一种语言中未标注的数据集模式,其效果大幅地好于基于规则的转换。
从当前的代码库转换成另一种先进的高效的语言,比如从 Java 或 C++ 转换成另一种语言,通常代价高昂,因为需要专家同时精通源语言和目标语言。之前,澳洲联邦银行就花费了7.5亿美元耗时五年将他们的平台从 COBOL 升级为 Java。 脸书的 TransCoder 系统可以在 C++,Java 和 Python 之间互翻,智能学习,无人监管。TransCoder 初始化时,进行跨语言的模型关联性分析,在不同语言中找到具有映射关系的代码片段,即相通的指令实现相同的表现。源语言的代码被随机的“遮住”,TransCoder 的任务就是基于上下文推断出被“遮住”的部分。去燥自动编码的过程训练系统生成有效的序列,即使输入的是噪点数据。同时,回译(back-translation)使得 TransCoder 可以生成平行数据用于训练。 脸书的研究人员用 GitHub 的语料库,即280多万个代码库训练 TransCoder,实现“函数”级别的转换。“TransCoder 不需要任何专业知识,就可以很容易地运用到任何编程语言中,大幅提升在商用解决方案中的表现。我们的研究结果表明,模型产生的大量错误可以通过对解码器添加简单的约束很容易地修正,以确保生成的‘函数’在语法层面上是正确的,或者通过独立的架构来解决。” 脸书并非仅有的机构致力于开发 AI 生代码的系统。在今年早些时候的 Microsoft’s Build 大会上,OpenAI 演示了一个使用 GitHub 代码库来训练的模型,通过代码中的“英文注释”生成完整的“函数”。两年前,莱斯大学的研究人员创建了 Bayou 系统,可以通过关联代码背后的“意图(intents)”写出软件程序。 “事实上,这些系统尝试去做的,就是去除做软件时的各种琐碎” Intel 实验室的首席科学家 Justin Gottschlich 说,“它们可以帮助提高生产效率,由它们去关注程序中的 bug。可以提高就业,因为没有编程背景的人也能够用机器通过‘意向性界面’来捕捉和实现他们的创意了。” |