写点什么

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:212756
用户头像
陈思 InfoQ编辑

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

关注

评论

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

在线条码生成器

入门小站

工具

用JAVA捋一下设计模式1-简单工厂模式

下雨了

设计模式 简单工厂模式 4月月更

用JAVA捋一下设计模式3-抽象工厂模式

下雨了

设计模式 抽象工厂模式 4月月更

Spinner: Pinterest的工作流平台

俞凡

架构 工作流引擎 大厂实践 Pinterest

白话大数据 | 关于图数据库,没有比这篇更通俗易懂的啦

星环科技

探索SeekTiger生态,Tiger DAO VC有哪些新期待

小哈区块

XX物流同城快递架构设计文档

Steven

李智慧 高并发架构实战课

开源IM项目OpenIM发布消息推送api,支持应用与IM互通深度融合

Geek_1ef48b

maven工具的使用

Rubble

4月日更

【限时免费】阿里云 ACR EE 增强型扫描引擎限时体验中,多维度保障容器镜像安全

阿里巴巴云原生

探索SeekTiger生态,Tiger DAO VC有哪些新期待

西柚子

用JAVA捋一下设计模式 4-单例模式

下雨了

设计模式 单例模式 4月月更

Sophon 3.0全面升级,你准备好拥抱进阶版本的ML建模平台了吗?

星环科技

阿里云与达摩院合作 AHPA 弹性预测论文被顶会 ICDE 录用

阿里巴巴云原生

如何在VC领域脱颖而出,Tiger DAO VC给出答案

BlockChain先知

【PIMF】《伟大的计算原理》提炼“六脉神剑”认识OpenHarmony技术路线

离北况归

《伟大的计算原理》 技术路线 IMF

业务流程驱动的数字化转型,中小微企业开启转型的最简单方法论

王吉伟频道

RPA 数字化转型 机器人流程自动化 业务流程自动化

“卷王”英伟达的真面目

脑极体

在线XML美化格式化工具

入门小站

工具

开源IM项目OpenIM每周迭代版本发布-群管理 阅后即焚等-v2.0.6

Geek_1ef48b

Kubernetes官方java客户端之六:OpenAPI基本操作

程序员欣宸

4月月更

Linux驱动开发-proc接口介绍

DS小龙哥

4月月更

用JAVA捋一下设计模式2-工厂方法模式

下雨了

设计模式 工厂方法模式 4月月更

Linux之lastlog命令

入门小站

Linux

《数据密集型型系统设计》LSM-Tree VS BTree

懒时小窝

哈希 B-tree 列式存储 LSM-Tree

好身体,从增加睡眠时间开始

石云升

睡眠 4月月更

PlatoFarm空投社区的逻辑,效仿无聊猿还是Dao理念使然

小哈区块

用JAVA捋一下设计模式23-解释器模式

下雨了

设计模式 4月月更 解释器模式

DDD实战(7):战术设计、整体流程与首次冲刺

深清秋

DDD 软件架构设计 生鲜电商系统

图数据库渐成技术新风口,星环科技自研图数据库领跑新赛道

星环科技

CDH/HDP迁移之路

星环科技

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