在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

发布了 584 篇内容, 共 310.1 次阅读, 收获喜欢 1306 次。

关注

评论

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

一图读懂《2023 年全球互联网通信云行业研究报告》

融云 RongCloud

互联网 通讯 图片资源

共铸国云智领未来| “码”上呼唤,马上办!

天翼云开发者社区

虚拟主机和云服务器的区别

天翼云开发者社区

终于说有人清楚了BI仪表板和大屏的区别

搞大屏的小北

数据分析 数据可视化 数据大屏 仪表板 可视化展示

WorkPlus|可定制、可扩展的私有化即时通讯办公平台

BeeWorks

云原生+新技术,会碰撞出怎样的火花?

墨天轮

数据库 阿里云 Serverless 云原生 华为云

从5分钟到60秒,袋鼠云数栈在热重启技术上的提效探索之路

袋鼠云数栈

热重启

云计算之-弹性伸缩

天翼云开发者社区

「中华田园敏捷开发」,是老板无能还是程序员无力?

引迈信息

前端 敏捷开发 后端 低代码

数据资产与勒索病毒之间,华为立起一张安全盾牌

脑极体

安全

从新手小白到运维大咖,SysOM 多场景宕机实例解析 | 龙蜥技术

OpenAnolis小助手

运维 操作系统 服务器 龙蜥技术 SysOM

企业内部即时通讯软件,提供安全的组织管理和办公协作方式

BeeWorks

分享一个 hive on spark 模式下使用 HikariCP 数据库连接池造成的资源泄露问题

明哥的IT随笔

大数据 hive

GitLab 解析:为什么市场正在转向一体化 DevSecOps 平台?(附Forrester完整报告下载)

极狐GitLab

DevOps DevSecOps 安全测试 极狐GitLab 安全合规

让AI上车,车企如何借势2023上海国际车展硬核出圈

极客天地

【知识科普】晶振究竟是如何起振的?

元器件秋姐

科普 晶振 元器件 电子

【附下载】艾瑞《全球互联网通信云研究报告》,融云 IM 连续 8 年展现统治力

融云 RongCloud

互联网 IM 社交 融云 元宇宙

用友BIP接入百度文心一言 持续使能企业数智商业创新

用友BIP

一文解码:如何在人工智能热潮下实现产业“智”变

加入高科技仿生人

人工智能 AI 低代码 智能化

十分钟读懂火山引擎DataLeap数据治理实践

字节跳动数据平台

大数据 数据研发 企业号 3 月 PK 榜

全国首个算力互联互通验证平台发布,天翼云推动算力智能调度再提速

天翼云开发者社区

OpenCloudOS 轻量级虚拟化引擎 LiKeX 介绍

OpenCloudOS

Linux 容器 rust

DTALK直播预约 | 深度解析大资管行业数字化转型

袋鼠云数栈

数字化转型

一图读懂工业数据要素高水平应用

Openlab_cosmoplat

工业数据

内存耗尽后Redis干了什么

CTO技术共享

电商 SaaS 全渠道实时数据中台最佳实践

Apache Flink

大数据 flink 实时计算

如何召开成功高效的项目会议?

PMO实践

项目管理 PMO

如何利用分布式算法理解分布式存储

Dinfan

数据库 分布式 分布式存储 分布式算法

一文搞懂面试官常问的:SpringBoot自动配置原理

Java Spring Boot 自动装配

用友与百度强强联合,以AI深化冶金行业数智化应用场景

用友BIP

3 问 6 步,极狐GitLab 帮助企业构建高效、安全、合规的 DevSecOps 文化

极狐GitLab

DevOps DevSecOps 安全测试 极狐GitLab 安全左移

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