脸书的 TransCoder 通过 AI 实现编程语言之间的转换,你是否感到饭碗将要不保?

2020年06月10日

脸书的研究人员宣布,他们开发了一种神经变译器(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。可以提高就业,因为没有编程背景的人也能够用机器通过‘意向性界面’来捕捉和实现他们的创意了。”

本文编译自:https://venturebeat.com/2020/06/08/facebooks-transcoder-ai-converts-code-from-one-programming-language-into-another

展开阅读全文
13 收藏
分享
加载中
精彩评论
这项目本身是什么语言写的?
2020-06-11 00:49
3
举报
我感觉不靠谱,现在的自然语言翻译都没做好,你上百度翻译或其他任意翻译网站,输入中文转英文然后转日语,然后得到的日语再转换回中文,你看看变成了什么。意思和你之前输入的原义根本对不上,这也是机翻让人头疼的原因所在,我很想知道这玩意生成的代码人类还能改的了吗?比如js转java再转成python再转回js,哈哈 一定很酸爽。
2020-06-10 23:35
3
举报
果然这种对于需要大量数据的炼丹项目最适合nlp去做
2020-06-10 18:52
3
举报
当前的公司业务代码并不简单,而且还有很多是烂摊子代码,人都没办法优化 只能重构的代码,用机器翻译只会更糟,这样的代码是不可读的,也没有办法维护,再包括有些人喜欢写一些炫技代码,而不同的语言特性也有所不同,综上所述,想靠这个偷懒一键移植语言的想法不是很靠谱
2020-06-11 21:35
2
举报
划重点,保证了语法层面的可靠性。不同语言之间的差别不是简单的语法差别,我感觉这东西把python翻译成C++之后跑的不一定比python快
2020-06-10 22:25
2
举报
最新评论 (19)
我不信有人能把我写的Python代码中的eval函数翻译成Java代码
2020-06-14 10:30
0
回复
举报
以前期待的东西,终于有人实现了吗!
2020-06-11 12:54
0
回复
举报
厉害了
2020-06-11 10:34
0
回复
举报
刊误:
1、“去燥”应为“去噪”;
2、“生代码”应为“生成代码”;
3、“这片”应为“这篇”。
2020-06-11 09:51
0
回复
举报
感谢大家关注与留言,更多细节原理和代码比对,请参阅这片论文
Unsupervised Translation of Programming Languages
https://arxiv.org/pdf/2006.03511.pdf
2020-06-11 09:46
0
回复
举报
划重点,保证了语法层面的可靠性。意思就是,你开发个java项目,引用了一大堆jar包,它就歇菜了,其它语言没有jar对应的包实现,这个ai能怎么办呢,ai也很绝望吧。
2020-06-11 09:23
0
回复
举报
这开发者是要打翻同行手里本来就不稳的碗啊,自相残杀,本是同根生,豆在釜中泣啊
2020-06-11 08:51
0
回复
举报
这项目本身是什么语言写的?
2020-06-11 00:49
3
回复
举报
已向 Facebook‘s TransCoder 提问,等待回复中
https://medium.com/p/23ea77f3234b/responses/show
2020-06-11 10:01
0
回复
举报
我感觉不靠谱,现在的自然语言翻译都没做好,你上百度翻译或其他任意翻译网站,输入中文转英文然后转日语,然后得到的日语再转换回中文,你看看变成了什么。意思和你之前输入的原义根本对不上,这也是机翻让人头疼的原因所在,我很想知道这玩意生成的代码人类还能改的了吗?比如js转java再转成python再转回js,哈哈 一定很酸爽。
2020-06-10 23:35
3
回复
举报
编程语言的规则比较简单、清晰,而自然语言更复杂。
2020-06-11 10:52
1
回复
举报
当前的公司业务代码并不简单,而且还有很多是烂摊子代码,人都没办法优化 只能重构的代码,用机器翻译只会更糟,这样的代码是不可读的,也没有办法维护,再包括有些人喜欢写一些炫技代码,而不同的语言特性也有所不同,综上所述,想靠这个偷懒一键移植语言的想法不是很靠谱
2020-06-11 21:35
2
回复
举报
低级翻译为高级看你怎么翻译。。
2020-06-10 23:08
0
回复
举报
更多评论
19 评论
13 收藏
分享
返回顶部
顶部