[论文解读] Leveraging Automated Unit Tests for Unsupervised Code Translation
该论文提出了一种新颖的无监督代码翻译方法,利用多语言单元测试来过滤通过回译生成的噪声翻译,显著提升了翻译准确率。通过使用可执行测试套件验证候选翻译,该方法生成了质量更高、语义正确的代码,相较于先前的最先进模型,在Python→C++翻译任务上准确率提升高达24%,错误率降低超过35%。
With little to no parallel data available for programming languages, unsupervised methods are well-suited to source code translation. However, the majority of unsupervised machine translation approaches rely on back-translation, a method developed in the context of natural language translation and one that inherently involves training on noisy inputs. Unfortunately, source code is highly sensitive to small changes; a single token can result in compilation failures or erroneous programs, unlike natural languages where small inaccuracies may not change the meaning of a sentence. To address this issue, we propose to leverage an automated unit-testing system to filter out invalid translations, thereby creating a fully tested parallel corpus. We found that fine-tuning an unsupervised model with this filtered data set significantly reduces the noise in the translations so-generated, comfortably outperforming the state-of-the-art for all language pairs studied. In particular, for Java $ o$ Python and Python $ o$ C++ we outperform the best previous methods by more than 16% and 24% respectively, reducing the error rate by more than 35%.
研究动机与目标
- 解决低资源、无监督源代码翻译中的挑战,即并行数据稀缺且神经网络模型对输入噪声敏感。
- 减少因回译导致的翻译错误,此类错误通常由微小的标记级别变化引发,导致生成无效或语义错误的代码。
- 通过自动化单元测试作为语义验证机制,筛选出正确或可执行的翻译,从而提升翻译质量。
- 从不同编程语言的未配对源代码中构建完全测试过的、并行的单语言语料库,以支持无监督模型的更好微调。
- 证明基于测试的过滤方法能显著提升翻译性能,且无需并行训练数据。
提出的方法
- 该方法利用回译从不同编程语言的未配对源代码中生成伪并行单语言数据。
- 它利用现有的多语言单元测试套件来验证候选翻译,丢弃那些执行失败的翻译。
- 仅保留通过所有单元测试的翻译作为高置信度伪并行样本,用于无监督模型的微调。
- 模型在经过过滤的、通过测试的翻译上进行微调,从而提升其生成语义正确代码的能力。
- 该方法支持离线过滤(预处理)和在线过滤(训练期间),后者可动态重新评估翻译。
- 该方法与现有无监督代码翻译框架(如TransCoder)兼容,并可扩展至其他具备可用测试生成器的语言。
实验结果
研究问题
- RQ1能否利用自动化单元测试来过滤通过回译生成的错误或无法编译的代码翻译?
- RQ2使用可执行测试结果过滤翻译是否能带来可测量的代码翻译准确率提升?
- RQ3与标准回译相比,基于测试的过滤在降低翻译错误率方面表现如何?
- RQ4该方法能否在多种编程语言对之间泛化,包括语义差异较大的语言对(如Python到C++)?
- RQ5在无监督设置中,通过测试的翻译在多大程度上可作为可靠的监督信号?
主要发现
- 所提方法在Java→Python翻译任务上优于先前最先进方法16.3%,在Python→C++翻译任务上提升24.1%。
- 在Python→C++语言对上,翻译错误率降低了35.7%,显著减少了噪声。
- 在所有研究的语言对中,计算准确率平均提升了12.6个百分点。
- 即使在语法上相似,通过单元测试的翻译也显著更准确、语义更正确。
- 该方法具有鲁棒性和泛化能力:无需并行数据或语言特定规则集即可提升性能。
- 即使单元测试仅针对一种语言(如Java)提供,该方法仍能有效迁移至其他语言,表现出强可迁移性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。