欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

Python,C++和Java代码互翻,Facebook开发首个自监督神经编译器

时间:2022-10-09 17:38:30 | 浏览:3275

译者 | 刘畅出品 | AI科技大本营(ID:rgznai100)将早期的编程语言(例如COBOL)的代码库迁移到现在的编程语言(例如Java或C++)是一项艰巨的任务,它需要源语言和目标语言方面的专业知识。COBOL如今仍在全球大型的系统

译者 | 刘畅

出品 | AI科技大本营(ID:rgznai100)

将早期的编程语言(例如COBOL)的代码库迁移到现在的编程语言(例如Java或C++)是一项艰巨的任务,它需要源语言和目标语言方面的专业知识。COBOL如今仍在全球大型的系统中广泛使用,因此公司,政府和其他组织通常必须选择是手动翻译其代码库还是尽力维护使用这个可追溯到1950年代的程序代码。

FaceBook公司开发了一个工具TransCoder,这是一个完全自我监督的神经编译器系统,它可以使代码迁移变得更加轻松和高效。本文的方法是第一个能够将代码从一种编程语言转换为另一种编程语言而无需并行数据进行训练的AI系统。本文已经证明TransCoder可以成功地在C++,Java和Python 3之间进行翻译功能。

TransCoder的性能优于开源的代码和基于商业规则的翻译程序。在本文的评估中,该模型正确地将90%以上的Java函数转换为C++,将74.8%的C++函数转换为Java,并将68.7%的函数从Java转换为Python。相比之下,市售工具只能正确地将61.0%的功能从C++转换为Java,而开源的翻译器仅能准确地将38.3%的Java函数转换为C++。

自我监督训练对于在编程语言之间进行翻译特别重要。传统的有监督学习方法依赖于大规模的并行数据集进行训练,但是对于COBOL到C++或C++到Python来说,这些数据根本不存在。TransCoder只依赖于仅用一种编程语言编写的源代码,而不需要源代码和目标语言中的相同代码示例。它不需要编程语言方面的专业知识,并且可以很容易地将TransCoder的方法推广到其他编程语言中。本文还创建了专门为此领域设计的新的评估指标。

TransCoder对于将遗留代码库更新为现代编程语言可能很有用,现代编程语言通常更高效且易于维护。它还展示了一个神经机器翻译技术应用的新领域。与Facebook AI以前使用神经网络解决高级数学方程式的工作一样,本文认为NMT可以帮助完成通常与翻译或模式识别任务无关的其他任务。

特意为编程语言建立序列到序列模型

在自然语言中,即使在越来越依赖自动化机器翻译系统的专业翻译人员群体中,神经机器翻译的最新结果也被广泛认可。但是,由于代码翻译领域中缺少并行数据,因此它们在该方面的应用受到了限制。程序员仍然依赖于基于规则的代码转换工具,这需要专家复查和调试输出,或者手动翻译代码。TransCoder通过利用无监督机器翻译到编程语言翻译取得的成功来克服这些挑战。

本文构建了一个带有注意力机制的序列到序列(seq2seq)模型,该模型由具有转换结构的编码器和解码器组成。TransCoder使用单个共享模型,部分基于Facebook AI以前在XLM上针对所有编程语言所做的工作。本文按照Facebook AI先前的研究中详细介绍的无监督机器翻译的三个原则进行了训练:初始化,语言建模和反向翻译。

本文首先利用开源GitHub项目中的源代码使用蒙版语言模型(MLM)对本文的模型进行了预训练。就像自然语言处理中的上下文一样,这种预训练会创建跨语言的嵌入:在相似上下文中使用来自不同编程语言的关键字在嵌入空间(例如catch和except)中非常接近。这些嵌入的跨语言性质来自存在于多种语言中的大量通用的标记(锚点)。锚点的示例包括C++,Java和Python通用的关键字(例如,for,while,if,try),以及源代码中出现的数学运算符,数字和英语字符串。

使用MLM进行预训练使TransCoder可以生成输入序列的高质量表示。然而,由于从未训练过解码器基于源表示对序列进行解码,因此解码器缺乏翻译能力。为了解决此问题,本文训练了该模型使用降噪自动编码(DAE)对序列进行编码和解码。 DAE的工作方式类似于有监督的机器翻译算法,在该算法中,模型被训练为在给定序列存在损坏的情况下预测该序列。

作为输入给解码器的第一个符号是指示输出编程语言的特殊标记。在测试时,该模型可以对Python序列进行编码,并使用C++起始符号对其进行解码以生成C++翻译器。C++翻译的质量将取决于模型的“跨语言”:如果编码器将Python函数和有效的C++翻译映射到相同的潜在表示,则解码器将成功翻译成C++。

仅预训练的跨语言模型和自动降噪就足以进行翻译。但是,这些翻译的质量往往很低,因为从未训练过该模型在测试时应该完成什么样的工作,即从一种语言翻译为另一种语言的功能。为了解决此问题,本文使用反向翻译,这是在弱监督的情况下利用单语数据的最有效方法之一。

对于每种目标语言,本文使用一个模型和一个不同的开始标记。它经过训练可以从源到目标以及从目标到源并行转换。目标到源版本用于将目标序列翻译成源语言,从而产生与标记目标(GT)序列相对应的嘈杂源序列。然后以弱监督的方式训练模型,让模型可以从嘈杂的源序列中重建目标序列,并学习从源到目标的转换。直到收敛为止。

为了评估该模型,以前对源代码翻译的大多数研究都依赖于自然语言中使用的度量标准,例如BLEU分数或其他基于标记之间相对重叠的方法。但是,这些类型的指标不太适合编程语言。语法差异小的两个程序在执行代码时可能会获得很高的BLEU分数,但会产生非常不同的结果。相反,具有不同实现方式的语义等效程序将具有较低的BLEU分数。另一种度量标准是参考匹配,或与GT完全匹配的翻译百分比,但这通常会低估翻译的质量,因为它无法识别语义上等效的代码。

为了更好地衡量TransCoder和其他代码翻译技术的性能,本文创建了一个称为计算精度的新指标,该指标可评估假设函数在给定相同输入时是否生成与参考相同的输出。我们还将发布测试集以及用于计算该指标的脚本和单元测试。

下面的示例显示了TransCoder如何将示例代码从Python转换为C++。我们使用以上的代码作为模型输入:

TransCoder成功将Python输入函数SumOfKsubArray转换为C++。它还可以推断参数的类型,返回类型和函数的参数。该模型将Python dequeue容器附加到C++实现dequeue <>。下面是该模型在C++中的输出:

最新研究并在实际应用中提供的帮助

自动代码翻译有可能使在公司或开源项目中工作的程序员更加高效,因为他们可以更轻松地集成公司内其他团队或其他开源项目的各种代码,还可以大大减少更新用早期语言编写的代码库的工作量和成本。

反编译的进步可能会促使公司和其他机构更新到最新的语言并促进未来的创新,这可能让使用服务的人们以及机构本身受益。编程语言机器翻译的进步也可以帮助那些没有时间学习多种语言编程的人。

更广泛地说,人工智能有潜力帮助其他编程任务。例如,Facebook AI以前共享了神经代码搜索,这是一种在查询代码中使用自然语言的方法。以及Getafix,该工具可学习自动为编码错误提供建议修复。虽然TransCoder并非旨在帮助调试或提高代码质量,但它可以帮助工程师迁移旧代码库或使用以其他语言编写的外部代码。

为了促进使用深度学习进行代码翻译的研究,本文还发布了一个测试集,该测试集使其他研究人员可以使用计算精度而不是语义盲模型来评估代码翻译模型。我们期待看到其他人如何在我们与TransCoder的合作基础上继续前进,并为新的翻译任务推进自我监督学习。

相关资讯

零基础学Python:Python五种Python解释器分享给你

不论你是Python新手零基础入门Python还是对于Python有了一定的经验积累,这里跟大家分享5个Python计时器,希望伙伴们有能用得上的!Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分

Python之父:Python4.0可能不会来了

机器之心报道编辑:力元、蛋酱2020 年 1 月 1 日,Python 官方结束了对 Python 2 的维护,意味着 Python 2 完全退休,进入 Python 3 时代。之后,关于 Python 4 的发布排期也成为了社区的热门议题

python入门之python简介

一、python了解python 是脚本语言。python 是一种面向对象的解释型计算机程序设计语言。语法简洁清晰,特色之一是强制用空白符作为语句缩进。优点:跨平台、胶水语言、开源免费、丰富的库 。缺点:运行速度慢、代码不能加密、场景、数据

最新的python,整整16个G,附零基础入门Python思维导图

思维导图是整理知识的一种非常有效的手段,这里分享几张 Python 基础学习的思维导图,可以帮助自己巩固下基础,有需要的小伙伴可以加紧时间收藏哦!获取方式:

什么是Python?为什么要学习Python?

第一期计算机等考二级程序设计科目的学习,我们从简单易学的Python开始,今天,就让我们揭开它神秘的面纱!我们先看三组数据:第一组呢是TIOBE指数排行,可以看到我们的Python在今年三月份排在了榜首的位置,相比去年的三月份,Python

Python:是!“用Python的,全是假程序员”!HR:太真实……

都说Python什么都能做,本来我是不信的!直到我在CSDN站内看到了一件真事儿:一位博主贴出了自己10分钟用Python搭建小说网站的全过程!全程只用了2步操作,简直太秀了!!……第一步:爬取小说数据库第二步:用Python的热门框架Dj

封神级Python开发核心知识点笔记!一篇带你学透Python

之前老看Java岗的一个朋友炫耀他的一份Java核心知识点笔记,当时,我内心毫无波澜,只有一点点酸……其实Python开发也有很多知识点,我一直一来就想要一份Python核心知识点笔记来帮助自己查漏补缺,后来想想,既然一直没有找到让我满意的

明年至少令Python提速2倍?Python之父给出爆料

去年 11 月,退休失败的 Python 之父 Guido van Rossum 在推特上宣布,退休生活太无聊,从而加入了微软开发者部门。微软自然支持优秀人才的发展,所以赋予了 Guido van Rossum “自由选择项目”的权利,Gu

Python入门教程:超详细1小时学会Python

小编贴心提醒,本文阅读时间9分钟1.Hello world安装完Python之后,打开IDLE(Python GUI) ,该程序是Python语言解释器,你写的语句能够立即运行。我们写下一句著名的程序语句:并按回车,你就能看到这句被K&R引

想学习Python不知从何学起?一份超详细Python入门资料,干货满满

Python是近年来非常火热的一门编程语言,Python 语言最大的特点就是简单,该特点主要体现在以下 2 个方面:1. Python 语言的语法非常简洁明了,即便是非软件专业的初学者,也很容易上手。2. 和其它编程语言相比,实现同一个功能

python入门基础教学,再不学python就晚了

经过了前一段时间的python学习,那么今天我们来学习一下字典,首先来看一个简单的字典:在python中,字典是一系列键-值对,每个键都与一个值相关联,例如前面的color和age就是键,yelllow和23就是他们分别对应的值对1.访问字

学习Python你一定要知道的知识Python解释器的作用和分类有哪些

之前已经讲解了Python解释器的下载和安装,现在就讲下解释器的作用和分类,在讲解任何Python代码之前我们得先知道解释器概念和作用,因为解释器扮演的角色是非常重要的。一、解释器的作用****作用:运行文件(运行代码)****Python

如何在PythonIDLE中查看Python中turtle库中所有方法及用法

在IDLE中点击help中的Python Docs找到“Python Docs”然后就进入Python文档的界面,在左边找到“搜索”按钮,并点击。找到“搜索”按钮在搜索框中搜索所需要的库名称或者函数名称,就能含有该关键词对应的文件。你会在这

7步搞定Python数据可视化,大牛出品教程,Jupyter、Colab版都有

郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI做图表,谁不会?打开Excel,自动就可以生成各种各样的图表。但你看这些图表呢?结合真实地理数据,展现美国每个县的失业率。全球自然灾害统计,类型、规模、时间,一目了然。甚至还有可爱

分析Python3中的bytes和str类型

从例子可以看出,s是个字符串类型。Python有个内置函数bytes()可以将字符串str类型转换成bytes类型,b实际上是一串01的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b’xe4xb8xadxe6x96

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈游泳运动网飞猪旅行资讯网金牌月嫂网正品莆田鞋官网热水器品牌网玛莎拉蒂跑车网道恩强森影迷网今日商丘阿姆斯特丹旅游网山西旅游网温州新闻头条网柳州新闻资讯网康佳电视评测网旅行社信息网睡前故事大全
python编程教学网-python数据库开发教程、python基础知识入门、python数据库编程入门、python语法基础、python下载安装教程、python下载手机版、python翻译器下载手机版、python翻译器代码、python语言翻译、python基础代码、python编程自学网。
python编程教学网 dadeji.cn ©2022-2028版权所有