CN114207576A - 使用机器学习在编程语言之间进行翻译 - Google Patents
使用机器学习在编程语言之间进行翻译 Download PDFInfo
- Publication number
- CN114207576A CN114207576A CN202080050090.9A CN202080050090A CN114207576A CN 114207576 A CN114207576 A CN 114207576A CN 202080050090 A CN202080050090 A CN 202080050090A CN 114207576 A CN114207576 A CN 114207576A
- Authority
- CN
- China
- Prior art keywords
- programming language
- source code
- natural source
- target
- base
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Medical Informatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Probability & Statistics with Applications (AREA)
- Devices For Executing Special Programs (AREA)
- Machine Translation (AREA)
Abstract
本文描述了用于使用机器学习将一种编程语言的源代码翻译为另一编程语言的源代码的技术。在各种实施方式中,可以训练一个或更多个生成对抗网络的一个或更多个组件,诸如生成器机器学习模型,以生成能够用作不熟悉语言的源代码的翻译的“合成自然”源代码。在一些实施方式中,可以采用鉴别器机器学习模型来帮助训练生成器机器学习模型,例如,通过被训练以区分人类生成的(“真实的”)和机器生成的(“合成的”)源代码。
Description
背景技术
计算机软件编程通常要求开发者以特定语言——例如Java、C++、C、Python等——读和/或写源代码(即,编程)。每种编程语言具有其自身的优点、缺点、细微差别、特质等。另外,一些编程语言比其他编程语言更适合于软件开发的某些阶段和/或软件生命周期。作为一个示例,诸如Python、JavaScript、Perl等的脚本语言通常在软件开发的刚开始时被更有效地使用,这是因为使用这些语言的程序员能够相对快速地转变功能软件。
大多数程序员至少表面理解多种编程语言,但是仅精通几种编程语言。因此,每种编程语言倾向于具有其自己的人才池。当诸如公司的实体选择将采用哪种编程语言来形成其代码库时,人才池的大小是一个考虑因素。不幸的是,不同编程语言之间的界限成为软件演进的大障碍之一。作为示例,假设公司的代码库主要是以基础编程语言编写的,但是不管出于任何原因,公司决定它需要以目标编程语言编写的新代码。该公司现有的人才库相较于第二个编程语言可能更专业于基础编程语言。雇佣用第二个编程语言训练的新程序员会是昂贵的。训练现有雇员以目标编程语言编程也是昂贵的。重构平台和/或迁移代码库也是耗时的工作,这耗费了软件开发的时间。
发明内容
本文描述了用于使用机器学习将“基础”编程语言的源代码翻译为另一种编程语言或“目标”编程语言的源代码的技术。除此之外,这允许可能不熟悉基础编程语言的程序员通过首先将源代码翻译为另一种更熟悉的编程语言来查看和/或编辑以基础语言编写的源代码。
可以训练各种类型的机器学习模型以在编程语言之间进行翻译。在一些实施方式中,可以训练一个或更多个生成对抗网络(“GAN”),例如,用于一种或更多种不同编程语言之间的翻译。在一些这样的实施方式中,每个GAN可以与特定的编程语言相关联。每个GAN可以包括生成器,该生成器被训练为例如基于指示另一种编程语言的源代码的输入来生成目标编程语言的“合成自然(synthetically-naturalistic)”(即,人类可读或人类友好的)源代码。每个GAN也可以包括鉴别器,该鉴别器被训练以区分由人类以目标编程语言编写的“真实”源代码和由生成器以目标编程语言生成的“合成”源代码。
可以例如使用“真值(ground truth)”或“人类编写的”源代码片段和基于生成器的输出创建的合成自然源代码片段两者来联合训练(并且具有很少或没有监督)生成器和鉴别器。例如,假设由生成器生成的合成自然源代码片段被鉴别器认为是“真实的”,即由人类编写的。与鉴别器的输出相关联的对抗损失可以反映鉴别器被生成器“欺骗”,并且可以相应地训练鉴别器。作为另一示例,假设由生成器生成的合成自然源代码片段被鉴别器认为是“合成的”,即由生成器生成。与鉴别器的输出相关联的对抗损失可以反映鉴别器没有被生成器“欺骗”,并且可以基于该对抗损失来训练生成器。在本文的各种实施方式中,可以使用诸如作为示例的反向传播和梯度下降等技术来训练鉴别器和/或生成器。
当开始训练GAN(或多个)以促进基础编程语言和目标编程语言之间的翻译时,可能并不总是(或甚至经常)跨基础编程语言和目标编程语言存在提供类似或对应功能的源代码片段对。因此,在一些实施方式中,可以采用诸如CycleGAN的技术来联合训练一个或更多个GAN的一个或更多个生成器,以在基础编程语言和目标编程语言之间翻译源代码。通过采用这样的技术,不需要在基础编程语言和目标编程语言中具有功能上对应的源代码片段对。
用于生成器和/或鉴别器的各个机器学习模型可以采取各种形式。在一些实施方式中,生成器和鉴别器中的一者或两者可以采用递归神经网络的形式,诸如长短期记忆(“LSTM”)或门控递归单元(“GRU”)网络。在一些实施方式中,生成器和鉴别器中的一者或两者可以采用序列到序列机器学习模型的形式,诸如编码器-解码器或“自动编码器”。在一些这样的实施方式中,编码器-解码器可以包括被训练为基于以源编程语言编写的源代码片段来生成潜在空间(latent space)嵌入的编码器。编码器可以与例如解码器耦接,解码器被训练为从潜在空间嵌入生成指示以目标编程语言编写的源代码片段(例如,源代码本身、抽象语法树或“AST”等)的数据。在一些实施方式中,生成器和鉴别器中的一者或两者可以对图形输入进行操作,并且可以采取例如图神经网络(“GNN”)、图卷积网络(“GCN”)、图注意力神经网络(“GANN”,不要与“GAN”或生成对抗网络混淆)等的形式。
一旦训练了GAN(或多个),则在一些实施方式中,推断阶段可以如下进行。可以处理(例如,编译)以基础编程语言(例如,C++)编程的源代码片段以生成第一“低级表示”。如本文所使用的,“低级表示”可以指字节码、目标代码、二进制代码、汇编代码或与从其生成低级表示的源代码相比人类可读性较差的源代码的任何其他表示。然后可以处理(例如,反编译)第一低级表示以生成目标编程语言(例如,Java)的“机器友好”或“非自然”源代码片段。如本文所使用的,“机器友好”或“非自然的”源代码片段是人类相对不可理解的片段,这是因为它是由计算机从低级表示生成的,并且缺少使其对人类可理解的任何样式或其他元素或特性(例如,格式、选项卡、注释等)。
目标编程语言的非自然源代码片段,并且在一些实施方式中,以基础编程语言编程的原始源代码片段,可以作为输入应用于目标编程语言生成器,以生成目标编程语言的“人类友好”或“合成自然”源代码片段。如本文所使用的,“人类友好”或“合成自然的”源代码片段对于人类来说是相对可理解的,特别是与机器友好或非自然的源代码片段相比,这是因为它可以包括使其对于人类来说是可理解的风格或其他元素/特质。
在各种实施方式中,目标编程语言的合成自然源代码片段可以被呈现为例如软件开发应用的输出。因此,例如,不熟悉C++但熟悉Java的用户可以选择C++源代码文件,以使该C++源代码文件的全部或一部分被翻译为看上去自然的Java源代码并以其显示。
在一些实施方式中,使用一个或更多个处理器实施的方法可以包括:处理以基础编程语言编程的源代码片段以生成第一低级表示;处理第一低级表示以生成目标编程语言的非自然源代码片段;向目标编程语言生成器应用目标编程语言的非自然源代码片段作为输入,以生成目标编程语言的合成自然源代码片段;向目标编程语言鉴别器应用目标语言的合成自然源代码片段作为输入,以生成将合成自然源代码片段分类为合成的或人工生成的输出;以及基于目标编程语言鉴别器的输出的对抗损失来训练目标编程语言鉴别器和目标编程语言生成器中的一者或两者。
在各种实施方式中,还向目标语言生成器与目标编程语言的非自然源代码片段一起应用以基础编程语言编程的源代码片段,作为输入。在各种实施方式中,该方法还可以包括:向基础编程语言生成器应用目标编程语言的合成自然源代码片段作为输入,以生成基础编程语言的合成自然源代码片段;向基础编程语言鉴别器应用基础编程语言的合成自然源代码片段作为输入,以生成将基础编程语言的合成自然源代码片段分类为合成的或人工生成的输出;以及基于基础编程语言鉴别器的输出的对抗损失来训练基础编程语言鉴别器和基础编程语言生成器中的一者或两者。
在各种实施方式中,该方法还可以包括:将目标编程语言的合成自然源代码片段编译成第二低级表示;以及反编译第二低级表示以生成基础编程语言的非自然源代码片段。在各种实施方式中,还与目标编程语言的合成自然源代码片段一起向基础编程语言生成器应用基础编程语言的非自然源代码片段,作为输入。
在各种实施方式中,进一步基于以基础编程语言编程的源代码片段与基础编程语言的合成自然源代码片段之间的相似性来训练基础编程语言鉴别器和基础编程语言生成器中的一者或两者。在各种实施方式中,相似性包括编辑距离。
在各种实施方式中,第一低级表示包括目标代码或字节码。
在另一方面,一种方法可以包括:处理以基础编程语言编程的源代码片段以生成第一低级表示;处理第一低级表示以生成目标编程语言的非自然源代码片段;向目标编程语言生成器应用目标编程语言的非自然源代码片段和以基础编程语言编程的源代码片段作为输入,以生成目标编程语言的合成自然源代码片段;以及渲染目标编程语言的合成自然源代码片段作为软件开发应用的输出。
另外,一些实施方式包括一个或更多个计算设备的一个或更多个处理器,其中,一个或更多个处理器可操作以执行存储在相关联的存储器中的指令,并且其中,指令被配置为促使执行任何前述方法。一些实施方式还包括一个或更多个非暂时性计算机可读存储介质,其存储可由一个或更多个处理器执行以执行任何上述方法的计算机指令。
应当理解,本文更详细描述的前述构思和附加构思的所有组合被认为是本文公开的主题的一部分。例如,出现在本公开开头的所要求保护的主题的所有组合被认为是本文公开的主题的一部分。
附图说明
图1示意性地描绘了根据各种实施方式的可以实现本公开的所选方面的示例环境。
图2是示出根据各种实施方式的可以如何训练生成对抗网络的组件的示例的框图。
图3描绘了根据各种实施方式的本文描述的技术的示例应用。
图4描绘了示出用于实践本公开的所选方面的示例方法的流程图。
图5描绘了示出用于实践本公开的所选方面的示例方法的另一流程图。
图6示出了计算设备的示例架构。
具体实施方式
图1示意性地描绘了根据各种实施方式的可以实现本公开的所选方面的示例环境。图1中或附图中其他地方描绘的任何计算设备可以包括诸如执行存储在存储器中的计算机可读指令的一个或更多个微处理器(例如,中央处理单元或“CPU”、图形处理单元或“GPU”)的逻辑,或者诸如专用集成电路(“ASIC”)、现场可编程门阵列(“FPGA”)的其他类型的逻辑等。图1中描绘的一些系统(诸如代码知识系统102)可以使用形成有时被称为“云基础设施”的一个或更多个服务器计算设备来实现,但这不是必需的。
可以提供代码知识系统102以帮助客户端1101-P管理它们各自的代码库1121-P。此外,代码知识系统102可以包括代码翻译器104,其被配置为执行本公开的所选方面,以便帮助一个或更多个客户端1101-P管理一个或更多个对应的代码库1121-P和/或对一个或更多个对应的代码库1121-P进行改变。每个客户端110可以是例如实体或组织——诸如企业(例如,金融机构、银行等)、非营利组织、俱乐部、大学、政府机构——或操作一个或更多个软件系统的任何其他组织。例如,银行可以操作一个或更多个软件系统来管理其控制下的资金,包括跟踪存款和取款、跟踪贷款、跟踪投资等。航空公司可以操作一个或更多个软件系统,用于预订/取消/重新预订航班预订、管理航班的延迟或取消、管理与航班相关联的人员(诸如乘客、机组人员和地勤人员)、管理机场大门等。
代码翻译器104可以被配置为利用多种不同编程语言的知识,以便在编辑、更新、复制、迁移或以其他方式作用于其代码库1121-P时帮助客户端1101-P在编程语言之间进行翻译。例如,代码翻译器104可以被配置为将代码片段从一种编程语言翻译为另一种编程语言(例如,在运行中),使得熟练第一编程语言的开发者可以以第一编程语言查看和/或编辑以不太熟悉的第二编程语言最初编写的源代码。
在各种实施方式中,代码知识系统102可以包括机器学习(图1中的“ML”)数据库104,其包括指示一个或更多个经训练的机器学习模型1061-N的数据。这些经训练的机器学习模型1061-N可以采取将在下面更详细描述的各种形式,包括但不限于生成对抗网络(“GAN”)组件(诸如鉴别器和/或生成器)、基于图的网络(诸如图神经网络(“GNN”)、图注意力神经网络(“GANN”)或图卷积神经网络(“GCN”))、序列到序列模型(诸如编码器-解码器)、各种风格的递归神经网络(“RNN”,例如长短期记忆或“LSTM”、门递归单元或“GRU”等)、以及可以应用于促进本公开的所选方面的任何其他类型的机器学习模型。
在一些实施方式中,代码知识系统102也可以访问一个或更多个编程语言专用代码库1081-M。在一些实施方式中,这些编程语言专用代码库1081-M可以用于例如训练机器学习模型1061-N中的一个或更多个。在一些这样的实施方式中,并且如下面将进一步详细描述的,编程语言专用代码库1081-M可以与其他数据组合使用以训练机器学习模型1061-N,诸如其他编程语言专用代码库108,以联合学习编程语言之间的变换。
在各种实施方式中,希望使得能够以不同于最初用于编写源代码的编程语言(或多个)的编程语言(或多个)操纵其代码库112的客户端110可以与托管代码知识系统102的实体(图1中未示出)建立关系。当开发者希望查看/编辑实体的代码库112的源代码片段但不熟悉本原编程语言时,代码翻译器104可以提供被翻译为开发者偏爱的目标编程语言的源代码片段的版本。在一些这样的实施方式中,代码翻译器104可以在运行中,例如,实时地,生成翻译后的源代码片段。在其他实施方式中,代码翻译器104可以例如以批处理模式操作,以将实体的代码库112的所有或选择部分抢先翻译为目标编程语言。在开发者然后编辑翻译后的源代码片段的一些实施方式中,假设其他必要的基础设施就位,编辑后的版本可以被翻译回本原编程语言或留在新的目标编程语言中。
图2是在机器学习模型1061-N的训练期间可以全部或部分地由代码知识系统102实现的示例处理流程的框图。一旦被训练,这些模型就有助于第一编程语言(图2中的左侧)和第二编程语言(图2中的右侧)之间的翻译。图2中描绘的各种组件可以由代码知识系统102实现,例如作为代码翻译器104,或者与代码知识系统102分开实现。
从左上开始,第一编程语言源代码(图2中的“第一PL SC”)片段220的代码库可以包括多个源代码文件、库等,包括由人类以第一编程语言编写的源代码的样本。同样地,在右上,第二编程语言源代码(图2中的“第二PL SC”)片段220的代码库可以包括多个源代码文件、库等,包括由人类以第二编程语言编写的源代码的样本。
在训练期间,可以例如从代码库220或从另一源获得由人类开发者编写的特定第一编程语言片段A 222。可以处理该特定第一编程语言片段A 222以生成特定第一编程语言片段A 222的第一“低级表示”。该低级表示可以采取各种形式,诸如目标代码或二进制代码、字节码或在软件开发栈中的人类编写的源代码“之下”的任何其他形式。在图2中,例如,使用第一编程语言编译器224将特定第一编程语言片段A 222编译成第一编程语言二进制和/或字节码2261。
在一些实施方式中,第一编程语言二进制和/或字节码2261可以例如由中间表示(“IR”)翻译器228翻译为第二编程语言二进制和/或字节码2301。在其他实施方式中,IR翻译器228可以包括将第一编程语言源代码片段A222直接翻译为第二编程语言二进制和/或字节码2301的“内置”编译器。在这样的实施方式中,第一编程语言编译器224可以被省略和/或并入IR翻译器228中。例如,IR翻译器可以采取低级Java虚拟机(“LLJVM”)的形式,其将例如C或C++代码(例如,222)转换为可由Java虚拟机(“JVM”)执行的字节码(例如,2301)。
无论如何,一旦生成第二编程语言二进制/字节码2301,它就可以例如由第二编程语言反编译器232处理,以生成第二编程语言“机器友好”(图2中的“MF”)或“非自然”源代码片段234。第二编程语言机器友好源代码片段234可以是第二编程语言的源代码的准确和/或功能性版本。它可以遵守与第二编程语言相关联的各种语法和/或其他约束。然而,第二编程语言机器友好源代码片段234对于人类(例如,开发者)而言可能难以读取,这是因为它是机器生成的。因此,它在本文中被描述为“机器友好的”,这是因为它可能是“非自然的”,以至于人类开发者至少不能有效地理解它。
在一些实施方式中,可以向(across)第二编程语言生成器236应用第二编程语言机器友好源代码片段234作为输入。第二编程语言生成器236可以是能够采取各种形式的机器学习模型,诸如GNN、GANN、GCN、序列到序列模型、RNN、LSTM、GRU等。在一些实施方式中,第二编程语言生成器236也可以接收第一编程语言源代码片段A 222作为输入,第一编程语言源代码片段A 222可以与第二编程语言机器友好源代码片段234一起作为输入被应用。因此,在训练期间,第二编程语言生成器236有效地“学习”以充当词汇和/或风格“提取器”。
第二编程语言生成器236的输出可以是指示第二编程语言“合成自然”源代码片段238的数据。第二编程语言合成自然源代码片段238(以及图2中的其他类似片段,诸如246)之所以被如此命名,是因为它旨在是“人类友好的”或“人类可读的”,即,人类开发者容易理解。例如,假设第二编程语言生成器236被充分训练,则其输出应当包括从第一编程语言源代码片段A 222和/或从使用其他源代码片段220的先前训练实例中提取的风格和/或词汇。通常,“指示”源代码片段的“数据”可以指源代码片段本身或源代码的其他表示,诸如抽象语法树(“AST”)、潜在空间嵌入等。
然而,为了训练第二编程语言生成器236以确保其输出将是精通第二编程语言的人类可理解的,可以提供第二编程语言鉴别器240。可以训练第二编程语言鉴别器240以生成将第二编程语言合成自然源代码片段238分类为合成的或人工生成的输出。在各种实施方式中,可以部分地使用第二编程语言源代码片段的语料库或代码库242来训练第二编程语言鉴别器240。例如,在训练期间,第二编程语言鉴别器240可以替代地使用“真值”第二编程语言源代码片段242和第二编程语言合成自然源代码片段238形式的“合成”源代码片段来训练。
可以基于第二编程语言鉴别器240的输出的对抗损失来训练第二编程语言鉴别器240和/或第二编程语言生成器236。假设第二编程语言鉴别器240的输出将输入片段238正确地分类为合成的。这是第二编程语言生成器236未能“欺骗”第二编程语言鉴别器240的示例。这可以用作第二编程语言鉴别器240的正(或至少中性)训练示例,同时用作第二编程语言生成器236的负训练示例。
作为另一示例,假设第二编程语言鉴别器240的输出将输入片段238错误地分类为真实的,而实际上它是由第二编程语言生成器236合成生成的。这是第二编程语言生成器236成功地“欺骗”第二编程语言鉴别器240的示例。因此,这可以是第二编程语言鉴别器240的负训练示例,并且在一些情况下可以用作第二编程语言生成器236的正训练示例。
作为又一示例,假设第二编程语言鉴别器240的输出将“真值”或“真实”第二编程语言源代码片段(例如,来自242)错误地分类为“合成的”。这可以用作第二编程语言鉴别器240的负训练示例。通常,当机器学习模型在本文中被描述为“被训练”时,应当理解,可以使用各种技术来将这些模型训练为适用的,诸如上述梯度下降、反向传播等。
利用图2中描绘的组件,在一些实施方式中,还可以训练一个或更多个机器学习模型以从第二编程语言翻译为第一编程语言。在一些这样的实例中,这些组件可以被实现为CycleGAN,使得不需要任一种语言的代码片段与另一种语言的类似功能的代码片段精确配对。此外,CycleGAN可以使能大规模无监督训练,这是因为源代码语料库220和242(其可能是巨大的)都能够用作如本文所述的训练示例。
例如,在一些实施方式中,可以重新使用第二编程语言合成自然源代码片段(或多个)238来训练与第一编程语言相关联的附加GAN组件,诸如第一编程语言生成器244和/或第一编程语言鉴别器248。在图2中,第二编程语言合成自然源代码片段238例如由第二编程语言编译器250处理成另一低级表示,其在图2中采取第二编程语言二进制和/或字节码2302的形式。该第二编程语言二进制和/或字节码2302可以例如由IR翻译器228翻译为第一编程语言二进制和/或字节码2262。然后可以例如由第一编程语言反编译器252将第一语言二进制和/或字节码2262处理成第一编程语言机器友好(或非自然)源代码片段254。
类似于第二编程语言生成器236的输入,在图2中,可以向第一编程语言生成器244应用第一编程语言机器友好源代码片段254和第二编程语言合成自然源代码片段238(起到与先前示例中第一编程语言源代码片段A 222类似的作用)两者,作为输入。第一编程语言生成器244可以生成指示第一编程语言合成自然源代码片段246的输出。
类似于与第二编程语言有关的示例,可以向第一编程语言鉴别器248应用第一编程语言合成自然源代码片段246作为输入以生成输出。该输出可以将第一编程语言合成自然源代码片段246分类为合成的或人工生成的。如前所述,可以基于第一编程语言鉴别器248的输出的对抗损失来训练第一编程语言鉴别器248和第一编程语言生成器244中的一者或两者。
在一些实施方式中,可以基于第一编程语言源代码片段A 222与第一编程语言合成自然源代码片段246之间的相似性来进一步训练第一编程语言鉴别器248和/或第一编程语言生成器244。在一些情况下,这种相似性可以被称为循环一致性损失或恢复损失254。可以以各种方式确定循环一致性损失或恢复损失254。在一些实施方式中,可以基于第一编程语言源代码片段A222与第一编程语言合成自然源代码片段246之间的编辑距离来确定循环一致性损失或恢复损失254。在其他实施方式中,它可以是潜在空间中从222、246生成的嵌入之间的距离。在其他实施方式中,可以采取其他形式。
上文所描述和图2中所描绘的操作并不意味着是限制性的。例如,它们可以相反地执行。例如,可以使用人类编写的第二编程语言源代码片段242,而不是由第二编程语言生成器238生成的第二编程语言合成自然源代码片段238,来训练第一编程语言生成器244和/或第一编程语言鉴别器248。
一旦训练出图2中的GAN组件,它们就可以被用于各种目的。例如,第二编程语言生成器236可以用于将第一编程语言的源代码片段(或指示源代码片段的数据,诸如潜在空间嵌入或AST)翻译为第二编程语言源代码片段。类似地,第一编程语言生成器244可以被用于将第二编程语言的源代码片段翻译为第一编程语言源代码片段。在一些实施方式中,可以针对每对编程语言训练单独的GAN。
如前所述,在一些实施方式中,可以使用对图输入进行操作的机器学习模型来实现第一编程语言生成器244、第一编程语言鉴别器248、第二编程语言生成器236和/或第二编程语言鉴别器240。例如,对于GNN,图输入可以采用AST的形式。可以为AST的每个节点提取特征(其可以在训练期间被手动选择或学习),以生成每个节点的特征向量。每个AST的节点可以表示变量、对象或其他编程构造。因此,为节点生成的特征向量的特征可以包括诸如变量类型(例如,int(整型)、float(浮点)、string(串)、pointer(指针)等)、名称、作为操作数作用于变量的运算符(或多个)等的特征。节点在任何给定时间点的特征向量可以被认为是该节点的“状态”。同时,AST的每个边可以被分配机器学习模型,例如特定类型的机器学习模型或在特定数据上训练的特定机器学习模型。
然后,对于一系列时间步骤中的每个时间步骤,每个节点的特征向量或状态可以沿着边/机器学习模型传播到它们的邻居节点,例如,作为到潜在空间的投影。在一些实施方式中,在每个时间步骤到给定节点的传入节点状态可以例如与给定节点的当前状态彼此求和(其是顺序不变的)。当更多的时间步骤流逝时,影响AST的给定节点的邻居节点的半径增加。
直观地,关于邻居节点的知识被递增地“嵌入(bake into)”到每个节点的状态中,当机器学习模型被越来越多地迭代时,关于越来越远的邻居的更多知识在给定节点的状态中被累积。在一些实施方式中,可以在执行某个期望数量的迭代之后达到AST的所有节点的“最终”状态。该迭代数量可以是GNN的超参数。在一些这样的实施方式中,这些最终状态可以被求和以产生AST的整体状态或嵌入。
当使用GNN实现生成器(无论是236还是244)时,可以向一个或更多个额外机器学习模型和/或其他处理流应用AST的整体状态或嵌入作为输入,以生成合成自然源代码。例如,可以训练编码器-解码器网络或“自动编码器”,使得编码器部分从输入AST或源代码生成潜在空间嵌入,并且解码器部分将该潜在空间嵌入翻译回原始输入。一旦训练出这样的编码器-解码器网络,解码器部分就可以被分离并应用于由用于生成器(例如,236、244)的GNN生成的潜在空间嵌入,以生成AST和/或源代码。在至少部分地使用GNN来实现鉴别器(例如,240、248)的一些实施方式中,GNN可以与预测层——例如,softmax层或sigmoid函数层——耦合,预测层基于由鉴别器生成的潜在空间嵌入来输出是或否(或者1或0、或者概率)。
本文描述的技术可以用于向例如操作客户端设备1101-P的程序员提供促进在源编程语言和/或一种或更多种目标编程语言之间的翻译(并且在许多情况下再次翻译回)的工具。这些工具可以例如作为与软件开发工具相关联的特征或插件来提供。这些工具可以使程序员能够将他们的源代码翻译为另一编程语言,或者以他们被训练来开发源代码的目标编程语言来看以另一种可能不熟悉的编程语言编写的源代码。
图3描绘了如何将以一种编程语言编写的代码片段翻译为以另一种编程语言渲染的合成自然代码片段的示例。在该示例中,基础源代码片段360以Java编写并打印整数1到5。在底部,描绘了图形用户界面(“GUI”)362,其可以被呈现给不熟悉Java但具有另一编程语言的专业知识的开发者。在该示例中,以Java编写的代码片段360由代码翻译器104转换为Python并渲染为GUI 362的一部分。以这种方式,操作GUI 362的开发者可以以他或她更熟悉的编程语言来查看源代码。在一些情况下,开发者可以能够编辑翻译后的源代码。在一些这样的实施方式中,由开发者进行的编辑(即,对图3中的Python代码进行的编辑)可以在被存储和/或更永久地并入到代码库中之前被翻译回Java。在其他实施方式中,编辑后的Python代码可以被并入到代码库中。
在一些实施方式中,原始源代码360可以在被发送到渲染GUI 362的计算设备(未描绘)之前被发送到代码知识系统102以供代码翻译器104进行翻译。在其他实施方式中,GUI 362可以是例如使用插件或内置功能在本地执行编程语言翻译的软件开发应用的一部分。图3的场景仅用于说明性目的。可以使用本文描述的技术针对任何数量的应用在编程语言之间翻译源代码。
例如,假设以基础编程语言训练的第一用户将基础编程语言的源代码片段发送给第二用户,例如,作为附件或在电子邮件的正文中。在一些实施方式中,基础编程语言的源代码可以在到第二用户的途中例如由代码翻译器104翻译为目标编程语言。附加地或可替代地,在一些实施方式中,第二用户的电子邮件应用(或存储第二用户的电子邮件的电子邮件服务器)可以具有配置有本公开的所选方面的插件。
在一些实施方式中,单个用户可以操作软件开发应用以查看以用户不熟悉的多种不同编程语言编写的多个不同源代码片段。在一些这样的示例中,可以使用多个相应的机器学习模型(例如,生成器)来将源代码片段从多种不同的编程语言翻译为用户更好理解的语言(或多种语言)。
在一些实施方式中,本文描述的技术可以被用于将以一种编程语言编写的源代码自动转换为另一编程语言的源代码,而不必如前所述那样向用户呈现翻译后的源代码。例如,公司可以决定将现有代码库112重构平台(replatform)为新的编程语言,例如,以获得原始编程语言不可用的新功能和/或技术益处(例如,安全特征、处理速度特征等)。这样的公司可以能够部署本文描述的技术,或者请求与代码知识系统102相关联的实体部署本文描述的技术,以将代码库112的全部或一部分从一种编程语言自动转换为另一编程语言。
图4是示出根据本文公开的实施方式训练各种GAN组件以在两种编程语言之间进行翻译的示例方法400的流程图。为了方便起见,参考执行操作的系统来描述流程图的操作。该系统可以包括各种计算机系统的各种组件,诸如代码知识系统102的一个或更多个组件。此外,虽然以特定顺序示出了方法400的操作,但这并不意味着限制。可以重新排序、省略或添加一个或更多个操作。
在块402处,系统可以处理以基础编程语言(例如,C、C++)编程的源代码片段,以生成第一低级表示(例如,字节码和/或二进制/目标代码、潜在空间嵌入等)。例如,在图2中,第一编程语言编译器224将第一编程语言源代码片段A 222编译成第一编程语言二进制/字节码2261。在一些情况下,第一编程语言二进制/字节码2261然后可以例如由IR翻译器228翻译为第二编程语言二进制/字节码2301。附加地或可替代地,在IR翻译器228具有和/或是编译器(例如,LLJVM)的一些实施方式中,IR翻译器228可以直接将第一编程语言源代码片段A222处理成第二编程语言二进制/字节码2301。
在块404处,系统可以反编译或以其他方式处理第一低级表示以生成非自然源代码片段(例如,以目标编程语言)。例如,在图2中,第二编程语言反编译器232反编译第二编程语言二进制/字节码2301,以生成第二编程语言机器友好源代码片段234。
在块406处,系统可以向目标编程语言生成器应用目标编程语言的非自然源代码片段作为输入,以生成目标编程语言的合成自然源代码片段。例如,在图2中,第二编程语言机器友好源代码片段234被向第二编程语言生成器236应用为输入。在一些实施方式中,还与目标编程语言的非自然源代码片段一起向目标语言生成器应用以基础编程语言编程的源代码片段,作为输入。在图2中,元素234和222两者被向第二编程语言生成器236应用作为输入,以生成第二编程语言合成自然源代码片段238。
在块408处,系统可以向目标编程语言鉴别器应用目标语言的合成自然源代码片段作为输入,以生成将合成自然源代码片段分类为合成的或人工生成的输出。在图2中,例如,第二编程语言合成自然源代码片段238向第二编程语言鉴别器240被应用作为输入,以生成将第二编程语言合成自然源代码片段238分类为合成的(机器生成的)或真实的(人类生成的)的输出。在一些实施方式中,第二编程语言鉴别器240或本文描述的其他鉴别器还可以生成指示输入(例如,第二编程语言合成自然源代码片段238)是否符合给定编程语言的编程语言“风格”或语言内在本质的输出。
在块410处,系统可以基于目标编程语言鉴别器的输出的对抗损失来训练目标编程语言鉴别器和目标编程语言生成器中的一者或两者。例如,在图2中,基于由第二编程语言生成器240输出的分类的正确性或不正确性来训练第二编程语言鉴别器240和/或第二编程语言生成器236中的一者或两者。
如先前关于图2所描述的,可以执行与图4中描绘的操作类似的操作以训练第一编程语言生成器244和/或第一编程语言鉴别器248。此外,在一些实施方式中,第一编程语言合成自然源代码片段246可以向第二编程语言生成器236、例如与第二编程语言机器友好源代码片段234一起被应用作为输入以用于训练目的(这是除了用于训练236的元素222和234的组合之外或代替用于训练236的元素222和234的组合)。
图5是示出根据本文公开的实施方式的使用GAN机器学习模型进行推断的示例方法500的流程图,该GAN机器学习模型使用诸如关于图4描述的那些技术训练。为了方便起见,参考执行操作的系统来描述流程图的操作。该系统可以包括各种计算机系统的各种组件,诸如代码知识系统102的一个或更多个组件。此外,虽然方法500的操作以特定顺序示出,但这并不意味着限制。可以重新排序、省略或添加一个或更多个操作。
在块502处,系统可以处理以基础编程语言编程的源代码片段以生成第一低级表示。例如,第一编程源代码片段可以由第一编程语言编译器224编译以生成第一编程语言二进制/字节码2261,其可以被IR翻译器228翻译以生成第二编程语言二进制/字节码2301。可替代地,IR翻译器228可以直接处理第一编程语言片段以生成第二编程语言二进制/字节码2301。
在块504处,系统可以处理,例如,反编译,第一低级表示以生成目标编程语言的非自然的或“机器友好的”源代码片段。例如,第二编程语言反编译器232可以反编译第二编程语言二进制/字节码2301,以生成第二编程语言机器友好源代码片段234。
在块506处,系统可以向目标编程语言生成器应用目标编程语言的非自然源代码片段和以基础编程语言编程的源代码片段作为输入,以生成目标编程语言的合成自然源代码片段。例如,可以向第二编程语言生成器236应用第一编程语言片段222和第二编程语言机器友好源代码片段234作为输入。在一些实施方式中,在推断期间,可以省略原始的第一编程语言片段(其将被翻译为第二编程语言),使得仅第二编程语言机器友好源代码片段234被向第二编程语言生成器236应用。第二编程语言生成器236的输出可以是第二编程语言合成自然源代码片段238。
在块508处,系统可以渲染目标编程语言的合成自然源代码片段,例如作为软件开发应用的输出。例如,并且如图3所示,第二编程语言合成自然源代码片段238可以被全部或部分地渲染在与例如在客户端的计算系统110上运行的软件开发应用相关联的GUI中。
图6是可以可选地用于执行本文描述的技术的一个或更多个方面的示例计算设备610的框图。计算设备610通常包括经由总线子系统612与多个外围设备通信的至少一个处理器614。这些外围设备可以包括存储子系统624(包括例如存储器子系统625和文件存储子系统626)、用户接口输出设备620、用户接口输入设备622和网络接口子系统616。输入和输出设备允许用户与计算设备610交互。网络接口子系统616提供到外部网络的接口,并且耦接到其他计算设备中的对应接口设备。
用户接口输入设备622可以包括键盘、指示设备(诸如鼠标、轨迹球、触摸板或图形输入板)、扫描仪、并入显示器中的触摸屏、音频输入设备(诸如语音识别系统、麦克风)和/或其他类型的输入设备。通常,术语“输入设备”的使用旨在包括将信息输入到计算设备610中或通信网络上的所有可能类型的设备和方式。
用户接口输出设备620可以包括显示子系统、打印机、传真机或诸如音频输出设备的非视觉显示器。显示子系统可以包括阴极射线管(CRT)、诸如液晶显示器(LCD)的平板设备、投影设备或用于创建可见图像的一些其他机制。显示子系统还可以诸如经由音频输出设备提供非视觉显示。通常,术语“输出设备”的使用旨在包括从计算设备610向用户或另一机器或计算设备输出信息的所有可能类型的设备和方式。
存储子系统624存储提供本文描述的一些或所有模块的功能的编程和数据结构。例如,存储子系统624可以包括用于执行图4-5的方法的所选方面以及实现图1-2中描绘的各种组件的逻辑。
这些软件模块通常由处理器614单独执行或与其他处理器组合执行。在存储子系统624中使用的存储器625能够包括多个存储器,包括用于在程序执行期间存储指令和数据的主随机存取存储器(RAM)630和其中存储固定指令的只读存储器(ROM)632。文件存储子系统626能够为程序和数据文件提供持久存储,并且可以包括硬盘驱动器、软盘驱动器以及相关联的可移除介质、CD-ROM驱动器、光盘驱动器或可移除介质盒。实现某些实施方式的功能的模块可以由文件存储子系统626存储在存储子系统624中,或者存储在可由处理器614(或多个)访问的其他机器中。
总线子系统612提供用于使计算设备610的各种组件和子系统按预期彼此通信的机制。尽管总线子系统612被示意性地示出为单个总线,但是总线子系统的替代实施方式可以使用多个总线。
计算设备610能够是各种类型,包括工作站、服务器、计算集群、刀片服务器、服务器群或任何其他数据处理系统或计算设备。由于计算机和网络的不断变化的性质,图6中描绘的计算设备610的描述仅旨在作为用于示出一些实施方式的目的的具体示例。计算设备610的许多其他配置可能具有比图6中描绘的计算设备更多或更少的组件。
虽然本文已经描述和示出了若干实施方式,但是可以利用用于执行功能和/或获得结果和/或本文描述的一个或更多个优点的各种其他装置和/或结构,并且这些变化和/或修改中的每一个被认为是在本文描述的实施方式的范围内。更一般地,本文描述的所有参数、尺寸、材料和配置旨在是示例性的,并且实际参数、尺寸、材料和/或配置将取决于使用教导的一个或更多个具体应用。本领域技术人员将认识到或能够使用不超过常规实验来确定本文描述的具体实施方式的许多等同物。因此,应当理解,前述实施方式仅作为示例呈现,并且在所附权利要求及其等同物的范围内,可以以不同于具体描述和要求保护的方式来实践实施方式。本公开的实施方式涉及本文描述的每个单独的特征、系统、物品、材料、套件和/或方法。另外,如果这样的特征、系统、物品、材料、套件和/或方法不相互矛盾,则两个或更多个这样的特征、系统、物品、材料、套件和/或方法的任何组合包括在本公开的范围内。
Claims (20)
1.一种使用一个或更多个处理器实现的方法,包括:
处理以基础编程语言编程的源代码片段以生成第一低级表示;
反编译第一低级表示以生成目标编程语言的非自然源代码片段;
向目标编程语言生成器应用目标编程语言的非自然源代码片段作为输入,以生成目标编程语言的合成自然源代码片段;
向目标编程语言鉴别器应用目标语言的合成自然源代码片段作为输入,以生成将合成自然源代码片段分类为合成的或人工生成的输出;以及
基于目标编程语言鉴别器的输出的对抗损失来训练目标编程语言鉴别器和目标编程语言生成器中的一者或两者。
2.根据权利要求1所述的方法,其中,与目标编程语言的非自然源代码片段一起,也向目标语言生成器应用以基础编程语言编程的源代码片段作为输入。
3.根据权利要求1或2所述的方法,还包括:
向基础编程语言生成器应用目标编程语言的合成自然源代码片段作为输入,以生成基础编程语言的合成自然源代码片段;
向基础编程语言鉴别器应用基础编程语言的合成自然源代码片段作为输入,以生成将基础编程语言的合成自然源代码片段分类为合成的或人工生成的输出;以及
基于基础编程语言鉴别器的输出的对抗损失来训练基础编程语言鉴别器和基础编程语言生成器中的一者或两者。
4.根据权利要求3所述的方法,还包括:
将目标编程语言的合成自然源代码片段编译成第二低级表示;以及
反编译第二低级表示以生成基础编程语言的非自然源代码片段;
其中,与目标编程语言的合成自然源代码片段一起,也向基础编程语言生成器应用基础编程语言的非自然源代码片段,作为输入。
5.根据权利要求3或4所述的方法,其中,基于以基础编程语言编程的源代码片段与以基础编程语言编程的合成自然源代码片段之间的相似性来进一步训练基础编程语言鉴别器和基础编程语言生成器中的一者或两者。
6.根据权利要求5所述的方法,其中,所述相似性包括编辑距离。
7.根据任一前述权利要求所述的方法,其中,第一低级表示包括目标代码。
8.根据任一前述权利要求所述的方法,其中,第一低级表示包括字节码。
9.一种使用一个或更多个处理器实现的方法,包括:
处理以基础编程语言编程的源代码片段以生成第一低级表示;
反编译第一低级表示以生成目标编程语言的非自然源代码片段;
向目标编程语言生成器应用目标编程语言的非自然源代码片段和以基础编程语言编程的源代码片段作为输入,以生成目标编程语言的合成自然源代码片段;以及
渲染目标编程语言的合成自然源代码片段作为软件开发应用的输出。
10.根据权利要求9所述的方法,其中,与目标编程语言的非自然源代码片段一起,也向目标语言生成器应用以基础编程语言编程的源代码片段,作为输入。
11.根据权利要求9或10所述的方法,其中,第一低级表示包括目标代码。
12.根据权利要求9或10所述的方法,其中,第一低级表示包括字节码。
13.一种包括一个或更多个处理器和存储指令的存储器的系统,响应于由所述一个或更多个处理器执行所述指令,所述指令使得所述一个或更多个处理器:
处理以基础编程语言编程的源代码片段以生成第一低级表示;
处理第一低级表示以生成目标编程语言的非自然源代码片段;
向目标编程语言生成器应用目标编程语言的非自然源代码片段作为输入,以生成目标编程语言的合成自然源代码片段;
向目标编程语言鉴别器应用目标语言的合成自然源代码片段作为输入,以生成将合成自然源代码片段分类为合成的或人工生成的输出;以及
基于目标编程语言鉴别器的输出的对抗损失来训练目标编程语言鉴别器和目标编程语言生成器中的一者或两者。
14.根据权利要求13所述的系统,其中,与目标编程语言的非自然源代码片段一起,也向目标语言生成器应用以基础编程语言编程的源代码片段,作为输入。
15.根据权利要求13或14所述的系统,还包括指令,以:
向基础编程语言生成器应用目标编程语言的合成自然源代码片段作为输入,以生成基础编程语言的合成自然源代码片段;
向基础编程语言鉴别器应用基础编程语言的合成自然源代码片段作为输入,以生成将基础编程语言的合成自然源代码片段分类为合成的或人工生成的输出;以及
基于基础编程语言鉴别器的输出的对抗损失来训练基础编程语言鉴别器和基础编程语言生成器中的一者或两者。
16.根据权利要求15所述的系统,还包括指令,以:
将目标编程语言的合成自然源代码片段处理成第二低级表示;以及
处理第二低级表示以生成基础编程语言的非自然源代码片段;
其中,与目标编程语言的合成自然源代码片段一起,也向基础编程语言生成器应用基础编程语言的非自然源代码片段,作为输入。
17.根据权利要求15或16所述的系统,其中,基于以基础编程语言编程的源代码片段与基础编程语言的合成自然源代码片段之间的相似性来进一步训练基础编程语言鉴别器和基础编程语言生成器中的一者或两者。
18.根据权利要求17所述的系统,其中,所述相似性包括编辑距离。
19.根据权利要求13-18中任一项所述的系统,其中,第一低级表示包括目标代码。
20.根据权利要求13-18中任一项所述的系统,其中,第一低级表示包括字节码。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/506,161 US11842174B2 (en) | 2019-07-09 | 2019-07-09 | Translating between programming languages using machine learning |
US16/506,161 | 2019-07-09 | ||
PCT/US2020/041413 WO2021007437A1 (en) | 2019-07-09 | 2020-07-09 | Translating between programming languages using machine learning |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114207576A true CN114207576A (zh) | 2022-03-18 |
Family
ID=71944335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080050090.9A Pending CN114207576A (zh) | 2019-07-09 | 2020-07-09 | 使用机器学习在编程语言之间进行翻译 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11842174B2 (zh) |
EP (1) | EP3973381A1 (zh) |
CN (1) | CN114207576A (zh) |
WO (1) | WO2021007437A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11334360B2 (en) * | 2020-05-06 | 2022-05-17 | Deepbits Technology Inc. | High throughput disassembly system for executable code and applications |
US20210357210A1 (en) * | 2020-05-15 | 2021-11-18 | Microsoft Technology Licensing, Llc. | Automatic generation of code documentation |
US11487522B1 (en) * | 2020-06-26 | 2022-11-01 | X Development Llc | Training and/or using neural network model to generate target source code from lower-level representation |
US11875141B2 (en) * | 2020-11-20 | 2024-01-16 | Infosys Limited | System and method for training a neural machine translation model |
US11481202B2 (en) * | 2021-02-16 | 2022-10-25 | X Development Llc | Transformation templates to automate aspects of computer programming |
CN113342318B (zh) * | 2021-04-19 | 2022-06-10 | 山东师范大学 | 基于多视图代码特征的细粒度代码自动生成方法及系统 |
US11429360B1 (en) * | 2021-05-17 | 2022-08-30 | International Business Machines Corporation | Computer assisted programming with targeted visual feedback |
EP4113285A1 (en) | 2021-06-29 | 2023-01-04 | Tata Consultancy Services Limited | Method and system for translation of codes based on semantic similarity |
US11847436B2 (en) * | 2022-01-25 | 2023-12-19 | Hewlett Packard Enterprise Development Lp | Machine learning (ML) model-based compiler |
US20230325164A1 (en) * | 2022-04-11 | 2023-10-12 | Google Llc | Translating between programming languages independently of sequence-to-sequence decoders |
US20230350657A1 (en) * | 2022-04-28 | 2023-11-02 | Google Llc | Translating large source code using sparse self-attention |
US20240086164A1 (en) * | 2022-09-08 | 2024-03-14 | Google Llc | Generating synthetic training data for programming language translation |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8332828B2 (en) | 2002-11-20 | 2012-12-11 | Purenative Software Corporation | System for translating diverse programming languages |
US8984496B2 (en) * | 2004-09-20 | 2015-03-17 | The Mathworks, Inc. | Extensible internal representation of systems with parallel and sequential implementations |
US7779396B2 (en) | 2005-08-10 | 2010-08-17 | Microsoft Corporation | Syntactic program language translation |
US7886272B1 (en) * | 2006-03-16 | 2011-02-08 | Avaya Inc. | Prioritize code for testing to improve code coverage of complex software |
US7921416B2 (en) | 2006-10-20 | 2011-04-05 | Yahoo! Inc. | Formal language and translator for parallel processing of data |
US8645932B2 (en) * | 2010-09-19 | 2014-02-04 | Micro Focus (US). Inc. | Control flow analysis methods and computing devices for converting COBOL-sourced programs to object-oriented program structures |
US8806452B2 (en) | 2011-11-10 | 2014-08-12 | International Business Machines Corporation | Transformation of computer programs and eliminating errors |
US9740463B2 (en) * | 2015-08-10 | 2017-08-22 | Oracle International Corporation | Mechanism for increasing the performance of multiple language programs by inserting called language IR into the calling language |
US9971581B1 (en) | 2015-12-28 | 2018-05-15 | Wells Fargo Bank, N.A. | Programming language conversion |
US9530016B1 (en) * | 2016-01-29 | 2016-12-27 | International Business Machines Corporation | Using source taint analysis to reduce false positives in an advanced persistent threat (APT) protection solution |
CN109844741B (zh) * | 2017-06-29 | 2023-09-01 | 微软技术许可有限责任公司 | 在自动聊天中生成响应 |
KR102284796B1 (ko) * | 2019-05-20 | 2021-08-02 | 아주대학교 산학협력단 | 에지(edge) 이미지으로부터 컬러(color) 이미지를 생성하기 위한 GAN(generative adversarial networks) 기반 시스템 |
US11243746B2 (en) * | 2019-07-01 | 2022-02-08 | X Development Llc | Learning and using programming styles |
-
2019
- 2019-07-09 US US16/506,161 patent/US11842174B2/en active Active
-
2020
- 2020-07-09 EP EP20750940.7A patent/EP3973381A1/en active Pending
- 2020-07-09 WO PCT/US2020/041413 patent/WO2021007437A1/en unknown
- 2020-07-09 CN CN202080050090.9A patent/CN114207576A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US11842174B2 (en) | 2023-12-12 |
WO2021007437A1 (en) | 2021-01-14 |
US20210011694A1 (en) | 2021-01-14 |
EP3973381A1 (en) | 2022-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114207576A (zh) | 使用机器学习在编程语言之间进行翻译 | |
JP7324865B2 (ja) | コード変更の自動識別 | |
US20210192321A1 (en) | Generation and utilization of code change intents | |
AU2020202658B2 (en) | Automatically detecting user-requested objects in images | |
US11169786B2 (en) | Generating and using joint representations of source code | |
US11748065B2 (en) | Learning and using programming styles | |
US11048482B2 (en) | Automated identification of code changes | |
US20220188081A1 (en) | Generation and/or recommendation of tools for automating aspects of computer programming | |
US11656867B2 (en) | Conditioning autoregressive language model to improve code migration | |
US11693637B1 (en) | Using natural language latent representation in automated conversion of source code from base programming language to target programming language | |
KR20210149530A (ko) | 이미지 분류 모델 학습 방법 및 이를 수행하기 위한 장치 | |
US11775271B1 (en) | Annotations for developers | |
KR20220033652A (ko) | 기계 번역의 학습 데이터 구축을 위한 방법 | |
Cromieres | Kyoto-nmt: a neural machine translation implementation in chainer | |
US20230325164A1 (en) | Translating between programming languages independently of sequence-to-sequence decoders | |
US20230350657A1 (en) | Translating large source code using sparse self-attention | |
Pham et al. | Application of Natural Language Processing Towards Autonomous Software Testing | |
US11893384B2 (en) | Refactoring and/or rearchitecting source code using machine learning | |
US12001821B2 (en) | Generation and/or recommendation of tools for automating aspects of computer programming | |
US20240184555A1 (en) | Iterative neural code translation | |
US20240184556A1 (en) | Hierarchical translation between low-level programming languages and high-level programming languages | |
US20240070495A1 (en) | Explainability for artificial intelligence-based decisions | |
US20240086164A1 (en) | Generating synthetic training data for programming language translation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230506 Address after: California, USA Applicant after: Google Inc. Address before: California, USA Applicant before: X Development Co.,Ltd. |