用AI实现C++、Java、Python代码互译,运行成功率最高达80.9%
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
还记得美国前一阵要招聘60岁的老程序员吗?都怪编程语言发展太快!
因为新冠疫情的缘故,美国一些地区的失业救济系统不堪重负,而这些系统都是上古语言COBOL写的。
然而,现在早已经是C/C++、Java、Python的天下了,把COBOL程序换成Python,何其难也。
远的不说,Python 2刚刚淘汰,过去的老程序手工转成Python 3也是个很大的工程。
既然AI能翻译自然语言,那也应该能翻译编程语言。
Facebook也是这么想的,所以他们最近提出了TransCoder,一个翻译编程语言的AI,现在可以在C++、Java、Python语言之间互译。
经翻译后的程序,成功运行的通过率最高可以达到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://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-09
本文作者:晓查
本文来自:“量子位公众号”,了解相关信息可以关注“公众号QbitAI”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
物联网如何彻底改变我们的销售方式?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 物联网每天都会通过创新改变游戏规则。销售和市场营销是其中的一部分,它以前所未有的方式集成了技术。 如您所知,物联网的定义很复杂。它作为一个网络,通过互联网连接所有的技术。然后,所涉及的设备可以发送和接收数据。 信息的传递有可能成为业务的重要组成部分,这意味着将其集成到日常产品中的可能性无限大。 物联网改变了销售和市场营销的一些方式。 产品集成 你可能已经注意到QR码出现得更频繁了,因为它们有助于公司提高消费者的参与度和体验。 比如,在一场现场足球比赛中,Chili餐厅在他们的桌子上提供了二维码。当客户扫描代码时,他们就可以在手机上玩增强现实(AR)足球游戏了。这样的发展可能会改变餐厅在活动期间做广告的方式,AR行业如何提升他们的能力,或者活动本身如何销售商品。随着这些功能对客户的吸引力越来越大,企业将开始更多地宣传这些功能。 自动化 自动化已经成为世界各地工作场所的标准,可以处理不需要动脑的、低优先级的任务和责任。虽然已经是物联网的一部分,但它还可以走得更远。随着物联网继续影响企业,更多...
- 下一篇
新零售小程序商城开发必须具备这几个功能
电商行业风起云涌,每一种新的商业模式都与创新型的功能息息相关。 以互联网经典的3亿用户论来评价,淘宝发展用了10年,京东发展用了5年,而拼多多却只用了2年3个月,从此开启了一个新的商业模式,社交电商。 这就是功能迭代引发的商业巨变,每一次的技术革新都将产生一批新的商业巨头。当下,抖音直播带货又开启了新一轮的商业巨变,微信小程序也从功能以及接口上跟进及开放,各大平台也都开放了自己的小程序接口,以微信小程序为首率先开放了小程序直播接口,这为小程序商城直播带货注入了新的生机,依托微信生态,社交电商似乎更有前途,也更有发展空间。 那么,在开发小程序商城的时候,功能模块上就要紧随时代发展的步伐,社交电商该有的功能小程序商城都得要有,那么我们就得搞清楚什么是社交电商。讲人话,社交电商就是通过社交分享来进行电商交易。最有名的当属之前的微商,只不过近两年微商因为宣传方式,运营模式,影响客户体验和正常生活,逐渐淡化,之后便以社交电商之名重回大众视线,虽然社交电商有旧瓶装新酒之嫌,但在微商前辈的基础上,时代浪潮的加持下,仍然与之前的微商有很大的变化。 那么,小程序商城要具备社交电商的社交属性,就必须拥有关...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16