没有合适的资源?快使用搜索试试~ 我知道了~
巴黎多菲纳大学研究生院2022年论文评审
在巴黎多菲纳在与Meta AI编程语言支持者巴蒂斯特·罗齐尔2022年7月12日第543号研究生院决策、组织、社会和交换科学专业性信息学评审团组成:阿尔伯特·科恩研究科学家,谷歌大脑研究总监,Inria报告员总统陪审团弗朗索瓦·弗勒雷日内瓦大学教授报告员雷切尔·鲍登Inria Paris审查员罗南·科洛伯特苹果研究科学家检查员伊莉莎·弗罗蒙特雷恩第一审查员特里斯坦·卡泽纳夫巴黎多菲纳大学教授博士生导师奥利维尔·泰陶德元人工智能研究论文指导1谢谢你J’aimerais 感谢我还要感谢特里斯坦,我的论文导师谢谢你花时间指导我,你的建议和还要感谢我在Facebook的论文导师:奥利维尔。感谢你的专业和科学建议,他们谢谢你在我的论文中一直表现出的善意你一直都很细心,最关心的是我的幸福和职业成功。我还要特别感谢Guillaume,他是我在编程语言机器学习方面工作的第三位论文导师,在办公室还开着的时候,他教我如何在桌上足球方面做得更好感谢Marie-Anne,她是我的主要贡献者,也是TransCoder和DOBF的主要贡献者之感谢Marc,我现在和他一起工作。还要感谢Gabriel,他也感谢我所有的其他同事。这群博士生,感谢我们所有的讨论,无论是在办公室,在桌上足球桌旁,感谢Jérémy,他从我的论文一开始就帮助我提高了效率 感谢François与我们进行了有趣的讨论并分享了您的经验。谢谢休指导我,给我清晰和可操作的反馈和建议,总是用他的笑话和永久的好心情为我欢呼。2感谢我所有的合著者:杰,马克,卡米尔,洛维克,马特奥,亚历山德罗,玛丽亚,安德里,纳撒尼尔,弗拉德,汉赫,法比安,贾林。也感谢我的亲人。感谢Julia在我整个论文过程中的参与和支持感谢我的妹妹范妮,我知道我可以永远依靠她。当然,也要感谢我的父母,保罗和莫德,他们从我最小的时候就教会了我热爱科学和数学,并允许我走上这条道路,这条道路使我获得了这篇论文3摘要跨编译器,也称为源代码到源代码转换器,是将源代码从一种高级编程语言(如C++或Python)转换为另一种语言的系统。反编译器主要用于互操作性,并用于移植用过时或不常用语言编写的代码库。COBOL,Python 2)到现代版本。它们通常依赖于应用于源代码抽象语法树的手工重写规则。不幸的是,生成的翻译缺乏可读性,无法遵守目标语言约定,需要手动修改才能正常工作。总的来说,翻译过程非常耗时,需要源语言和目标语言方面的专业知识,这使得代码翻译项目非常昂贵。虽然神经模型在自然语言翻译的上下文中显著地优于它们的基于规则的对应部分,但是由于该领域中并行数据的稀缺性,它们在反编译中的应用受到限制。在本文中,我们提出了训练有效的和完全无监督的神经编译器的方法。自然语言翻译器使用基于翻译和引用之间的令牌共存的度量来评估。e确定它们没有捕捉到编程语言的语义。Hence,我们构建并发布了一个由852个并行函数组成的测试集,以及单元测试,以检查翻译的语义正确性。 我们第一次利用为自然语言设计的目标来学习源代码的多语言表示,并使用开源GitHub项目的源代码训练一个模型来翻译。此模型在C++、Java和Python之间转换函数的基于规则的方法中表现出色然后,我们开发了一种改进的预训练方法,该方法引导模型深入学习源代码的语义表示。它提高了包括无监督代码翻译在内的多项任务的最后,我们使用自动化单元测试来自动创建程序翻译的示例。对这些示例的培训可以显著提高我们的神经编译器的性能我们的方法只依赖于单语言源代码,不需要源语言或目标语言方面的专业知识,并且可以很容易地推广到其他编程语言。4摘要跨编译器是将源代码从一种高级编程语言(如C++或Python)转换为另一种高级编程语言的系统跨编译器主要用于它们通常依赖于应用于源代码的抽象语法树的手动重写规则不幸的是,生成的翻译通常缺乏可读性,不符合目标语言的约定,并且需要手动修改才能正常工作整个翻译过程非常耗时,需要源语言和目标语言方面的专业知识,这使得代码翻译项目成本高昂。虽然神经模型在自然语言翻译中的表现明显优于基于规则的模型,但由于该领域缺乏并行数据,它们在编译器之间的应用我们提出了在没有监督数据的情况下训练有效的神经元反编译器的方法。使用基于以下指标的指标对自然语言翻译人员进行评估:翻译和引用之间令牌的共现 我们注意到,这些度量不能捕获编程语言的语义。因此,我们构建并发布了一个由852个并行函数组成的测试数据库,以及用于验证翻译语义准确性的单元测试。我们首先利用为自然语言设计的目标来学习源代码的多语言表示,并训练一个模型来翻译,只使用GitHub开源项目的单语言代码。该模型在C++、Java和Python之间转换函数时优于基于规则的方法然后,我们开发了一种预训练方法,使模型学习代码的语义表示。 这可以提高多项任务的性能,包括无监督的代码翻译。最后,我们使用自动化单元测试来创建示例程序翻译在这些示例上训练模型可显著提高神经元编译器的性能。我们的方法完全基于单语言源代码,不需要源语言或目标语言的专业知识,并且可以很容易地推广到其 他 语 言 。5内容。1导言81.1论文结构101.2出版物112相关工作142.1神经机器翻译142.1.1架构转型142.1.2语言建模172.1.3无人监督机器翻译182.2程序合成和翻译182.2.1自然语言的代码合成......................................................................... 182.2.2程序翻译202.2.3评估指标202.3编程语言的其他机器学习任务2.3.1从源代码23翻译2.3.2错误检测和修复242.3.3模型预训练。......................................................................................243使用多语言预培训的3.1型号283.1.1交叉编程语言模型预培训293.1.2去噪自动编码313.1.3反向翻译313.2实验323.2.1培训详情323.2.2培训数据32内容。63.2.3预处理333.2.4评估343.2.5结果373.2.6讨论- 分析403.3翻译示例433.4结论514DOBF:编程的去模糊预训练目标语言524.1背景。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...... ... ... ...544.2模型。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...... ... ... ... ...554.2.1编程语言的传销和去噪音化。... ... ... ... ... ...554.2.2客观。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...564.2.3实施。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...574.3实验。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...584.3.1去混淆。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...584.3.2对下游任务进行。... ... ... ... ... ... ... ... ... ... ... ... ... ... ...594.3.3实验细节。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...604.4结果。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...614.4.1去混淆。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...614.4.2下游任务。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...634.5去混淆示例。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...664.6结论。... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...745利用自动单元测试进行无监督代码传输755.1背景7775.2方法795.2.1突变评分795.2.2并行数据创建815.2.3培训方法845.2.4评估855.3实验865.3.1培训详情865.3.2结果和讨论875.4翻译示例928内容。5.5结论966结论和观点97参考书目100第一章引言transcompiler、transpiler或源代码到源代码编译器是一种转换器,它可以在类似抽象级别的编程语言之间进行反编译器不同于传统的编译器,传统的编译器将源代码从高级编程语言(例如,汇编语言)转换为低级编程语言,以创建可执行文件。最初,跨编译器被开发为在不同平台(例如,为Intel 8080处理器设计的转换源代码,使其与Intel 8086兼容。 最近,开发了新的语言(例如CoffeeScript、TypeScript、Dart、Haxe)以及专用的转码器,可将其转换为流行或无处不在的语言(例如JavaScript)。这些新语言通过提供列表理解(CoffeeScript)、面向对象编程和类型检查(TypeScript)等新功能,同时检测错误并提供优化,解决了目标语言的一些不足之处。这些语言被设计为以完美的准确性编译为另一种高级编程语言(即 编译后的语言不需要手动调整即可正常工作。在本文中,我们更感兴趣的是传统类型的反编译器,其中典型的用例是将用过时或不常用语言(如COBOL、Python 2)编写的现有代码库翻译成新的语言,或者将用不同语言编写的代码集成到现有代码库中。将现有代码库迁移到现代或更高效的语言(如Java或C++)需要源语言和目标语言方面的专业知识,而且通常成本很高。例如,澳大利亚联邦银行花费了大约7.5亿美元和5年的工作,将其平台从COBOL转换为一种更现代的语言。使用编译器并手动调整源代码的输出可能会更快。比从头开始重写整个代码库更便宜。在自然语言中,神经机器翻译的最新进展已经被广泛接受,甚至在专业翻译人员中也是如此,他们越来越多地依赖于自动化机器翻译系统。类似的现象可能会在未来的编程语言翻译中从一种图灵完备语言到另一种语言的源代码翻译在理论上总是可能的。不幸的是,构建翻译器在实践中是困难的:不同的语言可能有不同的语法,并且依赖于不同的平台API和标准库函数。目前,大多数跨编译工具都是基于规则的;它们基本上将输入源代码标记化,并将其转换为抽象语法树(AST),在此基础上应用手工编写的重写规则。创建它们需要大量的时间,以及源语言和目标语言的高级知识更重要的是,从动态类型的语言(如Python)到静态类型的语言(例如Java)要求推断变量类型,如果不是不可能的话,这本身就很困难神经机器翻译(NMT)在编程语言中的应用长期以来一直受到限制,主要是因为缺乏可用的并行资源。 在本文中,我们提出了一种无监督的机器翻译方法,利用GitHub中大量的单语言源代码来训练一个模型,在三种流行的语言之间进行翻译:C++,Java和Python。为了评估我们的模型,我们创建了一个由852个并行函数组成的测试集,以及相关的单元测试。虽然我们从未提供并行数据,但我们的模型能够高准确度地翻译函数,并跨三种语言正确调整标准库中的函数,以显著的优势超越基于规则的基准和商业基准。我们的方法需要源语言或目标语言的少量知识,并且可以很容易地扩展到具有足够可用数据的大多数编程语言。虽然我们的方法并不完美,但它可以帮助减少成功翻译代码库所需的工作量本文的主要贡献如下:• 我们介绍了将函数从一种编程语言翻译成另一种编程语言的新方法,这种方法纯粹基于单语言源代码,不需要源语言或目标语言方面的专业知识。• 我们证明了我们的方法成功地捕获了特定于每种语言的复杂模式,并将它们翻译成其他语言。第一章。简介• 我们证明了完全无监督的方法超越了利用基于规则的方法和高级编程知识的商业系统。• 使用自动生成的单元测试,我们生成了数千个对齐的函数,这些函数可以显著提高未感知翻译模型的性能• 我们构建并发布了一个由三种语言的852个并行函数组成的验证和测试集,以及单元测试,以评估生成的翻译的正确性。• 我们的代码和预培训模型已公开。1.1论文结构本文提出了一种新的无监督源代码翻译方法。 他们对代码翻译的最新技术水平进行了重大改进,如图1.1所示,并在每一章中进行了详细说明。在本章中,我们将探讨序列建模、代码合成、代码理解和程序翻译方面的相关工作。 我们还介绍了影响我们选择并启用我们的一些方法的关键工具和概念。第3章:在本章中,我们介绍了TransCoder,它学习只使用单语言数据来翻译编程语言 此模型将代码视为为自然语言处理设计的序列和目标函数。它不使用源代码的特性,除了在验证和测试时间,但仍然大大优于源代码翻译的基准。第4章在本章中,我们讨论了在源代码上预训练模型时使用隐藏语言建模(MLM)和去噪自动编码(AED)目标。这些目标是为自然语言和随机掩码令牌设计的,通常不会强制模型理解代码的语义。Hence,我们引入了一个利用源代码特性的补充目标:DOBF。 它基于标识符去模糊,并引导模型生成表示代码语义的嵌入。DOBF1https://github.com/facebookresearch/CodeGen1.2. 出版物提高机器学习模型在多个任务中的性能,包括无监督代码翻译。TransCoder和DOBF从单语言数据中学习多语言源代码的能力对其代码翻译性能至关重要这些嵌入是多语言的,这是由于锚定了运算符、标识符、语法标记或几种编程语言通用的关键字等关键字。然而,很难理解给定令牌序列的语义可能因编程语言而异(例如, 由于不同的运算符优先级)。在本章中,我们介绍了一种利用自动生成的单元测试来创建对齐函数数据集的新方法它解决了前面提到的问题,并大大提高了前面章节中描述的无监督源代码翻译模型的性能。第六章在论文的最后一部分,我们回顾了其他章节的贡献,并为源代码翻译和合成的未来研究提供了方向1.2出版物本文的几篇论文已在同行评审会议上发表。由于实验框架的小更新,内容可能略有不同。本节简要介绍了与本论文主题没有直接关系的其他机器学习工作。用于编程语言的机器学习。• TransCoder(Roziere等人,2020a)使用无监督的方法在编程语言之间进行翻译。 这项工作将在第3章中详细介绍。Marie- Anne Lachaux是这项工作的平等贡献者。• DOBF(Roziere等人,2021a)提供了一种针对源代码预训练机器学习模型的新方法,如第4章所述。Marie-Anne Lachaux是这项工作的平等贡献者。• TransCoder-ST(Roziere等人, 使用自动化单元测试创建对齐函数的数据集,并进行自我培训以改进TransCoder和DOBF。 这在第5章中有详细说明。第一章。简介图1.1:我们的方法对Java到Python翻译所做的改进。在橙色中,基于规则的基线称为j2py。在蓝色阴影中,本文详细介绍了无监督方法。TransCoder,在第3章中描述,是我们用于编程语言无监督翻译的初始方法。DOBF是一种新的编程语言预训练目标,详见第4章。 在第5章中,我们介绍了TransCoder-ST,它是在使用自动化单元测试生成的对齐数据上进行培训的。y轴是单代的计算精度它衡量通过一系列单元测试的代的百分比生成式对抗网络的潜在空间优化。 本文研究了基于梯度和进化的方法来优化生成式对抗网络(GAN)的潜在空间。• EvolGAN(Roziere等人,2020b)优化图像的技术或艺术质量,以提高生成多种类型图像的GANs的输出。• 眼镜猴(Roziere等人,2021b)使用自定义损耗和图像质量评估网络来提高超分辨率GAN的输出。• 在灵感对抗图像生成中(Rozière等人,2021年),我们允许生成类似于输入灵感图像或符合人类偏好的图像。1.2. 出版物杂记• Garcelon et al.(2020)研究了对线性随机算法的理论对抗攻击,并验证了这些攻 击 对 合 成 和 真 实 世 界 数据集的可行性。 Evrard Garcelon和 LaurentMeunier是这项工作的平等贡献者。第二章相关工作2.1神经机器翻译2.1.1转型架构转换器体系结构(V Aswani等人,2017)利用自我注意机制来翻译或执行其他任务,而不需要任何重复细胞。这种架构提高了培训时的并行性,并具有更好的学习长期依赖关系的能力并行化。 虽然递归层本质上是顺序的,但变换层可以并行计算每个令牌的表示,使它们在GPU或专用硬件上更高效。长期依赖性。众所周知,长期依赖很难用复发性神经网络来学习。前向和后向信号必须通过以学习这种依赖性的路径的长度可以增加到序列的长度,这使得它们难以学习。在实践中,这些网络通常通过时间上的截断反向传播来训练(Sutskever,2013;Pascanu等人,2013年),这进一步推动了从长期依赖中学习。相反,在注意力层中,在任何两个令牌之间存在涉及恒定数量的操作的路径,这使得学习长期依赖性变得容易。编码器-解码器体系结构。Vaswani et al.(2017)使用了一种编码器-解码器架构,其灵感来自于为递归神经网络开发的架构(Bahdanauetal.,2015年;Cho等人,2014年)。在机器翻译的上下文中,编码器学习dQK2.1.神经机器翻译源句子中每个标记的高级表示,使用来自左标记和右标记的信息。 解码器使用由编码器输出的整个源句子的表示和先前生成的目标令牌以自回归方式生成令牌。仅编码器体系结构。已经提出了替代的变换器体系结构。 例如,BERT家族中的模型(Devlin等人,2018年;刘和其他人,2019年;Yang等人,2019年;Sanh等人,2019)只包含一个编码器,用于自然语言理解。 它们通常在GLUE基准上进行测试(Wang等人,2018a),其中包含诸如问题到答案匹配、释义检测和情绪分析等任务。这样的模型仅在源句子中生成标记的高级表示。它们没有被训练成以自回归的方式生成新的令牌,并且通常不被用来在机器翻译的上下文中生成任意长度的新句子仅限解码器的架构。GPT等模型(Radford等人,2018年、2019年;Brown等人,2020年)只以自回归的方式训练解码器。这种类型的体系结构特别适合于文本完成。使用精心挑选的提示,它也适用于广泛的任务。例如,对于翻译,可以期望经过良好训练的模型完成格式为"Translate English to French:cheese => "的提示,其中"cheese"是英语单词"cheese"的 Brown等人(2020)在 提 示 符 中 提 供多 个 翻 译 示 例 时 , 显 示 了 改 进的 少数 镜头性 能 。缩放点产生注意力。Vaswani等人(2017)定义缩放点通过将缩放因子1添加到点产品注意力,使用d键的尺寸:注意(Q、K、V)=sof tmax(T√d)V(2.1)其中Q、K和V是包含查询、键和值的矩阵,其被计算为令牌表示的线性变换在自我注意中,键、查询和值是从相同的令牌表示中计算出来的在编码器中,每个位置可以期望在前一层中的任何其它位置。在解码器中,它们使用掩码来确保没有元素可以期望在其自身之后的位置。它确保信息只向前流动,
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功