Facebook の研究者は、人間の言語の教師なし機械翻訳における最近の進歩をソースコード変換システムに応用しました。
ArXiv を通じて最近配布された研究論文では、苦境に立たされている広告業界の科学者たちが TransCoder と呼ばれるプロジェクトについて説明しています。
TransCoderはトランスパイラ(トランスコンパイラ、ソースコードからソースコードへのコンパイラとも呼ばれます)です。DartやTypeScriptといった様々な最新プログラミング言語には、異なる言語のソースコードを変換できるトランスパイラが搭載されています。
TransCoder は、この機能が組み込まれていない COBOL や Python 2 などの古い言語で使用することを目的としています。また、直接的なトランスパイル パスがない別の言語のコードベースにソース コードを統合する必要がある場合にも使用します。
自動コードコンバータの構築を試みる理由の一つは、そうした作業は高額になりがちであることです。論文では、オーストラリア・コモンウェルス銀行がプラットフォームをCOBOLからJavaに移行するために7億5000万ドルと5年の歳月を費やした事例を指摘しています。
トランスパイラーとそれに続く微調整によって、こうした移行はより迅速かつ安価に行えるはずだが、銀行プラットフォームプロジェクトにアクセンチュアとSAPが関与していたことは、価格面ではあまりプラスにはならなかっただろう。ご存知の通り、管理手数料は勝手に回収されるものではない。
ここ数年、FacebookのAI研究者たちは、ニューラルネットワークを用いて教師なし機械翻訳を行う方法を考案してきました。例えば英語とフランス語の単語ペアをシステムに入力するのではなく、ニューラルネットワークは2つの異なる言語の単一言語データセットから文を取得し、「潜在空間」と呼ばれるデータ表現にそれらをマッピングします。これにより、システムは教師やデータラベル付けなしに、2つの言語間の翻訳を行えます。
機械の心を試してみましょう
フランスを拠点とするFacebook AIグループのメンバーであるMarie-Anne Lachaux、Baptiste Rozière、Lowik Chanussot、Guillaume Lampleは、このアプローチをTransCoderの教師なし学習に適用しました。GitHubプロジェクトのオープンソースコードを用いて、C++、Java、Python間で関数を正確に変換するシステムを構築しました。
開発者たちは、世界を「もう少し歓迎する」ために、好ましくないコード用語を排除する取り組みを再開した。
続きを読む
「TransCoderはPythonからC++へのプロジェクトの移植に役立つ可能性があります」と、ラショー氏、ロジエール氏、ランプル氏はThe Registerへのメールで述べています。「強い型付け言語で書かれたコードは理解しやすいため、コードの実行速度と保守性が向上する可能性があります。しかし、TransCoderがコード品質の悪さに関するあらゆる問題を解決するわけではありません。」
彼らは、コードの重複、不適切な変数名と関数名、最適ではないアルゴリズムが TransCoder では解決できない問題であると指摘しました。
彼らによると、TransCoderは開発者支援ツールとして開発されており、まだ開発の初期段階にあるという。「現在、TransCoderは関数レベルの翻訳しかできず、プロジェクト全体を翻訳することはできません」と彼らは述べた。「生成された関数と製品版のコードはテストが必要であり、正確性は保証されていません。」
研究者によると、機械言語翻訳は今やプロの翻訳者の間でも広く受け入れられており、機械学習ベースのツールが進化するにつれて、プログラマーもそれを採用するようになるだろうと彼らは考えている。
システムをテストするために、852 個の並列関数と関連する単体テストのテスト セットを作成しました。
「並列データは提供されていないにもかかわらず、モデルは高い精度で関数を翻訳し、3つの言語間で標準ライブラリの関数を適切に調整し、ルールベースの商用ベースラインを大幅に上回っています」と論文は説明している。
比較に使用されたベースラインは、JavaからPythonへの変換フレームワークであるj2pyと、C++をJavaに変換する商用ソースコードコンバータであるTangible Software Solutionsのものです。論文では、TransCoderは「計算精度の点で両方のベースラインを大幅に上回り、C++→JavaとJava→Pythonの方向でそれぞれ74.8%と68.7%の精度を達成したのに対し、ベースラインでは61%と38.3%だった」と主張されています。
ラショー氏、ロジエール氏、ランプル氏は、TransCoder は、たとえば Python のソース コードを、C++ や Java などのコンパイラで最適化できるオーバーヘッドの少ない言語に変換することで、コードのパフォーマンスを向上させることができると述べました。
「自動翻訳は、計算性能の点では概ね人間による翻訳と同等になると考えています」と研究者らは述べています。「しかし、熟練したプログラマーであれば、翻訳以上のこと(例えばアルゴリズムの改良)を行ったり、アルゴリズムをより効率的にするための工夫(例えば、ブール配列の演算ではなく整数のビット演算)をしたりすることも可能ですが、私たちの自動翻訳ではそうはいきません。」
彼らは、TransCoderがレガシーコードをより現代的な言語に移植することで、レガシーコードの処理に利用されることを期待しています。Facebookは多くの企業の中でレガシーコードを抱えており、機械学習アプリケーションを通じてコードベースを改善する方法を検討しているとのことです。
「ソースコードとデータセットを公開する予定です」とラショー氏、ロジエール氏、ランプル氏は述べた。「また、再学習のためのインフラを持たない人々のために、モデルの最適なバージョンを公開する予定です。これが、この方向へのさらなる研究を促進することを期待しています。」®