[论文解读] CoTran: An LLM-based Code Translator using Reinforcement Learning with Feedback from Compiler and Symbolic Execution
CoTran 是一种基于大语言模型的新型代码转换器,通过结合编译器反馈和符号执行反馈的强化学习方法,提升了代码转换的正确性。通过整合编译器反馈(用于提高编译准确性)和符号执行反馈(用于验证功能等价性),CoTran 在 Python 到 Java 的代码转换任务中实现了 48.68% 的功能等价性准确率和 76.98% 的编译准确率,优于先前的方法,包括 PLBART-base 和基于 CodeT5 的模型。
In this paper, we present an LLM-based code translation method and an associated tool called CoTran, that translates whole-programs from one high-level programming language to another. Existing LLM-based code translation methods lack training to ensure that the translated code reliably compiles or bears substantial functional equivalence to the input code. In our work, we fine-tune an LLM using reinforcement learning, incorporating compiler feedback, and symbolic execution (symexec)-based testing feedback to assess functional equivalence between the input and output programs. The idea is to guide an LLM during fine-tuning, via compiler and symexec-based testing feedback, by letting it know how far it is from producing perfect translations. We conduct extensive experiments comparing CoTran with 14 other code translation tools, including human-written transpilers, LLM-based translation tools, and ChatGPT. Using a benchmark of over um{57000} code pairs in Java and Python, we demonstrate that CoTran outperforms the other tools on relevant metrics such as compilation accuracy (CompAcc) and functional equivalence accuracy (FEqAcc). For example, in Python-to-Java translation, CoTran achieves 48.68% FEqAcc and 76.98% CompAcc, whereas the nearest competing tool (PLBART-base) gets 38.26% and 75.77% respectively. Additionally, CoTran, built on top of CodeT5, improves FEqAcc by +14.89% and CompAcc by +8.14% for Python-to-Java (resp., +12.94% and +4.30% for Java-to-Python).
研究动机与目标
- 解决现有基于大语言模型的代码转换工具在可靠编译和功能等价性方面的不足。
- 通过在大语言模型微调过程中引入纠正性反馈,提升整体程序代码转换的质量。
- 通过结合编译器和符号执行反馈的强化学习,提升转换的正确性。
- 通过在双向转换上训练的双大语言模型,实现自动化的功能等价性检查。
- 开发一种参数高效、资源节约的训练框架,利用 LoRA 实现前向与后向模型的联合微调。
提出的方法
- CoTran 采用两阶段训练流程,结合监督微调(SFT)和通过近端策略优化(PPO)进行的强化学习(RL)。
- 该方法利用编译器反馈(CF)评估编译是否成功,利用符号执行反馈(SF)通过 Symflower 生成的单元测试验证功能等价性。
- 采用端到端的“回环”(b2b)架构,使用一个 Java 到 Python(J2P)和一个 Python 到 Java(P2J)的大语言模型对,实现功能等价性的端到端验证。
- 反馈奖励计算为 SF(功能等价性)和 CF(编译成功)的加权和,并引入 KL 散度正则化以防止分布漂移。
- 通过低秩适应(LoRA)实现参数高效的微调,冻结大部分模型参数,仅训练低秩投影矩阵。
- 采用交错训练循环,交替进行 SFT 和 RL 优化,并基于验证准确率选择表现最佳的模型。

实验结果
研究问题
- RQ1结合编译器和符号执行反馈的强化学习是否能显著提升基于大语言模型的代码转换在编译和功能正确性方面的表现?
- RQ2与仅使用监督微调相比,整合双向反馈(来自编译器和符号执行)对转换质量有何影响?
- RQ3使用回环大语言模型在整体程序代码转换中,能在多大程度上提升功能等价性检查的性能?
- RQ4使用 LoRA 的参数高效微调方法是否能在降低计算成本的同时保持高性能,适用于联合翻译模型的训练?
- RQ5与最先进的工具如 PLBART 和 CodeT5 相比,CoTran 在编译准确率和功能等价性准确率方面表现如何?
主要发现
- CoTran 在 Python 到 Java 的代码转换中实现了 48.68% 的功能等价性准确率(FEqAcc)和 76.98% 的编译准确率(CompAcc),显著优于最接近的竞争对手 PLBART-base(38.26% FEqAcc,75.77% CompAcc)。
- 当基于 CodeT5 构建时,CoTran 在 Java 到 Python 的转换中使 FEqAcc 提升 11.23%,CompAcc 提升 4.07%;在 Python 到 Java 的转换中,分别提升了 14.89% 和 8.14%。
- 与仅使用监督微调相比,同时使用编译器反馈和符号执行反馈可显著提升转换的正确性。
- 基于验证性能选择模型的交错 SFT-RL 训练循环能够稳定训练过程并提升最终模型质量。
- 基于 LoRA 的参数高效微调方法可在降低内存和计算需求的同时,实现前向与后向模型的联合训练。
- 回环大语言模型架构通过在两种语言间来回转换,实现了自动化的端到端功能等价性检查。

更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。