用AI实现C++、Java、Python代码互译,运行成功率最高达80.9%

时间:2022-10-09 17:36:54 | 浏览:3872

还记得美国前一阵要招聘60岁的老程序员吗?都怪编程语言发展太快!因为新冠疫情的缘故,美国一些地区的失业救济系统不堪重负,而这些系统都是上古语言COBOL写的。然而,现在早已经是C/C++、Java、Python的天下了,把COBOL程序换成

还记得美国前一阵要招聘60岁的老程序员吗?都怪编程语言发展太快!

因为新冠疫情的缘故,美国一些地区的失业救济系统不堪重负,而这些系统都是上古语言COBOL写的。

然而,现在早已经是C/C++、Java、Python的天下了,把COBOL程序换成Python,何其难也。

远的不说,Python 2刚刚淘汰,过去的老程序手工转成Python 3也是个很大的工程。

既然AI能翻译自然语言,那也应该能翻译编程语言。

Facebook也是这么想的,所以他们最近提出了TransCoder,一个翻译编程语言的AI,现在可以在C++JavaPython语言之间互译。

经翻译后的程序,成功运行的通过率最高可以达到80.9%。

而且TransCoder是一种无监督学习算法,意味着不需要大量成对的、标记的编程代码数据集进行训练。

如果这项技术达到实用化程度,对广大程序员来说真是巨大福音啊!

难怪论文作者之一Guillaume Lample在Twitter上宣布了这篇论文后很快引起了热议。

翻译编程语言,什么原理?

TransCoder充分利用了编程语言的特点,比如像for、while、if这些关键词以及通用的数学运算符。

下图展示了C++、Java和Python关键字的嵌入。在相似的上下文中使用的不同编程语言的关键字在嵌入空间中非常接近。

例如,Python中的except和Java、C++中的catch都用于获取异常,它们被映射到非常相似的嵌入空间位置。

对于映射的实现(map和dict)、用于将字符串转换为字符数组(c_str和toCharArray)以及类似的变量类型(例如long、int和Integer),也可以观察到相同的现象。

那么以上这些关键词的嵌入是如何获得的?

Facebook提出了实现无监督编程语言机器翻译的三个原则。

首先,通过跨语言掩码语言模型(MLM)预处理来初始化模型,这有些类似于自然语言的填空题。结果是表达相同指令的代码片段被映射到与编程语言无关的相同表示。

其次是去噪自动编码,它能训练解码器始终生成有效序列,即使在输入有噪声的数据时也是如此,提高了编码器对输入噪声的鲁棒性。

最后是反向翻译,它允许模型生成可用于训练的并行数据。每当Python转C++模型变得更好时,它就会为C++转Python模型生成更精确的数据,反之亦然。

通过以上步骤,TransCoder在训练后获得了之前提到的跨语言嵌入。

我们观察到,TransCoder成功地理解了每种语言特有的语法、数据结构、函数库和方法。

在上面的图中,展示了Java和C++独有的三元运算符X ? A : B,翻译到Python中就变成了if X then A else B

以下是一个从Python翻译到C++的实例。TransCoder推断变量和函数返回值的类型,将Python的deque()容器映射到C++中类似的实现deque<>,并使用C++的front、back、pop_back和push_back方法来检索和插入deque中的元素,而不是使用Python方括号、pop和append方法。

实验结果

为了训练TransCoder,Facebook在GitHub上寻找了280万个开源代码库进行训练,其中包含数百亿个token。

然后去GeeksforGeeks平台去验证翻译成果,该平台是收集各类编码问题,并以多种编程语言提供解决方案。

和自然语言不同的是,代码翻译并不太要求逐字逐句的对照,因此翻译后的代码和参考代码的重合度其实很低,比如C++转Java的代码和Ground Truth仅有3.1%匹配。

另外NLP翻译中的BLEU也不宜作为代码翻译的衡量标准,因为这只能表示实际代码和参考代码之间的语法差异。

因此需要一个新的度量标准——计算正确率,它表示翻译后的代码测试后是否能与参考代码有相同的输出。

以此为标准,C++转Java的代码的计算正确率为60.9%,而Java转C++的计算正确率为80.9%。

Facebook不是唯一开发AI代码生成系统的公司。前不久微软Build大会上,OpenAI就演示了一个在GitHub数据上训练的模型,仅根据注释内容即可生成对应功能的代码。

TransCoder没那么智能,但是在计算机技术飞速发展的今天,谁知道下一个流行的语音是什么,有了TransCoder,至少让我们在移植代码的时候没那么难了。

也许美国社保系统的COBOL就靠它解决了。

论文地址:

https://arxiv.org/abs/2006.03511

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

相关资讯

PHP、Java、Python、C、C++这几种编程语言都有什么特点或优点?

一、强类型和弱类型语言:C、 C++、 Java 、Python都是强类型的语言。PHP是弱类型的语言。强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型。而弱类型语言是一种弱类型定义

铁打的Python连续3年第一,PHP跌出前十:IEEE编程语言排行榜出炉

乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAIPython势头不减,依旧第一,而且进一步拉开了与其他语言的差距。这一结果,来自IEEE Spectrum2019年度编程语言排行榜。这已经是Python连续3年保持第一。在Pyth

C、C++、Java、JavaScript、PHP、Python分别用来开发什么?

首先,我们先普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。

最难学的编程语言:Java竟然不是第一名!

编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。开发者经济分析公司 SlashData 曾发布了

网站开发,Java和php两种开发语言,应该选哪一种,你知道吗?

首先我们得知道Java和php都是一种后端开发语言。而后端开发语言是做什么用的呢?后端语言主要应用于网站架构建设、业务流程开发及数据库的开发。所以它的强大可想而知了。但是后端开发语言如果要详细统计不下十种,有Java、php、Python、

11月编程语言榜已出!Python蝉联榜首,PHP将跌出前十

全球知名TIOBE 编程语言社区发布了11 月编程语言排行榜。下面让我们一起来看看,本月榜单中有哪些值得注意的新变化吧!01PHP即将跌出前十自 20 多年前 TIOBE 指数开始发布以来,PHP 一直常驻在榜单前十,然而最近,该语言已经开

PHP、Ruby、Python:三种编程语言谁最强?

【51CTO.com快译】在本文中,我们将逐一介绍目前人气较高的三种编程语言:PHP、Ruby和Python。我们将分析它们是如何工作的,它们彼此有何不同,谁在使用它们,以及每种语言受欢迎的程度。一、 PHP:互联网上最受欢迎的脚本语言PH

JavaScript与PHP到底有何不同?

【51CTO.com快译】JavaScript与PHP,都是目前人气较高的两款编程语言。PHP是基于C语言而打造,因此非常适合有C语言基础的开发者。事实上,两种语言对于新手程序员来说都是比较容易上手的,而且它们都具备出色的灵活性与可扩展性。

为什么大型网站前端用PHP后台逻辑用Java?

来自:知乎链接:https://www.zhihu.com/question/20314377黄良懿,做做架构,写写代码// 技术日新月异,回答放一段时间不更新会变味啊。前两周参加完 ThinkInLamp 的 PHP 架构师大会,听鸟哥一

TIOBE11月编程语言排行:Python超越C语言成第一!PHP将掉前十?

TIOBE 编程社区指数是编程语言流行程度的指标。该指数每月更新一次。评级基于全球熟练工程师、课程和第三方供应商的数量。谷歌、必应、雅虎、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评分。需要注意的是,TIOBE 指数与最

友情链接

SEO域名抢注宝宝起名网妈妈知道币圈婚礼策划网奇瑞汽车资讯网雅马哈品牌网平衡车资讯网娃哈哈晶睛新零售马耳他旅游网美利达自行车百魔洞旅游网梨子水果网光伏发电资讯网面膜资讯网合浦月饼网装修装潢资讯网哥伦比亚咖啡品鉴网生肖马运势网
大数据信息网-大数据信息化时代、大数据分析师、十大物联网云平台、云计算运维工程师、ai数据标注平台、ai智能机器人、人工智能训练平台、计算机运维工程师、人工智能训练师、ai智能绘画软件、免费大数据分析网站。
大数据信息网 liakou.cn ©2022-2028版权所有