写点什么

Facebook 发布 TransCoder:可将代码分分钟转换为另一种编程语言

  • 2020-06-09
  • 本文字数:1658 字

    阅读完需:约 5 分钟

Facebook发布TransCoder:可将代码分分钟转换为另一种编程语言

近日,Facebook 的研究人员表示,已经开发出一种神经网络编译器,可以将代码从一种高级编程语言(如 C ++,Java 和 Python)转换为另一种。


将现有的代码库迁移到主流或更高效的语言,如 Java 或 C++,需要源语言和目标语言方面的专业知识,而且通常成本很高。例如,澳大利亚联邦银行在 5 年内花费了约 7.5 亿美元将其平台从 COBOL 转换为 Java。超编译器在理论上可以提供帮助——它们消除了从头开始重写代码的需要——但在实践中却很难建立,因为不同的语言可能有不同的语法,并依赖于不同的平台 API、标准库函数和变量类型。


为简化这一问题,Facebook 推出了TransCoder,该工具采用无监督学习,可以让代码在 C ++,Java 和 Python 之间进行转换。


论文地址:https://arxiv.org/pdf/2006.03511.pdf


TransCoder 首先使用跨语言模型预训练进行初始化,该训练将表示相同指令的代码段映射为相同的表示形式,而与编程语言无关(源代码序列的输入流被随机屏蔽,并且 TransCoder 的任务是根据上下文预测被屏蔽的部分),降噪自动编码的过程会训练系统生成有效序列,即使在输入有噪声的数据的情况下,反向编译使 TransCoder 可以生成可用于训练的并行数据。


TransCoder 的跨语言性质是由跨编程语言存在的通用标记(锚点)的数量引起的,这些标记来自诸如“ for”,“ while”,“ if”和“ try”的通用关键字、数学运算符以及出现在源代码中的英文字符串。反向编译通过将源到目标模型与并行训练的“反向”目标到源模型耦合在一起来提高系统的编译质量。目标到源模型用于将目标序列编译成源语言,产生有噪声的源序列,而源到目标模型则有助于从噪声源重构目标序列,直到两个模型收敛。


Facebook 研究人员在公共 GitHub 语料库上对 TransCoder 进行了培训,该语料库包含超过 280 万个开源存储库,目标是函数级别的编译(在编程中,函数是可重复使用的代码块,用于执行单个相关动作)。在对所有可用的源代码进行预训练后,去噪自动编码和反向翻译组件只在函数上进行训练,在组件之间交替使用大约 6000 个标记批次。


为了评估 TransCoder 的性能,研究人员从 GeeksforGeeks 中提取了 852 个 C ++,Java 和 Python 并行函数,GeeksforGeeks 是一个在线平台,可收集编码问题并以多种编程语言提供解决方案。他们使用这些公式开发了一种新的度量标准:计算精度,测试给定相同输入时,假设函数是否生成与参考相同的输出。


Facebook 方面表示,虽然 TransCoder 表现最佳的版本并没有产生很多与预期完全相同的函数,但它的编译具有很高的计算精度。研究人员将其归因于波束搜索的结合,波束搜索是一种维护一组部分解码的序列的方法,该序列会附加到序列中,然后进行评分,从而使最佳序列冒泡到顶部:


  • 从 C ++转换为 Java 时,74.8%返回了预期的输出。

  • 从 C ++转换为 Python 时,67.2%返回了预期的输出。

  • 从 Java 转换为 C ++时,91.6%返回了预期的输出。

  • 从 Python 转换为 Java 时,56.1%返回了预期的输出。

  • 从 Python 转换为 C ++时,57.8%返回了预期的输出。

  • 从 Java 转换为 Python 时,68.7%返回了预期的输出。


根据研究人员的说法,TransCoder 在实验过程中展示了对每种语言特有的语法、数据结构及其方法的理解,并且在跨编程语言的情况下正确对齐了库,同时适应了较小的修改(例如当输入已重命名)。尽管它并不完美,例如 TransCoder 在生成过程中未能考虑某些变量类型,但它的性能仍然比一些框架要优秀。


该工具的一位共同作者写道:“ TransCoder 可以轻松地推广到任何编程语言,不需要任何专业知识,并且在很大程度上优于商业解决方案。我们的研究结果表明,通过向解码器添加简单的约束以确保生成的函数在语法上是正确的,或者通过使用专用架构,可以轻松解决该模型所犯的许多错误。”


Facebook 不是唯一开发代码生成系统的组织。在今年早些时候的 Microsoft Build 大会上,OpenAI 演示了一个在 GitHub 存储库上训练的模型,该模型使用英语注释生成整个功能。两年前,莱斯大学的研究人员创建了一个名为Bayou的系统,该系统通过将公开代码背后的“意图”相关联,并自主编写软件程序。


2020-06-09 11:212892
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 288.8 次阅读, 收获喜欢 1303 次。

关注

评论

发布
暂无评论
发现更多内容

百度世界2023剧透丨百度王颖:百度文库每周上线2-3个AI新功能,累计使用次数近亿

彭飞

华为云发布CodeArts Governance开源治理服务,开源使用更安心

YG科技

华为云ROMA Connect行业生态联盟成立,携手共建行业软件合作新生态

轶天下事

华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流

轶天下事

Mac电脑专业矢量绘图 Amadine最新激活版

胖墩儿不胖y

Mac软件 矢量图设计工具 矢量图设计 设计矢量图

华为云持续扎根软件工具生态,突破10倍研发效能赋能千行百业

YG科技

新手必看!Bitget Wallet 和 Metamask 到底该选谁?真实对比评测

BlockChain先知

终极对决!Bitget Wallet vs Metamask 钱包大比较!隐藏功能曝光

石头财经

Python 集合(Sets)1

小万哥

Python 程序员 软件 后端 开发

华为云API自然语言处理的魅力—AI情感分析、文本分析

轶天下事

什么档次,这个软件居然敢和墨墨不背扇贝百词斩等一众大佬比肩

花十君

微信小程序 学习 产品设计 创新 大学英语四六级

最高评级!华为云CodeArts Board获信通院软件研发效能度量平台先进级认证

YG科技

华为云API图像搜索ImageSearch的快捷性—AI帮助您快速归类图片

YG科技

除了Office,这8款好用的办公软件也值得推荐!

彭宏豪95

效率 职场 软件推荐 在线白板 办公软件

Web3 新手攻略:9个不可或缺的APP助力你踏入加密领域

鳄鱼视界

华为云ROMA Connect亮相Gartner®全球应用创新及商业解决方案峰会

轶天下事

设计师、教师、奶爸从零开始做提示词,文心一言APP让提示词“人人可用”

彭飞

别再说被八股文害惨了!GitHub阿里Java面试题库标星145K不无道理

程序员万金游

#java #面试 #编程 #程序员 #Mysql

Linux是什么,其特点是啥

芯动大师

Redis Scan原理

宁静知行者

redis 底层原理

AI 帮写爬虫,真的吗? CodeWhisperer:当然!

梦想橡皮擦

华为云API图像识别Image的趣味性—AI识别迈克尔·杰克逊

YG科技

华为云API人脸识别服务FRS的感知力—偷偷藏不住的你

轶天下事

MBBF展示的奇迹绿洲:5G的过去、此刻与未来

脑极体

华为 通信

百度世界2023剧透丨肖阳:「语义检索技术+大语言模型」融合,百度「新搜索」将亮相

彭飞

请查收:赛博威TPM营销费用管理指南——费用管理类型篇

赛博威科技

营销数字化

Web3 新手攻略:9个不可或缺的APP助力你踏入加密领域

股市老人

Facebook发布TransCoder:可将代码分分钟转换为另一种编程语言_架构_Kyle Wiggers_InfoQ精选文章