无监督编程语言翻译模型:告别手工规则,代码翻译更智能
这篇论文介绍了一种名为“无监督编程语言翻译”的模型,它能将 Python 代码自动翻译成 C++ 代码,而且生成的代码功能与原代码完全一致。更令人惊叹的是,该模型从未接受过明确的 C++ 语言训练,它完全是通过无监督学习的方式实现的。
论文亮点:
- 自动翻译: 模型无需人工干预,就能将 Python 代码自动翻译成 C++ 代码。
- 无监督学习: 模型没有接受过 C++ 语言的监督训练,而是通过学习 Python 和 C++ 代码的结构和语义关系来实现翻译。
- 高效率: 模型能够快速准确地完成翻译,避免了传统方法中繁琐的手工规则编写。
传统方法的局限性:
- 依赖手工规则: 传统方法需要人工编写规则,将源代码转换为抽象语法树,再进行修改和输出。
- 规则编写困难: 编写规则需要大量的专业知识和经验,且规则难以覆盖所有情况。
- 代码可读性差: 转换后的代码可能变得复杂难懂,难以维护。
论文提出的模型克服了传统方法的局限性,能够实现更智能、更高效的代码翻译,为跨语言代码移植和代码迁移提供了新的思路。
论文作者: Marie-Anne Lachaud, Baptiste Rosière, Loïc Chanusso, and Jium Lompel, 来自 Facebook AI Research。
跨语言代码迁移是一项昂贵且费力的任务。要将代码从一种语言翻译成另一种语言,需要同时精通两种语言。现有的自动工具通常会生成难以理解和复杂的代码。本文将无监督神经机器翻译应用于 Python、C++ 和 Java 的源代码,并且能够在它们之间进行翻译,而无需经过任何监督训练。概要:0:00 - 简介和概述1:15 - 跨编译问题5:55 - 神经机器翻译8:45 - 无监督 NMT12:55 - 通过令牌重叠共享嵌入20:45 - MLM 目标25:30 - 降噪目标30:10 - 反向翻译目标33:00 - 评估数据集37:25 - 结果41:45 - 令牌化42:40 - 共享嵌入43:30 - 人工感知翻译47:25 - 失败案例48:05 - 结论论文:https://arxiv.org/abs/2006.03511
摘要:跨编译器,也称为源到源翻译器,是一种将源代码从高级编程语言(如 C++ 或 Python)转换为另一种语言的系统。跨编译器主要用于互操作性,以及将用过时或已弃用语言(例如 COBOL、Python 2)编写的代码库移植到现代语言。它们通常依赖于手工制作的重写规则,应用于源代码抽象语法树。不幸的是,由此产生的翻译通常缺乏可读性,无法遵守目标语言约定,并且需要手动修改才能正常工作。整个翻译过程非常耗时,并且需要精通源语言和目标语言,使得代码翻译项目变得昂贵。虽然神经模型在自然语言翻译方面明显优于基于规则的模型,但由于该领域中平行数据的稀缺性,它们在跨编译方面的应用受到限制。在本文中,我们建议利用无监督机器翻译的最新方法来训练一个完全无监督的神经跨编译器。我们在来自开源 GitHub 项目的源代码上训练我们的模型,并表明它可以高精度地将函数在 C++、Java 和 Python 之间进行翻译。我们的方法完全依赖于单语源代码,不需要任何源语言或目标语言的专业知识,并且可以轻松地推广到其他编程语言。我们还构建并发布了一个包含 852 个平行函数的测试集,以及用于检查翻译正确性的单元测试。我们表明,我们的模型在很大程度上优于基于规则的商业基线。