赶上最新的AI论文

[IRCoder]中间表示法使语言模型成为强大的多语言代码生成器

[IRCoder]中间表示法使语言模型成为强大的多语言代码生成器

计算与语言

三个要点
✔️ 编译器中间表征可能有助于在不同编程语言之间传递信息,并提高代码生成的准确性
✔️ 实验表明,使用中间代码有利于理解和提高异构语言代码的性能。

✔️ 希望这些成果能促进有关中间代码表示法的广泛研究活动。然后,可以开发新的方法和工具,以提高代码理解和生成能力。

IRCoder: Intermediate Representations Make Language Models Robust Multilingual Code Generators
written by Indraneil Paul, Jun Luo, Goran Glavaš, Iryna Gurevych
(Submitted on 6 Mar 2024)
Comments: Published on arxiv.

Subjects:  Artificial Intelligence (cs.AI); Computation and Language (cs.CL); Programming Languages (cs.PL)

code: 

本文所使用的图片要么来自论文、介绍性幻灯片,要么是参考这些图片制作的。

概述

这项研究的重点是开发代码生成中的语言模型(LMs)。传统的语言模型主要集中于自然语言文本,而代码生成领域正在取得新的发展。特别是,编译器中间表征可能有助于在不同编程语言之间传递信息,并提高代码生成的准确性。

该研究利用一个名为 SLTrans 的大型数据集,通过中间表征训练代码生成模型;SLTrans 包含不同编程语言的中间表征和大约 400 万个独立的源代码文件。然后,利用不同规模的基本代码生成模型来训练基于中间表征的因果语言建模。最终,开发出了名为 IRCoder 的模型,该模型在多语言代码生成任务中表现出了立竿见影的稳健性和更好的代码理解能力,并在各种代码生成任务中取得了一致的改进。

介绍

传统上,Code-LM 基准测试主要局限于 Python 等资源丰富的语言,但实际上,所有编程语言都需要代码生成。最近的基准测试显示,不同编程语言的 Code-LM 性能存在差异。例如,Bash 等语言就落后于 Python。

代码库的偏差和编程语言的快速变化进一步加剧了这一问题。传统方法很难将这种多样性考虑在内,因此需要新的方法。在本研究中,编译器中间表征(IR)被用作跨异构语言理解代码的基础;IR 是独立于编程语言和平台的中间表征,可用作多语言代码 LM 的理想共享表征。

相关研究

本节介绍代码生成模型开发过程中的重要工作。

首先,提到了高质量预训练数据的策划。据说这有助于选择特定领域的数据,并对 LM 进行高效的预训练。例如,Phi-1 等模型仅用 70 亿个词条进行了训练,并显示出相当的性能。

然后,工具链以元数据为基础。元数据从编译器的输出中获取信息,用于帮助理解源代码。抽象语法树(AST)编码技术就是一个例子。

最后,在语言间转换和协调方面,需要努力避免因训练语言数量和多语言模型训练资源比例的变化而导致性能下降。特别值得一提的是,使用中间编译器表征(IR)进行预训练可促进训练模型在非英语语言之间的跨语言转移,并提高其在下游任务中的性能。

建议方法

本节介绍一种创建 LLVM IR 转换对数据集的方法,称为 SLTrans。下表显示了 SLTrans 在编程语言之间的细分

首先,该数据集旨在从低、中、高资源编程语言中获取并行源 IR 数据。这包括将源代码转换为 LLVM IR;之所以选择 LLVM 作为中间表示法,是因为它的普遍性和优势,如保持人类可读的 IR 标准。下表概述了并行数据源和培训目标。

其次,在获取 LLVM IR 方面也发现了一些挑战。例如,在跟踪依赖关系和获取可编译代码单元方面存在困难。为了解决这些问题,我们使用了独立的编译单元,例如在编程竞赛问题中。

然后,将获取的源文件编译成大小优化的 IR 和性能优化的 IR,并收集大小优化的 IR 和性能优化的 IR。最后,执行基于 MinHash 的重复数据删除,创建最终的 SLTrans 数据集。该数据集包含 12 种编程语言的约 400 万个样本和总计 262 亿个词块。

试验

设置和数据

首先,LLVM IR 用于建立异构语言之间的匹配结构,并促进语言间的传输。在我们的实验中,我们删除了头数据,并从 IR 中删除了额外信息。然后,在 80% 的情况下选择尺寸优化的 IR,在剩余 20% 的情况下选择性能优化的 IR。

然后,使用 UniMax-1 抽样法在令牌级进行子抽样,以准备训练语料。训练语料库还包括来自 TheStack 的 2 亿个开放领域 IR 代码 token、高质量代码和文本数据,以及来自 OpenWebMath 数据集的数学文章。

然后预留代币预算,在三个不同供应商提供的六个不同的代码-LM 上测试红外接地的影响,这些代码-LM 的参数从 1.1B 到 7.3B 不等。这些模型包括 StarCoderBase、DeepSeekCoder 和 CodeLlama。

最后,对模型进行训练。这包括引入两个新的哨点标记,并将嵌入从高斯分布初始化为随机分布。训练依赖于 LoRA,并使用 DeepSpeed Zero Stage-2 加速训练工作;它使用亚当优化器,训练的最大序列长度为 4096 个标记。

结果和讨论

首先,研究了源代码/红外配对的重要性。为此,将使用源代码和红外配对数据训练的模型的性能与不使用源代码和红外配对数据训练的模型的性能进行了比较。结果表明,在没有配对数据的情况下,模型的性能会有一定的提升,但这种提升要小于增加配对数据后的提升。这表明,将异构源代码语言固定在相同的 IR 上是性能提升的主要原因,而不仅仅是接触了 IR。

然后,我们研究了以 IR 为基础如何影响 Code-LM 的抗扰动性。结果表明,对语法变化的鲁棒性得到了改善,尤其是在以红外技术为基础时。

然后测试了经过 IR 训练的模型的多语言代码完成和理解能力。结果表明,在所有多语言基准测试中,经过 IR 训练的模型都明显优于基础 LM。

最后,我们测试了 IR 接地是否会延伸到下一条指令。结果表明,IR 接地会带来性能提升,而指令调整的优势在最强大的基本模型中最为明显。

这些结果表明,使用 IR 有助于理解和改进异构语言代码的性能。

结论

本研究调查了将不同编程语言的源代码转换为通用中间表示法(IR)如何影响理解和生成代码的能力。

研究人员希望,这些成果将有助于开展更广泛的研究活动,以纳入中间代码表示法。这将有助于开发新的方法和工具,提高代码理解和生成能力。

 
  • メルマガ登録(ver
  • ライター
  • エンジニア_大募集!!

如果您对文章内容有任何改进建议等,请通过 "联系我们 "表格与爱学网编辑部联系。
如果您能通过咨询表与我们联系,我们将非常感激。

联系我们