首页 >> 大全

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

2023-06-24 大全 54 作者:考证青年

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验结果

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

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

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

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

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

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

%。

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

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

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

论文地址

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了