教師なしプログラミング言語翻訳 TransCoder

Unsupervised Translation of Programming Languages

まとめ

  • どんなもの?

  • 先行研究と比べてどこがすごい?

    • 本研究は教師なしでペアデータ不要.BLEUスコア等に代わってcomputational accuracyを導入し,計算結果が一致したものを正解とみなしている.これにより正しいプログラムなのに評価が低かったり,その逆が発生せずに評価できている.また,ルールベースの商用システムを上回る性能を示している(C++ to Javaで 61% -> 74.8%に改善など)
  • 技術や手法のキモはどこ?

    • モデル構造はseq2seqで,encoder, decoderにtransformer構造を採用,すべての言語(C++, Java, Python)にわたって同じモデルを1つだけ使う
      • Lampleら[32]の教師なし機械翻訳の3つの原理(初期化,言語モデリング,逆翻訳)を使用して訓練
        1. 言語間にわたって,似た意味のsequenceが同じ潜在空間にマップされるように事前訓練する.Lample and Conneau[29]のmaskされた言語モデル目的関数の事前訓練[14]を採用(一部をマスクした系列を入力して,次のtokenを予測).プログラミング言語には,言語間をまたがって存在する共通トークン(アンカーポイントが大量にあるので,modelがcross-lingualな性質を持つようになる).異なる言語batchの系列を交互に入力する.
        2. seq2seqのencoderは1の事前訓練したモデルで初期化する.decoderはランダム初期化.decoderを訓練するため,Denoising Auto Encoding objectiveで訓練.入力文を[30]のrandom mask, remove, shuffleで破壊し,復元するようにdecodeさせる.encoderの出力がnoisyだったとしても妥当な関数を生成するように訓練される.encoderも入力のnoiseに強くなる(3のback-translationで有用になる)
        3. test時に何をすべきか教えるために逆翻訳を使用.source-to-targetモデルとtarget-to-sourceモデルを対で用意して同時に訓練する.target-to-sourceはtarget系列をsourceに戻すが,noisyなsourceが生成される.source-to-targetは弱教師ありでそのnoisy sourceからtarget文を復元する.これを互いに収束まで繰り返して同時に訓練.
    • 事前訓練では512トークンからなるソースコードの32系列のbatch,訓練では6000トークンのbatchでdenoising AEとback-translationで交互に訓練.adamと[45]の学習率スケジューラ,GPUはV100が32個.小数点精度をfloat16にしてモデルサイズを下げ,速度を上げる
    • tokenizerは言語ごとに別々.コメントはソースコードに残したほうが性能が良い
  • どうやって有効だと検証した?

    • reference match
      • 正解と完全に一致した翻訳の割合
    • BLEUスコア
    • computational accuracy
      • 本論文が提案した評価指標.hypothesis functionが同じ入力を与えて正解と同じ結果を出力するか評価する.すべての入力に対して正解と同じ結果を返せばhypothesisは正しいと判断する.
      • computational accuracyでは2つの結果の組を使う.Beam Nはビーム中に最低1つ正しい関数があった割合,Beam N - Top1はビーム中の最も高いlog-probabilityが正しい翻訳だった割合
  • 議論はある?

    • C++ to Javaでは3.1%しか正解と完全一致しなかったが,60.9%が期待される出力を返した.さらに,BLEUによる評価は比較的平坦であり,computational accuracyとの相関がなかった.これはreference matchとbleuによる評価の問題を示している
      • といっているが,表1を見ると,bleuスコアは割とcomputational accuracyと整合性があるように見える
    • greedy decodingと比較して,beam searchはcomputational accuracyを大きく増加させる.Java->Pythonでbeam25の場合33.7%増加.log-probabilityが最も高いhypothesisを返すようにした場合,性能は落ちる.
  • 次に読むべき論文は?

    • [32]
      • 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.
        • BPE codesの学習
  • その他