通过语法引导和语义感知偏好优化改进代码翻译
摘要
本文提出CTO方法,通过对比学习和直接偏好优化结合语法引导与语义感知偏好优化来改进代码翻译,在C++、Java和Python翻译中显著优于现有基线。
arXiv:2605.13229v1 Announce Type: new
摘要:LLMs在代码翻译方面展现出巨大潜力,但常常难以同时确保语法正确性和语义一致性。虽然基于偏好的学习提供了一种有前景的对齐策略,但由于稀疏测试用例或限制性参考翻译带来的不可靠语义奖励,该策略受到阻碍。我们认为,代码翻译的稳健语义奖励必须直接来源于源代码。本文提出CTO方法,通过语法引导和语义感知偏好优化来改进代码翻译。通过对比学习,我们训练了一个跨语言语义模型,直接评估源代码与翻译代码之间的功能等价性。通过将代码翻译建模为多目标优化问题,这一稳健的语义信号与基于编译器的语法反馈无缝统一在直接偏好优化框架中。在C++、Java和Python翻译上的大量实验表明,CTO显著优于现有基线和替代的偏好优化策略。
查看缓存全文
缓存时间: 2026/05/14 06:15
# 使用语法引导与语义感知偏好优化改进代码翻译
来源: https://arxiv.org/html/2605.13229
张欢¹程伟¹沈晨¹杨婧月¹胡伟¹,² ¹南京大学计算机软件新技术国家重点实验室 ²南京大学健康医疗大数据国家研究院 \{yhwu, zhanghuan, wchengcs, cshen, jyyang\}[email protected], [email protected]通讯作者
###### 摘要
大语言模型在代码翻译方面展现出巨大潜力,但常常难以同时保证语法正确性和语义一致性。虽然基于偏好的学习提供了一种有前景的对齐策略,但受到源自稀疏测试用例或限制性参考翻译的不可靠语义奖励的阻碍。我们认为,代码翻译的稳健语义奖励必须直接源自源代码。本文提出CTO,通过语法引导和语义感知的偏好优化来改进代码翻译。通过对比学习,我们训练了一个跨语言语义模型,直接评估源代码与翻译代码之间的功能等价性。通过将代码翻译表述为多目标优化问题,这一稳健的语义信号与基于编译器的语法反馈在直接偏好优化框架内无缝统一。在C++、Java和Python翻译上的大量实验表明,CTO显著优于现有基线和替代的偏好优化策略。
## 1 引言
代码翻译,即将功能从源编程语言迁移到目标语言的过程,是现代软件工程中的一项关键任务。它促进了代码复用,有利于遗留系统现代化,并在日益异构的软件生态系统中实现跨语言互操作性 Nguyen等人 (2014) ; Zhu等人 (2022a) ; Yan等人 (2023) 。虽然预训练语言模型的最新进展显示出巨大潜力 Lu等人 (2021) ; Zhu等人 (2022b) ; Zheng等人 (2023) ; Roziere等人 (2020) ,但其实际应用经常受到一个关键挑战的阻碍:确保翻译后的代码不仅语法正确,而且在语义上与源代码等价。即使是最先进的大语言模型,由于对不同编程语言的语法和语义细微差别理解不足,也常常犯错误 Pan等人 (2024) ; Yang等人 (2024) 。
---
图1: 一个说明在基于执行的奖励中语法和语义纠缠的激励性示例。目标C++ I语法有效但语义有缺陷;然而,它利用稀疏的测试用例(其中A[0]恰好是最小值)实现了假阳性通过(奖励黑客行为)。相反,目标C++ II保持了语义等价性(使用min_element),但由于编译错误而获得零奖励。为了解决这个问题,一个自然的发展是超越标准的监督微调,采用基于偏好的学习。通过利用源自用户判断或任务特定标准的奖励信号,基于人类反馈的强化学习 Ouyang等人 (2022) 已被广泛用于将模型输出与人类偏好对齐。然而,将此范式应用于代码翻译引发了一个基本问题:我们如何定义并获得语法正确性和语义一致性的可靠奖励信号?对于语法,编译器反馈是一个无误的预言机,提供确定性和二元的语法正确性信号 Shojae等人 (2023) 。然而,对于语义,道路充满了挑战。
如图1所示,当前主流的语义奖励策略建立在有缺陷的基础上。最常见的策略是从测试用例中推导奖励,将测试结果视为功能正确性的代理 Le等人 (2022) ; Gee等人 (2025) ; Zhang等人 (2025) 。然而,现实世界的测试套件通常稀疏且覆盖率低,可能导致奖励黑客行为 Ma等人 (2025) ,其中模型可能过度适应这些有限的测试用例,而不能保持源代码的预期语义。在代码翻译的背景下,依赖测试用例导致语法和语义的关键纠缠。目标语言中的一个单一语法偏差通常会使整个执行无效,无论语义准确性如何,都会产生零通过率。因此,模型收到一个二元奖励,无法将语义正确性与语法有效性解耦,使得无法量化语义偏差的程度。另一种替代方法是使用参考翻译作为语义锚点。然而,这种方法导致了两种有缺陷的策略。第一种策略使用基于文本的相似性度量(例如 CodeBLEU Ren等人 (2020) )将生成的代码与参考进行比较。这种策略本质上是肤浅的,因为它奖励词汇相似性而非真正的功能等价性。第二种更复杂的策略引入了单语语义模型来评估候选翻译与参考之间的相似性。然而,它隐含地假设参考翻译是源语义的完美且完整的表示。这个假设引入了一个语义瓶颈,限制了输出的多样性,甚至可能传播参考中的错误。我们认为,稳健的语义奖励应与此类有缺陷的代理解耦,而是直接源自源代码本身。我们提出CTO,一种通过语法引导和语义感知的偏好优化来改进代码翻译的新方法。
我们将代码翻译重新表述为一个多目标偏好优化问题,明确地将语法和语义建模为不同的目标。它利用编译器反馈构建语法感知的偏好对。对于语义对齐,它通过对比学习训练一个跨语言语义模型,直接评估源代码和翻译候选之间的功能等价性。它将偏好对的语义奖励差异直接注入学习过程,通过偏置偏好强度,在直接偏好优化框架内统一语法和语义目标。
我们在C++、Java和Python之间的成对代码翻译上进行了大量实验。结果表明,CTO优于现有方法和替代的偏好优化策略,实现了与源代码预期功能更优的对齐。
总结起来,我们的主要贡献如下:
- • 我们提出了CTO,一种通过语法引导和语义感知的偏好优化来改进代码翻译的新方法。它在DPO中引入了奖励偏置机制,实现了语法正确性和语义一致性的统一优化。
- • 我们训练了一个跨语言语义模型作为稳健的奖励源。它直接评估源代码与翻译候选之间的功能等价性,克服了从其他代理推导奖励信号的根本限制。
- • 我们的实验表明,在使用微调的CodeT5模型时,CTO在TransCoder-Test数据集上将翻译准确率提高了高达3.66%,在HumanEval-X上提高了4.27%。使用更大的微调CodeLlama-7B模型时,准确率分别提升了5.60%和6.70%。
## 2 相关工作
#### 代码翻译。
早期关于代码翻译的工作 Roziere等人 (2020, 2022) 主要关注自监督学习。在此基础上,后续工作 Szafraniec等人 (2023) ; Huang等人 (2023) ; Liu等人 (2023) 探索了引入代码结构信息以增强无监督代码翻译的代码表示。这些方法展示了在没有平行数据的情况下学习跨语言表示的可行性。尽管有效,无监督方法往往难以收集海量代码语料库并消耗大量计算资源。
随着高质量平行数据集 Zhu等人 (2022a) ; Yan等人 (2023) ; Khan等人 (2024) ; Yan等人 (2024) 和预训练代码模型 Wang等人 (2021) ; Guo等人 (2021) ; Zheng等人 (2023) ; Feng等人 (2020) 的出现,监督微调已成为代码翻译的一种范式。在此基础上,近期的研究探索了引入强化学习技术 Shojae等人 (2023) 和变分推理技术 Du等人 (2024) 以进一步提升性能。此外,少数近期工作 Ibrahimzada等人 (2024) ; Wang等人 (2024) 关注仓库级别的代码翻译,旨在促进复杂代码库的迁移。我们的工作遵循监督微调范式,在不依赖任何辅助数据集的情况下进一步提升了代码翻译性能。
#### 基于人类反馈的强化学习。
RLHF 通过将模型与人类偏好对齐,显著提升了下游任务的性能。虽然基于奖励的方法如近端策略优化 Schulman等人 (2017) 和群体相对策略优化 Shao等人 (2024) 取得了成功,但它们由于在每个策略更新周期需要大量样本而遭受内存开销增加和计算负担沉重的困扰。
无奖励方法从不同角度解决了这些限制。直接偏好优化 Rafailov等人 (2023) 通过从偏好数据中隐式估计奖励信号,消除了对显式奖励模型的需求。身份偏好优化 Azar等人 (2024) 引入了一般非递减有界函数以缓解过拟合,而简单偏好优化 Meng等人 (2024) 则通过完全移除参考模型进一步简化了过程。此外,一些研究 Park等人 (2024) ; Meng等人 (2024) 探索了将正则化项作为边际来改进奖励建模。尽管取得了这些进展,由于语法表示不足和语义建模不完整,将这些技术直接应用于代码翻译仍然是次优的。为了应对这一挑战,CTO通过联合纳入语法和语义增强了偏好优化,从而在代码翻译中实现了更高的准确性和鲁棒性。
## 3 方法
---
图2: CTO 概览。
### 3.1 奖励模型训练
总体奖励包括语法和语义两个部分。语法奖励是容易获得的,因为它可以直接从编译器反馈中推导。这个二元且基于规则的信号指示翻译代码是否符合目标语言的语法,遵循了先前工作的标准实践 Shojae等人 (2023) 。
相比之下,设计有效的语义奖励是一个更具挑战性的问题,因为代码语义不仅包括功能等价性,还包括对源代码意图的逻辑忠实性。先前的研究从不同角度探讨了这个问题。基于执行的奖励,如 CodeRL Le等人 (2022) ,利用离散的、基于规则的启发式方法评估语义正确性,主要依赖单元测试。然而,在函数级或程序级翻译训练数据中,测试用例通常稀缺甚至不可用,导致基于执行的奖励信号不稳定。此外,这种奖励本质上是二元且稀疏的,使得难以量化错误翻译与正确逻辑的接近程度。基于参考的奖励,如 PPOCoder Shojae等人 (2023) ,使用从静态程序表示(如抽象语法树和数据流图)推导的奖励信号,这些信号通常依赖于与真实参考实现的比较。对参考翻译的依赖限制了它们在实际场景中的适用性,因为在这些场景中,参考通常是缺失的。此外,细微的代码变化,例如变量重命名,可能导致重大的运行时或功能错误,而基于文本的度量往往无法充分惩罚这些错误。
#### 语义奖励模型。
为了解决这些问题,我们提议通过测量高维潜在空间中的语义距离来评估语义正确性。形式上,我们的目标是学习一个映射函数 f: X ∪ Y → Z,使得 Z 中的几何接近度反映源代码 x 和目标代码 y 之间的功能等价性。为了塑造这个潜在空间,我们为每个训练实例构建一个以源代码为锚点的三元组 T = (x, y⁺, Y⁻)。我们将源代码 x 指定为潜在空间中的固定锚点。它作为语义预言机,所有翻译候选都以其为度量标准。参考翻译 y⁺ 被定义为正样本,Y⁻ = {y₁⁻, ..., y_K⁻} 是语义不同的负样本。优化目标是将 y⁺ 的嵌入 f(y⁺) 拉到锚点 f(x) 的直接 ε-邻域内,同时明确地将 Y⁻ 中的硬负样本排斥到这个邻域边界之外,从而针对细微偏差建立稳健的语义边界。
#### 训练目标。
我们的语义奖励模型采用双编码器架构,包含一个源代码编码器和一个目标代码编码器,共享相同的参数。为了有效学习语义相似文章
CroCo:基于自生成的跨语言对比偏好调优
本文介绍了CroCo,一种基于自生成响应的跨语言对比偏好调优方法,表明在英语偏好上训练的奖励模型能够有效对其他语言的响应进行排序,在无需特定语言标注的情况下,提升模型在14种语言上的性能。
提示优化为何有效,为何有时无效:基于因果启发的编辑级分析
本文对自动化提示优化进行了基于因果启发的分析,涵盖多种框架、大语言模型和任务,识别出特定编辑类型(如复杂度增加型、元指令型)根据任务特征具有系统的负面或正面效应,从而解释了泛化失败的原因。
面向中英文混合语音识别的音频大语言模型直接偏好优化
本文应用直接偏好优化(DPO)来对齐音频大语言模型,以转录中英文混合语音,在分布内实现了高达89.6%的MER降低,在分布外实现了20%的降低。它识别出三种失败模式——语言遗漏、翻译替代转录以及幻觉——并表明基于偏好的对齐能有效激发多语言音频大语言模型的正确混合转写行为。
通过偏好对齐优化增强多语言反事实生成
本文介绍了 Macro,一种使用 DPO 进行偏好对齐的框架,旨在提高跨多种语言自我生成反事实解释的有效性和最小性。
句法即罗塞塔石碑:通用依存助力科普特语上下文翻译
乔治城大学研究团队通过将通用依存句法解析与双语注释一起加入上下文提示,显著提升了低资源科普特语到英语的翻译效果,刷新最佳纪录。