CRUXEval-X: A Benchmark for Multilingual Code Reasoning, Understanding and Execution

📄 arXiv: 2408.13001v2 📥 PDF

作者: Ruiyang Xu, Jialun Cao, Yaojie Lu, Ming Wen, Hongyu Lin, Xianpei Han, Ben He, Shing-Chi Cheung, Le Sun

分类: cs.AI

发布日期: 2024-08-23 (更新: 2025-05-17)

备注: 18pages, Accepted to ACL 2025 Main Conference


💡 一句话要点

CRUXEval-X:一个用于多语言代码推理、理解和执行的基准测试。

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码推理 多语言 基准测试 大型语言模型 代码生成 跨语言泛化 自动化测试

📋 核心要点

  1. 现有代码基准测试主要集中在Python,缺乏对其他编程语言的全面评估,限制了对LLM跨语言编码能力的理解。
  2. CRUXEval-X通过自动化和测试指导的方式,构建了一个包含19种编程语言的大规模代码推理基准测试,有效避免了数据污染。
  3. 实验结果表明,即使模型仅在Python上训练,也能在其他语言上表现出一定的泛化能力,但不同语言对之间存在显著的相关性差异。

📝 摘要(中文)

现有的代码基准测试,如HumanEval,被广泛用于评估大型语言模型(LLMs)的编码能力。然而,现有的代码基准测试中存在一个不可忽视的编程语言偏差——超过95%的代码生成基准测试由Python主导,导致LLMs在其他编程语言(如Java和C/C++)中的能力未知。此外,编码任务的偏差也很关键。大多数基准测试侧重于代码生成能力,而用于代码推理(给定输入,推理输出;给定输出,推理输入)的基准测试则不足,而代码推理是一种基本的编码能力。构建多语言基准测试可能既昂贵又耗费人力,并且来自Leetcode等竞赛网站的代码在训练期间会受到数据污染。为了填补这一空白,我们提出了CRUXEVAL-X,一个包含19种编程语言的多语言代码推理基准测试。它包含每种语言至少600个主题,总共包含19K个内容一致的测试。CRUXEVAL-X的构建流程以完全自动化和测试指导的方式工作,它基于执行反馈进行迭代生成和修复。此外,为了跨越语言障碍(例如,Python/C++中的动态/静态类型系统),我们制定了语言对之间的各种转换规则,以促进翻译。我们对24个具有代表性的LLM的深入评估揭示了语言对之间的相关性。例如,TypeScript和JavaScript显示出显着的正相关,而Racket与其他语言的相关性较小。更有趣的是,即使仅在Python上训练的模型也可以在其他语言中达到最多34.4%的Pass@1,揭示了LLM的跨语言泛化能力。

🔬 方法详解

问题定义:现有代码基准测试存在严重的编程语言偏差,过度依赖Python,缺乏对Java、C/C++等其他重要编程语言的充分评估。此外,现有基准测试主要关注代码生成,而忽略了代码推理能力,即根据输入推断输出或根据输出推断输入。现有方法还面临数据污染的风险,例如使用来自LeetCode等网站的数据,这些数据可能已经被LLM在训练过程中见过。

核心思路:CRUXEval-X的核心思路是构建一个多语言、高质量、无污染的代码推理基准测试。通过自动化和测试驱动的方法,生成和修复代码,确保基准测试的质量和多样性。同时,制定语言对之间的转换规则,以促进不同编程语言之间的翻译,从而实现跨语言的评估。

技术框架:CRUXEval-X的构建流程主要包括以下几个阶段:1) 题目生成:基于预定义的模板和规则,自动生成不同编程语言的代码题目。2) 测试用例生成:为每个题目生成多个测试用例,用于验证代码的正确性。3) 代码生成:使用LLM生成代码,解决生成的题目。4) 代码验证:使用测试用例验证生成的代码,并根据执行反馈进行修复。5) 语言翻译:利用定义的转换规则,将题目和代码翻译成不同的编程语言。

关键创新:CRUXEval-X的关键创新在于其完全自动化和测试指导的构建流程。该流程能够高效地生成大规模、高质量的多语言代码推理基准测试,并有效避免数据污染。此外,该研究还提出了语言对之间的转换规则,促进了跨语言的代码推理评估。

关键设计:CRUXEval-X包含19种编程语言,每种语言至少600个题目,总共包含19K个内容一致的测试。为了确保测试用例的质量,该研究采用了多种测试策略,包括边界测试、随机测试和覆盖率测试。在语言翻译方面,该研究制定了详细的转换规则,考虑了不同语言的语法和语义差异,例如动态/静态类型系统。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

对24个LLM的评估表明,TypeScript和JavaScript之间存在显著的正相关性,而Racket与其他语言的相关性较小。即使仅在Python上训练的模型,也能在其他语言上达到最高34.4%的Pass@1,揭示了LLM的跨语言泛化能力。这些结果为理解LLM的编码能力提供了有价值的见解。

🎯 应用场景

CRUXEval-X可用于全面评估LLM在多语言环境下的代码推理、理解和执行能力。它可以帮助研究人员更好地了解LLM的跨语言泛化能力,并指导LLM的训练和优化。此外,CRUXEval-X还可以应用于软件工程领域,例如自动代码生成、代码翻译和代码修复等。

📄 摘要(原文)

Code benchmarks such as HumanEval are widely adopted to evaluate Large Language Models' (LLMs) coding capabilities. However, there is an unignorable programming language bias in existing code benchmarks -- over 95% code generation benchmarks are dominated by Python, leaving the LLMs' capabilities in other programming languages such as Java and C/C++ unknown. Moreover, coding task bias is also crucial. Most benchmarks focus on code generation capability, while benchmarks for code reasoning (given input, reasoning output; and given output, reasoning input), an essential coding capability, are insufficient. Yet, constructing multi-lingual benchmarks can be expensive and labor-intensive, and codes in contest websites such as Leetcode suffer from data contamination during training. To fill this gap, we propose CRUXEVAL-X, a multi-lingual code reasoning benchmark that contains 19 programming languages. It comprises at least 600 subjects for each language, along with 19K content-consistent tests in total. In particular, the construction pipeline of CRUXEVAL-X works in a fully automated and test-guided manner, which iteratively generates and repairs based on execution feedback. Also, to cross language barriers (e.g., dynamic/static type systems in Python/C++), we formulated various transition rules between language pairs to facilitate translation. Our intensive evaluation of 24 representative LLMs reveals the correlation between language pairs. For example, TypeScript and JavaScript show a significant positive correlation, while Racket has less correlation with other languages. More interestingly, even a model trained solely on Python can achieve at most 34.4% Pass@1 in other languages, revealing the cross-language generalization of LLMs.