当前位置: 首页 > 科技观察

7.5亿美元用于转码?一个FacebookTransCoderAI就足够了!

时间:2023-03-12 18:35:31 科技观察

代码迁移和语言转换非常困难和昂贵。澳大利亚联邦银行曾耗时5年,耗资7.5亿美元,将其平台从COBOL转换为Java。而Facebook最近宣布,他们开发了一款神经转译器(neuraltranscompiler),可以将一种高级编程语言(如C++、Java和Python)转换成另一种,效率飞涨!从COBOL到Java,TransCoder可以帮助您节省7.5亿美元。不同的编程语言也可以自动转换!请注意,将现有代码库迁移到现代或更高效的语言(如Java或C++)需要精通源语言和目标语言,并且在金钱和时间上都可能代价高昂。CommonwealthBankofAustralia在过去五年中花费了大约7.5亿美元将其平台从COBOL转换为Java。但是Facebook最近开发的神经转换编译器TransCoder在代码转换方面有了新的突破。该系统可以将代码从一种高级语言转换为另一种高级语言,例如C++、Java和Python。这个系统是弱监督的,可以在未标记的数据集中寻找以前未检测到的模式,只需要少量的人工监督。据研究人员称,这比基于常规数据集的模型更有效。从理论上讲,代码转换编译器可以提供很多帮助,而无需从头开始重写代码。但在实践中,代码转换是一件非常困难的事情,因为不同的语言依赖于不同的语法准则、不同的平台API、标准库函数和变量类型。因此,TransCoder的推出无疑是企业的福音。因为他们不必像澳大利亚联邦银行那样花费大量的时间和金钱在繁琐的代码转换工作上。他们只需要选择Facebook和TransCoder,平台迁移就可以轻松解决。从Java到C++,TransCoder的转换准确率超过90%!TransCoder是基于跨语言模型预训练的模型初始化。这种训练不关注编程语言的类型,而只是将表示相同指令的代码段映射到相同的表示形式。TransCoder之所以能够训练出跨语言模型,是因为该系统的标注原理侧重于语言间常见的关键字,如“if”、“for”等,以及出现在语言中的数字、数学运算符、符号等。源代码。英文字符串。这样,在反向翻译后,source-target模型与并行训练的target-source模型耦合,从而提高训练质量。为了评估TransCoder的性能,研究人员从GeeksforGeeks中提取了852个C++、Java和Python并行函数,并使用这些不同的语言转换来测试函数语义是否准确。测试结果如下:GeeksforGeeks是一个在线平台,使用它收集编写代码时的问题,并提供多种编程语言的解决方案。研究人员表示,在实验过程中,TransCoder展示了对每种语言独特语法的理解,并能够适应小规模的修改。虽然这个模型并不完美,但它优于现有的使用专家知识手动构建的框架。从自然语言翻译到代码翻译,seq2seq再创佳绩。TransCoder使用经典的序列到序列(seq2seq)模型,该模型由基于Transformer的编码器和解码器组成。seq2seq模型的好处是你只需要有对应的Input和output就够了,不用关心使用的是哪两种编程语言。TransCoder按照Lample等人确定的无监督机器翻译管道进行训练,包括初始化、语言建模和回译。实验表明,以跨语言的方式预训练整个模型(而不仅仅是词表征)可以显着提高无监督机器翻译的效果。TransCoder遵循Lample和Conneau的预训练策略,其中跨语言模型(XLM)在源代码数据集上使用掩码语言建模在单一语言中进行预训练。TransCoder的转换原理其中,跨语言的本质来自于多种语言中大量的公共标签(锚点)。在英法翻译语境中,锚点主要由数字、城市、姓名等组成,而在编程语言中,这些锚点来自于常见的关键字(for、while、if、try等),而在源代码中出现的数字、运算符和英文字符串等。seq2seq模型的编码器和解码器由预训练的XLM模型参数初始化。对于编码器,初始化非常简单,因为它具有与XLM模型相同的架构。但是decoder有额外的attention机制相关的参数,所以这部分使用随机初始化。XLM预训练允许seq2seq模型生成输入序列的高质量表示。然而,解码器缺乏翻译能力,因为解码器从未接受过基于源表示解码序列的训练。为了解决这个问题,TransCoder使用去噪自动编码器(DAE)对序列进行编码和解码,然后训练模型。在测试时,该模型可以对Python序列进行编码并使用C++起始符号对其进行解码以生成C++转换。C++转换的质量取决于模型的“跨语言”性能:如果编码器将Python和C++转换映射到相同的表示,解码器将成功生成相应的C++代码。事实上,仅XLM预训练和降噪自动编码器就足以生成翻译。然而,这些翻译的质量通常很低,因为模型从未针对编程语言实现的功能进行过训练。为了解决这个问题,TransCoder使用反向翻译,这是在弱监督下利用单语数据的最有效方法。在无监督情况下,源到目标模型与反向目标到源模型并行训练。目标到源模型用于将目标序列翻译成源语言,从而产生对应于真实目标序列的嘈杂源序列。然后以弱监督方式训练源到目标模型,以从先前生成的噪声源序列重建目标序列,反之亦然,并行训练两个模型直到收敛。作者简介Marie-AnneLachaux,论文第一作者,现任Facebook人工智能研究院NLP方向研究员。她拥有巴黎高等电信学院计算机图形学学士学位,伦敦国王学院计算机图形学硕士学位,曾在达索系统公司担任研究员。主要研究方向为计算机视觉与图像识别、计算机神经网络。在达索担任研究员期间,Marie-AnneLachaux的主要方向是拓扑优化研究。拓扑优化是一种设计机械零件的新方法,其目标是在保持机械性能的同时大幅减少零件的质量。拓扑优化的实现基于VisualStudio、c++和众多经典库,这为Marie-AnneLachaux在Facebook开展NLP研究奠定了基础。之前已经有很多基于深度学习的代码自动补全,效果也非常惊人。基于规则代码转换的项目也很多,但大多泛化能力不强。毕竟,能写的规则是有限的。TransCoder基于深度学习进行代码转换,忽略这些规则,直接端到端,对相关工作还是很有启发的。如果TransCoder的准确率不断提高,算法模型工程的工作量将大大减少,程序员的编码效率也会有质的飞跃。