Skip to main content
QUICK REVIEW

[論文レビュー] Leveraging Automated Unit Tests for Unsupervised Code Translation

Baptiste Rozière, Jie M. Zhang|arXiv (Cornell University)|Oct 13, 2021
Software Testing and Debugging Techniques参考文献 52被引用数 10
ひとこと要約

本稿では、バックトランスレーションによって生成されたノイズの多い翻訳をフィルタリングするために多言語ユニットテストを活用する、新しい非教師ありコード翻訳手法を提案する。実行可能なテストスイートを用いて候補翻訳を検証することで、より高品質で意味的に正しいコードが得られ、Python→C++翻訳においては先行する最先端モデルを最大24%上回り、誤り率も35%以上低減する。

ABSTRACT

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%.

研究の動機と目的

  • 並列データが乏しく、ニューラルモデルが入力ノイズに敏感な低リソースな非教師ありソースコード翻訳の課題に対処すること。
  • 微細なトークンレベルの変更によって無効または意味的に誤ったコードが生成されるバックトランスレーションが引き起こす翻訳エラーを低減すること。
  • 自動ユニットテストを意味的検証メカニズムとして用いて、正しいまたは実行可能な翻訳のみをフィルタリングすることで翻訳品質を向上させること。
  • 異なる言語の非ペairedソースコードから、完全にテスト済みのペアドモノリンガルコーパスを構築し、非教師ありモデルのファインチューニングを改善すること。
  • テスト駆動フィルタリングが、並列学習データを必要とせずに翻訳性能を顕著に向上させることを実証すること。

提案手法

  • 本手法は、異なるプログラミング言語の非ペアドソースコードから、バックトランスレーションを用いて擬似並列モノリンガルデータを生成する。
  • 既存の多言語ユニットテストスイートを活用して、候補翻訳の実行を検証し、実行に失敗したものを破棄する。
  • すべてのユニットテストに合格した翻訳のみが、ファインチューニング用の高信頼度の擬似並列例として保持される。
  • フィルタリング済みでテストに合格した翻訳に基づいてモデルをファインチューニングすることで、意味的に正しいコードを生成する能力が向上する。
  • 本手法は、オフラインフィルタリング(事前処理)とオンラインフィルタリング(トレーニング中)の両方をサポートし、後者は翻訳を動的に再評価する。
  • 本手法は、TransCoderなどの既存の非教師ありコード翻訳フレームワークと互換性があり、利用可能なテストジェネレータを備えた他の言語へも拡張可能である。

実験結果

リサーチクエスチョン

  • RQ1自動ユニットテストを用いて、バックトランスレーションによって生成された誤った、またはコンパイル不能なコード翻訳をフィルタリングできるか?
  • RQ2実行可能なテスト結果を用いて翻訳をフィルタリングすることで、コード翻訳精度に測定可能な向上が得られるか?
  • RQ3テストベースのフィルタリングは、標準的なバックトランスレーションと比較して、翻訳誤り率の低減にどの程度寄与するか?
  • RQ4本手法は、意味論的差が顕著な言語ペア(例:PythonからC++)を含む多様なプログラミング言語ペアに一般化可能か?
  • RQ5テストに合格した翻訳が、非教師あり設定において信頼できる監視信号としてどの程度有効に機能するか?

主な発見

  • 提案手法は、Java→Python翻訳において前人最高を16.3%上回り、Python→C++翻訳においては24.1%上回った。
  • Python→C++言語ペアでは翻訳誤り率が35.7%低減され、顕著なノイズ低減が確認された。
  • 研究対象のすべての言語ペアにおいて、計算精度が平均12.6ポイント向上した。
  • ユニットテストに合格した翻訳は、構文的に類似しているにもかかわらず、合格しない翻訳よりも顕著に正確で意味的に整合性がある。
  • 本手法は頑健で汎用的である:並列データや言語固有のルールセットを必要とせず、性能向上を達成する。
  • ユニットテストが1つの言語(例:Java)にのみ存在する場合でも、本手法は他の言語へ強く転送可能であることが示された。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。