Facebook AI 用深度学习实现编程语言转换,代码库迁移不再困难!

本文涉及的产品
文档翻译,文档翻译 1千页
语种识别,语种识别 100万字符
图片翻译,图片翻译 100张
简介: 从旧式编程语言(例如COBOL)到现代替代语言(例如Java或C ++)的代码库迁移是一项艰巨的任务,Facebook AI开发了Transcoder,这是一个完全自监督的神经转编译器系统,可以使代码迁移变得更加轻松和高效。

微信图片_20220109133706.jpg


从旧式编程语言(例如COBOL)到现代语言(例如Java或C ++)的代码库迁移是一项艰巨的任务,需要源语言和目标语言方面的专业知识。

 

例如,COBOL至今仍在全球大型机系统中广泛使用,因此公司,政府和其他组织通常必须选择,是手动翻译其代码库,还是致力于维护使用可追溯到1950年代的语言编写的代码。

 

Facebook AI开发了Transcoder,可以使代码迁移变得更加轻松和高效。Facebook AI的方法能够将代码从一种编程语言转换为另一种编程语言,而无需数据进行训练的AI系统。

        微信图片_20220109133708.png    

Facebook AI已经证明TransCoder可以成功地在C ++,Java和Python之间完成语言转换。TransCoder的性能优于开放源代码的且基于商业规则的翻译程序。在Facebook AI的评估中,该模型正确地将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对于将遗留代码库更新为现代编程语言很有用,现代编程语言通常更高效且易于维护。它还显示了如何将神经机器翻译技术应用于新领域。


seq2seq模型发挥了大作用


在自然语言中,即使在越来越依赖自动化机器翻译系统的专业翻译人员中,神经机器翻译的最新进展也被广泛接受。但是,由于该领域中并行数据的稀缺性,它们在代码转换中的应用受到了限制。程序员仍然依赖基于规则的代码转换器,这需要专家审查和调试输出,或者他们只是手动翻译代码。TransCoder通过利用无监督机器翻译到编程语言方面的最新进展来克服这些挑战。

 

Facebook AI特别注意构建了一个seq2seq模型,该模型由具有变压器架构的编码器和解码器组成。TransCoder使用单个共享模型,部分基于Facebook AI在XLM上的先前工作,适用于所有编程语言。Facebook AI按照无监督机器翻译的三个原则:初始化,语言建模和反向翻译。

    微信图片_20220109133709.png


此图显示了TransCoder如何利用无监督机器翻译的三个原理


Facebook AI首先利用开源GitHub项目中的源代码,使用MLM目标对Facebook AI的模型进行了预训练。就像在自然语言处理的上下文中一样,这种预训练会创建跨语言的嵌入:在相似上下文中使用的来自不同编程语言的关键字在嵌入空间中非常接近(例如catch和except)。

 

这些嵌入的跨语言性质来自存在于多种语言中的大量通用令牌。令牌的示例包括C ++,Java和Python通用的关键字(例如,for,while,if,try),以及源代码中出现的数学运算符,数字和英文字符串。

 

使用MLM进行预训练使TransCoder可以生成输入序列的高质量表示。然而,解码器缺乏翻译能力,因为从未训练过解码器,基于源表示对序列进行解码。为了解决此问题,Facebook AI训练了该模型以使用降噪自动编码(DAE)目标对序列进行编码和解码。

 

DAE的工作方式类似于监督机器翻译算法,其中训练模型以在给定序列的损坏版本的情况下预测令牌序列。在测试时,该模型可以对Python序列进行编码,并使用C ++起始符号对其进行解码以生成C ++转换。

QQ图片20220109133626.png


视频显示了具有相似功能的关键字如何组合在一起。

 

仅跨语言模型预训练和自动降噪就足以生成翻译。但是,这些翻译的质量往往很低,因为从未训练过该模型以使其在测试时可以完成预期的工作,即将功能从一种语言翻译为另一种语言。

 

为了解决此问题,Facebook AI使用反向翻译,这是在弱监督的情况下利用单语数据的最有效方法之一。对于每种目标语言,Facebook AI使用一个模型和一个不同的开始标记。它经过训练可以从源到目标以及从目标到源并行转换。

 

然后可以以弱监督的方式训练模型,以从嘈杂的源序列中重建目标序列,并学习从源到目标的转换。并行训练目标到源版本和源到目标版本,直到收敛为止。

 

为了评估他们的模型,以前的大多数源代码翻译研究都依赖于自然语言中使用的度量标准,例如BLEU分数或其他基于标记之间相对重叠的方法。


但是,这些类型的指标不太适合编程语言。语法差异小的两个程序在执行代码时可能会获得很高的BLEU分数,同时仍然产生非常不同的结果。相反,具有不同实现方式的语义等效程序,将具有较低的BLEU分数。

 

另一种度量标准是参考匹配,或与实地参考完全匹配的翻译百分比,但这通常会低估翻译质量,因为它无法识别语义上等效的代码。

 

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

        微信图片_20220109133711.png      

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

 

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

      微信图片_20220109133713.png


编程语言转换让实际应用受益


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

 

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


微信图片_20220109133714.jpg


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

 

为了促进有关使用深度学习进行代码翻译的未来研究,Facebook AI还发布了一个测试集,该测试集使其他研究人员可以使用计算精度而不是语义盲模型来评估代码翻译模型。


Facebook AI期待看到其他人在和TransCoder的合作基础上继续前进,并为新的翻译任务推进自我监督学习。

相关文章
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
354 3
|
6月前
|
机器学习/深度学习 人工智能 供应链
从概念到商业价值:AI、机器学习与深度学习全景指南
在这个科技飞速发展的时代🚀,人工智能正以惊人的速度渗透到我们的生活和工作中👀。但面对铺天盖地的AI术语和概念,很多人感到困惑不已😣。"AI"、"机器学习"、"深度学习"和"神经网络"到底有什么区别?它们如何相互关联?如何利用这些技术提升工作效率和创造价值?
|
7月前
|
人工智能 自然语言处理 Rust
【内附榜单】评估AI大模型的代码修复能力!Multi-SWE-bench:字节开源代码修复能力评估基准,覆盖7大主流编程语言
Multi-SWE-bench是首个覆盖Python外7种主流编程语言的代码修复基准,包含1632个真实GitHub问题样本,通过严格筛选与人工验证确保数据质量。
568 0
【内附榜单】评估AI大模型的代码修复能力!Multi-SWE-bench:字节开源代码修复能力评估基准,覆盖7大主流编程语言
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
564 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
426 15
|
4月前
|
人工智能 测试技术 编译器
从 Python 演进探寻 AI 与云对编程语言的推动
Python 自 2008 年发布 3.0 版本以来,经历了持续演进与革新。十六年间,从 Python 3.0 到即将发布的 3.14,语言设计、性能优化、类库生态及虚拟机技术等方面均有显著提升。字符串处理、异步编程、类型系统等核心功能不断现代化,Faster CPython 和 JIT 编译技术推动运行效率飞跃。同时,AI、云计算等新兴技术成为其发展的重要驱动力。本文全面回顾了 Python 的演进历程,并展望未来发展方向。
156 2
|
6月前
|
人工智能 JavaScript 安全
【HarmonyOS NEXT+AI】问答05:ArkTS和仓颉编程语言怎么选?
本文针对学员关于“鸿蒙主推开发语言是ArkTS,为何课程使用仓颉语言”的疑问进行解答。文章回顾了鸿蒙编程语言的发展历程:从早期支持JS和C/C++,到HarmonyOS 2引入Java,再到HarmonyOS 3推出ArkTS,直至HarmonyOS 5(NEXT)引入仓颉语言。仓颉作为华为自研的现代编程语言,具备高效编程、安全可靠、轻松并发和卓越性能等特性,适用于高性能高并发场景及未来AI原生应用开发。文章还探讨了仓颉与ArkTS的关系、应用场景以及是否需要重写现有应用等问题,为开发者选择编程语言提供了参考依据。
439 13
【HarmonyOS NEXT+AI】问答05:ArkTS和仓颉编程语言怎么选?
|
7月前
|
人工智能 JavaScript 前端开发
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
本文探讨了仓颉编程语言是否适合用于毕业设计的问题。仓颉编程语言虽小众,但具备独特性与创新性,可开发鸿蒙应用及AI大模型应用,具有前瞻性。其语法与主流语言类似,易于上手,且有丰富课程支持学习。若时间充裕并结合相关主题,使用仓颉语言能让毕业设计在答辩中脱颖而出。同时,文章还介绍了毕业设计答辩的时间安排,帮助学生合理规划。
282 3
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
664 9
|
7月前
|
存储 人工智能 测试技术
DeepWiki:告别迷茫!AI轻松解析Github代码库
DeepWiki 的核心目标是帮助开发者快速理解复杂的代码仓库。无论是公共仓库还是私有项目,它都可以通过简单的操作生成类似 Wikipedia 的文档页面。

热门文章

最新文章