点击上方“Github中文社区”,关注

看遍Github好玩的项目

转自量子位

还记得美国前一阵要招聘 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

OK!到这就是这期分享
如果觉得文章有用,请点在看,分享。历史分享
★ 阿里巴巴的26款超强Java开源项目!★ 什么是红黑树?这篇讲解很全面!★ Git 的一些高级用法,效率必备!★ Github上 10 个超好看可视化面板点个在看呗!

这款实现 C++、Java、Python 代码互译的工具,很强!相关推荐

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

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 还记得美国前一阵要招聘60岁的老程序员吗?都怪编程语言发展太快! 因为新冠疫情的缘故,美国一些地区的失业救济系统不堪重负,而这些系统都是上 ...

  2. 牛逼!用 AI 实现 C++、Java、Python 代码互译!

    公众号关注 "GitHubDaily" 设为 "星标",带你了解技术圈内新鲜事! 转自量子位 还记得美国前一阵要招聘 60 岁的老程序员吗?都怪编程语言发展太快 ...

  3. Bandit:一款Python代码安全漏洞检测工具

    工具介绍 Bandit这款工具可以用来搜索Python代码中常见的安全问题,在检测过程中,Bandit会对每一份Python代码文件进行处理,并构建AST,然后针对每一个AST节点运行相应的检测插件. ...

  4. Facebook 开源 Instagram 的Python 代码静态安全分析工具 Pysa

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 Facebook 正式发布安全工具 Pysa,它专用于查找并修复 Instagram app 庞大Python 代码库中的漏洞. Py ...

  5. python 代码行数统计工具_使用Python设计一个代码统计工具

    问题 设计一个程序,用于统计一个项目中的代码行数,包括文件个数,代码行数,注释行数,空行行数.尽量设计灵活一点可以通过输入不同参数来统计不同语言的项目,例如: # type用于指定文件类型 pytho ...

  6. python代码行数统计工具_Python实现代码行数统计工具的功能(实例)

    本篇文章给大家带来的内容是关于Python实现代码行数统计工具的功能(实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们经常想要统计项目的代码行数,但是如果想统计功能比较完善 ...

  7. 使用GOOGLE API做了个简繁英互译小工具

    网上看了GOOGLE公布的自动翻译API,结合下做了个个小东东. http://www.ivend.cn/trans.htm 现在已经将它集成到我的QQ面板上了,截图: 喜欢的朋友,可以参考如下方法将 ...

  8. python 网页自动处理_推荐一款 10 行 Python 代码实现网页自动化工具

    各种各样的网站在我们日常工作和学习中占据着举足轻重的地位,学习.影音娱乐.查询资料.协同办公,越来越多的任务都被迁移到浏览器 因此,网页也蕴含着很多有价值.我们能够用得到的资源 例如,数据.歌曲.影视 ...

  9. python代码规范 自动优化工具Black

    自动优化工具Black 在众多代码格式化工具中,Black算是比较新的一个,它***的特点是可配置项比较少,个人认为这对于新手来说是件好事,因为我们不必过多考虑如何设置Black,让 Black 自己 ...

最新文章

  1. xauth: (stdin):1: bad display name LSPPC-Lenny:1 in add command
  2. 在亚马逊网站上查看此物品
  3. [转]MongoDb环境部署
  4. 构建通用类型- 继承 VS 聚合
  5. python docker_Docker实践:python应用容器化
  6. 基础算法 —— 排序算法
  7. Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法
  8. swift-自定义无限轮播图
  9. NI视觉视觉软件简介
  10. 在HBuilder上打开PHP文件
  11. 目标跟踪入门:使用OpenCV实现质心跟踪
  12. web 服务器安全维护,Web服务器安全攻击及防护机制详解
  13. C语言实现飞翔的小鸟小游戏
  14. 专家教你如何使用google
  15. Java 获取Word批注所标记的文本和图片
  16. WPS无法加载EndNote加载项
  17. 转战 GithubPages
  18. 装逼必备:大型分布式网站术语分析
  19. 第十三届 蓝桥杯 单片机设计与开发项目 省赛
  20. 51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警

热门文章

  1. C语言学习之【计算机和编程语言】
  2. 网页上爬取数据(Java版)通俗易懂
  3. 清华大学五道口金融学院2020年博士生(普博项目)招生综合考核及录取办法
  4. Web自动化——Selenium原理
  5. 需要控制好情绪,调整好心态
  6. 获得指定时间的下一天的N种方法
  7. 独家 | 数据分析@爱可可-爱生活是否利用机器学习算法运营微博
  8. AIGC - Stable Diffusion 学习踩坑实录总结
  9. java点菜系统(纯Java简易版)
  10. 深度学习与自然语言处理第三次作业——LDA段落主题分布问题