Post-Incorporating Code Structural Knowledge into Pretrained Models via ICL for Code Translation
作者: Yali Du, Hui Sun, Ming Li
分类: cs.SE, cs.AI
发布日期: 2025-03-28 (更新: 2025-10-12)
备注: IEEE Transactions on Software Engineering
💡 一句话要点
提出基于信息覆盖的ICL方法,提升预训练模型在代码翻译中对代码结构的处理能力
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码翻译 上下文学习 预训练模型 抽象语法树 信息覆盖
📋 核心要点
- 现有代码翻译方法难以将代码结构知识有效融入大型语言模型,通常需要复杂的模型结构和训练过程。
- 论文提出基于上下文学习(ICL)的方法,通过选择具有代表性的代码示例,将代码结构知识注入预训练模型。
- 实验表明,该方法显著提升了LLM在代码翻译任务中的性能,并验证了代码结构知识的重要性。
📝 摘要(中文)
本文提出了一种利用上下文学习(ICL)将代码结构知识融入预训练语言模型的方法,用于代码翻译任务。传统方法依赖于复杂的模型结构和损失函数,难以集成到LLM训练中。本文从信息论的角度重新审视ICL中的示例选择,提出基于信息覆盖的列表式选择比传统的基于相似性和多样性的方法更精确和通用。为了量化信息覆盖,引入了抽象语法树覆盖率(CAST)作为替代指标。将示例选择形式化为NP-hard的CAST最大化问题,并证明其为标准子模最大化问题。因此,提出了一种贪婪算法,在多项式时间内保证(1-1/e)近似解。该方法是首个无需训练且模型无关的方案,可在测试时将代码结构知识融入现有LLM。实验结果表明,该方法显著提高了LLM的性能,并揭示了两个重要发现:代码结构知识可以在推理过程中有效地融入预训练LLM,即使在训练过程中被忽略;扩大模型规模或训练数据并不能导致代码结构知识的涌现,强调了显式考虑代码句法结构的必要性。
🔬 方法详解
问题定义:代码翻译旨在将代码从一种编程语言迁移到另一种编程语言。现有的语法感知方法通常依赖于复杂的模型架构和损失函数,这使得它们难以集成到大型语言模型的训练过程中,因为这需要大量的计算资源。因此,如何在不重新训练模型的情况下,使预训练语言模型能够更好地理解和利用代码的结构信息是一个关键问题。
核心思路:本文的核心思路是利用上下文学习(ICL)的特性,通过在输入上下文中加入精心选择的代码示例,引导预训练语言模型学习代码的结构信息。关键在于如何选择最具代表性的示例,以便模型能够从中提取到最有效的结构知识。论文从信息论的角度出发,认为应该选择能够最大程度覆盖代码结构信息的示例。
技术框架:该方法主要包含以下几个步骤:1) 从代码库中提取候选示例;2) 使用抽象语法树(AST)表示代码的结构信息;3) 定义抽象语法树覆盖率(CAST)作为信息覆盖的度量;4) 将示例选择问题转化为CAST最大化问题;5) 使用贪婪算法求解CAST最大化问题,选择最终的示例集合;6) 将选择的示例与待翻译的代码拼接成输入上下文,输入预训练语言模型进行翻译。
关键创新:该方法的主要创新在于:1) 提出了一种基于信息覆盖的示例选择策略,能够更有效地选择具有代表性的代码示例;2) 引入了抽象语法树覆盖率(CAST)作为信息覆盖的度量,使得可以量化代码结构信息的覆盖程度;3) 将示例选择问题转化为一个子模最大化问题,并使用贪婪算法求解,保证了算法的效率和性能。该方法无需重新训练模型,可以直接应用于现有的预训练语言模型。
关键设计:关键设计包括:1) 如何定义抽象语法树覆盖率(CAST),使其能够准确反映代码结构信息的覆盖程度;2) 如何设计贪婪算法,使其能够在多项式时间内找到一个近似最优的示例集合;3) 如何将选择的示例与待翻译的代码拼接成输入上下文,以便预训练语言模型能够有效地利用这些示例。
🖼️ 关键图片
📊 实验亮点
实验结果表明,该方法在代码翻译任务上取得了显著的性能提升。与基线方法相比,该方法能够更有效地利用代码的结构信息,从而提高翻译的准确性。此外,实验还表明,扩大模型规模或训练数据并不能导致代码结构知识的涌现,强调了显式考虑代码句法结构的必要性。
🎯 应用场景
该研究成果可应用于自动化代码翻译、代码理解、代码生成等领域。通过提升模型对代码结构的理解能力,可以提高代码翻译的准确性和效率,降低软件开发的成本。此外,该方法还可以用于代码缺陷检测、代码克隆检测等任务,具有广泛的应用前景。
📄 摘要(原文)
Code translation migrates codebases across programming languages. Recently, large language models (LLMs) have achieved significant advancements in software mining. However, handling the syntactic structure of source code remains a challenge. Classic syntax-aware methods depend on intricate model architectures and loss functions, rendering their integration into LLM training resource-intensive. This paper employs in-context learning (ICL), which directly integrates task exemplars into the input context, to post-incorporate code structural knowledge into pre-trained LLMs. We revisit exemplar selection in ICL from an information-theoretic perspective, proposing that list-wise selection based on information coverage is more precise and general objective than traditional methods based on combining similarity and diversity. To address the challenges of quantifying information coverage, we introduce a surrogate measure, Coverage of Abstract Syntax Tree (CAST). Furthermore, we formulate the NP-hard CAST maximization for exemplar selection and prove that it is a standard submodular maximization problem. Therefore, we propose a greedy algorithm for CAST submodular maximization, which theoretically guarantees a (1-1/e)-approximate solution in polynomial time complexity. Our method is the first training-free and model-agnostic approach to post-incorporate code structural knowledge into existing LLMs at test time. Experimental results show that our method significantly improves LLMs performance and reveals two meaningful insights: 1) Code structural knowledge can be effectively post-incorporated into pre-trained LLMs during inference, despite being overlooked during training; 2) Scaling up model size or training data does not lead to the emergence of code structural knowledge, underscoring the necessity of explicitly considering code syntactic structure.