📜  Facebook 的 TransCoder AI 在多种编程语言之间转换代码

📅  最后修改于: 2021-10-22 03:39:46             🧑  作者: Mango

如果您想将特定代码从一种编程语言更改为另一种编程语言,您会怎么做?如果它是一个小代码并且您可以用不同的语言编写核心逻辑,那就足够简单了。但是那些拥有由数百万行代码组成的代码库的大公司呢?他们不能只是雇人来轻松地将这些行从一种语言转换为另一种语言!这个过程很昂贵,可能需要数年时间和数百万美元。但这有时也是企业的必要过程。例如,如果一家公司有一个旧语言的代码库,那么他们需要将其更改为更新且更相关的语言。事实上,澳大利亚联邦银行从 2012 年开始的五年内花费了 7.5 亿美元将其代码库从 COBOL 转换为Java。

Facebook's-TransCoder-AI-Converts-Code-Between-Multiple-Programming-Languages

如果他们可以使用trans 编译器将代码从一种编程语言自动转换为另一种编程语言,而不是从头开始,那将会容易得多。但这并不容易!所有的编程语言都有不同的语法、变量类型、标准库函数等,所以自动转换代码不是小菜一碟。幸运的是,对于希望将其代码库从传统语言转换为更现代语言的未来公司来说,Facebook 刚刚宣布创建一个 TransCoder,可以将代码从 C++、 Java和Python等编程语言转换为另一种语言。

什么是转码器 AI?

TransCoder AI 使用机器学习中的无监督学习算法在C++、 JavaPython之间转换代码。该算法识别输入和输出语言之间的公共元素,称为标记。这些标记可以包括常见的关键字,例如“for”、“if”、“else”、“while”、“try”等,也可以包括常见的数学数字和运算符,无论使用哪种语言。其他一些标记是作为代码本身一部分的公共字符串。

该算法还使用反向翻译来提高 TransCoder 的翻译质量。这意味着同时训练源代码到目标代码模型和目标代码到源代码模型,然后耦合在一起以创建最终输出。因此,目标代码到源代码模型从目标语言创建源语言中的代码,然后源代码到目标代码模型将其转换为目标语言,重复此过程,直到为目标语言获得的代码相同作为原始目标语言代码。

TransCoder AI 的性能

Facebook 研究人员使用来自 GitHub 存储库的代码训练了 TransCoder AI 算法。有超过 280 万个开源存储库专注于将函数从一种编程语言转换为另一种编程语言。因此,研究人员在编程语言中创建了大约 6,000 个标记或常见元素,并使用这些来训练 TransCoder AI 算法来翻译函数。

在训练算法后,Facebook 研究人员使用GeeksforGeeks 的852 个 C++、 Java和Python并行函数测试了其准确性!由于 GeeksforGeeks 几乎拥有 C、C++、 Java、C#、 Python等多种语言的所有函数,因此它是获取源语言的函数代码,然后检查 TransCoder 是否以目标语言生成的代码的理想场所AI 算法与 GeeksforGeeks 上可用的代码相匹配。在将函数代码从一种编程语言转换为另一种编程语言时,使用了一种称为计算精度的新指标来衡量算法的准确性。

在 C++、 Java和Python之间进行转换时获得的计算精度如下所示:

  • C++ 到Java 的计算精度: 74.8%
  • C++ 到Python 的计算精度: 67.2%
  • Java到 C++ 的计算精度: 91.6%
  • Java到Python 的计算精度, 68.7%
  • Python到Java 的计算精度: 56.1%
  • Python到 C++ 的计算精度: 57.8%

Facebook 研究人员得出结论,虽然 TransCoder AI 算法翻译的许多源函数并不完全准确,但与之前的尝试相比,计算准确度仍然相对较高。 TransCoder 能够理解和区分所有语言的语法,并且与源语言相比,它在目标语言的源代码中分配了正确的数据结构、方法和库。研究人员还声称,在没有任何专业知识的情况下,TransCoder 可以很容易地推广到除 C++、 Java和Python之外的任何编程语言。总而言之,这个实验取得了巨大的成功,它绝对优于当前手动从一种语言转换为另一种语言的商业解决方案。