言語間にわたって,似た意味のsequenceが同じ潜在空間にマップされるように事前訓練する.Lample and Conneau[29]のmaskされた言語モデル目的関数の事前訓練[14]を採用(一部をマスクした系列を入力して,次のtokenを予測).プログラミング言語には,言語間をまたがって存在する共通トークン(アンカーポイントが大量にあるので,modelがcross-lingualな性質を持つようになる).異なる言語batchの系列を交互に入力する.
seq2seqのencoderは1の事前訓練したモデルで初期化する.decoderはランダム初期化.decoderを訓練するため,Denoising Auto Encoding objectiveで訓練.入力文を[30]のrandom mask, remove, shuffleで破壊し,復元するようにdecodeさせる.encoderの出力がnoisyだったとしても妥当な関数を生成するように訓練される.encoderも入力のnoiseに強くなる(3のback-translationで有用になる)
computational accuracyでは2つの結果の組を使う.Beam Nはビーム中に最低1つ正しい関数があった割合,Beam N - Top1はビーム中の最も高いlog-probabilityが正しい翻訳だった割合
議論はある?
unit testは合格した.C++ to Javaでは3.1%しか正解と完全一致しなかったが,60.9%が期待される出力を返した.さらに,BLEUによる評価は比較的平坦であり,computational accuracyとの相関がなかった.これはreference matchとbleuによる評価の問題を示している
Guillaume Lample, Myle Ott, Alexis Conneau, Ludovic Denoyer, and Marc’Aurelio Ranzato. Phrase-based & neural unsupervised machine translation. In EMNLP, 2018.
3つの訓練手法
[29]
Guillaume Lample and Alexis Conneau. Cross-lingual language model pretraining. arXiv preprint arXiv:1901.07291, 2019.
事前学習
[31]
Guillaume Lample, Alexis Conneau, Marc’Aurelio Ranzato, Ludovic Denoyer, and Hervé Jégou. Word translation without parallel data. In ICLR, 2018.
cross lingual word embedding
[6]
Mikel Artetxe, Gorka Labaka, and Eneko Agirre. Learning bilingual word embeddings with (almost) no bilingual data. In Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), volume 1, pages 451–462, 2017.
cross lingual word embedding
[28]
Taku Kudo and John Richardson. Sentencepiece: A simple and language independent subword tokenizer and detokenizer for neural text processing. arXiv preprint arXiv:1808.06226, 2018.
共通のtokenizer
[42]
Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural machine translation of rare words with subword units. In Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics, pages 1715–1725, 2015.
トランスコンパイラは、ソース・ツー・ソース・トランスレータとも呼ばれ、高レベルのプログラミング言語(C++やPythonなど)のソースコードを別の言語に変換するシステムです。 トランスコンパイラは主に相互運用性のために使用され、時代遅れの言語(COBOL、Python 2など)で書かれたコードベースを最新の言語に移植するために使用されます。 一般的には、ソースコードの抽象構文ツリーに適用される、手作業で作られた書き換えルールに依存します。 残念なことに、結果として得られる翻訳は、しばしば可読性に欠け、ターゲット言語の規則を尊重できず、適切に動作するためには手動での修正が必要となります。 全体的な翻訳プロセスは時間がかかり、ソース言語とターゲット言語の両方の専門知識を必要とするため、コード翻訳プロジェクトは高額になります。 ニューラルモデルは、自然言語翻訳の文脈ではルールベースのものよりもはるかに優れていますが、この領域では並列データが少ないため、トランスコンパイルへの応用は限られています。 本論文では、教師なし機械翻訳における最近のアプローチを活用して、完全教師なしニューラル・トランスコンパイラを訓練することを提案する。 我々は、オープンソースのGitHubプロジェクトのソースコードを用いて我々のモデルを訓練し、C++、Java、Python間の関数を高精度に翻訳できることを示す。 我々の手法は、単一言語のソースコードのみに依存しており、ソース言語やターゲット言語の専門知識を必要とせず、他のプログラミング言語にも容易に一般化できる。 また、852個の並列関数からなるテストセットを構築し、翻訳の正しさをチェックするためのユニットテストとともに公開しています。 我々は、我々のモデルがルールベースの商用ベースラインを大幅に上回ることを示している。