Facebook AI はディープラーニングを使用してプログラミング言語の変換を実現し、コードベースの移行はもはや困難ではありません。

Facebook AI はディープラーニングを使用してプログラミング言語の変換を実現し、コードベースの移行はもはや困難ではありません。

COBOL などの従来のプログラミング言語から Java や C++ などの最新の言語にコード ベースを移行することは、ソース言語とターゲット言語の両方の専門知識を必要とする困難な作業です。

たとえば、COBOL は今でも世界中のメインフレーム システムで広く使用されているため、企業、政府、その他の組織では、コード ベースを手動で翻訳するか、1950 年代に遡る言語で記述されたコードを維持するかの選択を迫られることがよくあります。

Facebook AI は、コードの移行をより簡単に、より効率的にするために Transcoder を開発しました。 Facebook AI のアプローチでは、AI システムをトレーニングするためのデータを必要とせずに、あるプログラミング言語から別のプログラミング言語にコードを変換できます。

Facebook AI は、TransCoder が C++、Java、Python 間の言語変換を正常に完了できることを実証しました。 TransCoder は、オープン ソースおよび商用のルールベースの翻訳プログラムよりも優れたパフォーマンスを発揮します。 Facebook AI の評価では、モデルは Java 関数の 90% 以上を C++ に、C++ 関数の 74.8% を Java に、関数の 68.7% を Java から Python に正しく変換しました。

比較すると、市販のツールでは C++ から Java への関数の 61.0% しか正確に変換されず、オープン ソース トランスレータでは Java 関数の 38.3% しか C++ に正確に変換されませんでした。

プログラミング言語の移転においては、自己監督型トレーニングが特に重要です。従来の教師あり学習法は、超並列データセットでのトレーニングに依存していますが、これは COBOL から C++ へ、または C++ から Python へ移行するには実現可能ではありません。

TransCoder は、1 つのプログラミング言語でのみ記述されたソース コードに完全に依存します。プログラミング言語の専門知識は必要なく、他のプログラミング言語にも簡単に一般化できます。

TransCoder は、従来のコード ベースを、一般的に効率が良く保守が容易な最新のプログラミング言語に更新するのに役立ちます。また、ニューラル機械翻訳技術を新しい分野にどのように適用できるかについても説明します。

seq2seqモデルが大きな役割を果たした

自然言語においては、ニューラル機械翻訳の最近の進歩は、自動機械翻訳システムへの依存度が高まっているプロの翻訳者の間でも広く受け入れられています。しかし、この分野では並列データが不足しているため、トランスコーディングへの応用は限られています。プログラマーは依然としてルールベースのトランスコーダーに依存しており、出力をレビューしてデバッグするには専門家が必要であり、あるいは単純にコードを手動で翻訳するだけです。 TransCoder は、プログラミング言語への教師なし機械翻訳の最近の進歩を活用して、これらの課題を克服します。

Facebook AI は、トランスフォーマー アーキテクチャを備えたエンコーダーとデコーダーで構成される seq2seq モデルの構築に特別な注意を払いました。 TransCoder は、Facebook AI の XLM に関する以前の取り組みに一部基づいて、すべてのプログラミング言語で機能する単一の共有モデルを使用します。 Facebook AI は、初期化、言語モデリング、逆翻訳という教師なし機械翻訳の 3 つの原則に従います。

この図は、TransCoderが教師なし機械翻訳の3つの原則をどのように活用しているかを示しています。

Facebook AI はまず、オープンソースの GitHub プロジェクトのソース コードを使用して、MLM 目的を使用して Facebook AI のモデルを事前トレーニングしました。自然言語処理のコンテキストと同様に、この事前トレーニングにより、言語間の埋め込みが作成されます。つまり、同様のコンテキストで使用されるさまざまなプログラミング言語のキーワードは、埋め込み空間で非常に近くなります (例: catch と except)。

これらの埋め込みの言語間性質は、多くの言語に存在する多数の共通トークンに由来します。トークンの例には、C++、Java、Python に共通するキーワード (for、while、if、try など) のほか、ソース コード内に表示される数学演算子、数字、英語の文字列などがあります。

MLM による事前トレーニングにより、TransCoder は入力シーケンスの高品質な表現を生成できます。ただし、デコーダーはソース表現に基づいてシーケンスをデコードするようにトレーニングされたことがないため、変換機能が欠けています。この問題に対処するために、Facebook AI はノイズ除去オートエンコーディング (DAE) 目標を使用してシーケンスをエンコードおよびデコードするようにモデルをトレーニングしました。

DAE は教師あり機械翻訳アルゴリズムと同様に機能し、モデルはシーケンスの破損バージョンが与えられた場合にトークンのシーケンスを予測するようにトレーニングされます。テスト時に、モデルは Python シーケンスをエンコードし、それをデコードして、C++ 開始シンボルを使用して C++ 変換を生成できます。

このビデオでは、同様の機能を持つキーワードがどのようにグループ化されるかを示します。

翻訳を生成するには、クロスリンガル モデルの事前トレーニングと自動ノイズ除去だけで十分です。ただし、モデルはテスト時に、ある言語から別の言語に機能を翻訳するという本来の目的を果たすようにトレーニングされたことがないため、これらの翻訳の品質は低いことがよくあります。

この問題に対処するために、Facebook AI は、弱く監視された設定で単一言語データを活用する最も効果的な方法の 1 つである逆翻訳を使用します。 Facebook AI は、ターゲット言語ごとにモデルと異なる開始マーカーを使用します。ソースからターゲットへ、ターゲットからソースへ並行して翻訳するようにトレーニングされます。

次に、モデルを弱教師方式でトレーニングして、ノイズの多いソース シーケンスからターゲット シーケンスを再構築し、ソースからターゲットへの変換を学習します。ターゲットからソースへのバージョンとソースからターゲットへのバージョンは、収束するまで並行してトレーニングされます。

これまでのソースコード翻訳研究のほとんどは、モデルを評価するために、BLEU スコアやトークン間の相対的な重複に基づくその他の方法など、自然言語で使用されるメトリックに依存しています。ただし、これらのタイプのメトリックはプログラミング言語には適していません。構文上の違いが小さい 2 つのプログラムは、コードを実行すると非常に異なる結果が生成されながらも、高い BLEU スコアを達成する場合があります。逆に、異なる実装を持つ意味的に同等のプログラムは、BLEU スコアが低くなります。

もう 1 つの指標は参照一致、つまりフィールド参照と完全に一致する翻訳の割合ですが、意味的に同等のコードを識別できないため、翻訳の品質が過小評価されることがよくあります。

TransCoder やその他のトランスコーディング技術のパフォーマンスをより適切に測定するために、Facebook AI は計算精度と呼ばれる新しい指標を作成しました。これは、同じ入力が与えられた場合に、仮定された関数が参照と同じ出力を生成するかどうかを評価します。 Facebook AI は、このメトリックを計算するために使用されるスクリプトとユニット テストとともに、テス​​ト セットもリリースします。

以下の例は、TransCoder がサンプル コードを Python から C++ に変換する方法を示しています。 Facebook AI はモデル入力として次のコードを使用します。

TransCoder は、Python 入力関数 SumOfKsubArray を C++ に正常に変換します。また、関数の引数の型、戻り値の型、パラメータを推測することもできます。このモデルは、Python の dequeue() コンテナを C++ 実装の dequeue<> に接続します。 C++ でのモデルの出力は次のとおりです。

プログラミング言語の変換は実用的なアプリケーションにメリットをもたらす

自動コード変換により、社内またはオープンソース プロジェクトで作業するプログラマーは、社内の他のチームや他のオープンソース プロジェクトのさまざまなコードをより簡単に統合できるため、効率が向上する可能性があります。また、古い言語で書かれたレガシー コード ベースを更新するための労力とオーバーヘッドを大幅に削減することもできます。

逆コンパイルの進歩により、企業やその他の機関は最新の言語にアップデートし、将来のイノベーションを促進することができ、その結果、サービスを利用する人々だけでなく機関自体にも利益をもたらす可能性があります。プログラミング言語の機械翻訳の進歩は、複数の言語でプログラミングを学ぶ時間やお金がない人々の助けにもなります。

[[334886]]

さらに広い意味では、AI は他のプログラミングタスクにも役立つ可能性があります。たとえば、Facebook AI は以前、コーディングエラーの修正を自動的に提案することを学習するニューラルコード検索ツールを共有しました。 TransCoder はデバッグやコード品質の向上を支援するために設計されたものではありませんが、エンジニアがレガシー コード ベースを移行したり、他の言語で記述された外部コードを操作したりするのに役立つ可能性があります。

Facebook AI は、ディープラーニングを使用したコード翻訳に関する将来の研究を促進するために、他の研究者が意味的に盲目的なモデルではなく計算精度を使用してコード翻訳モデルを評価できるようにするテスト セットもリリースしました。

Facebook AI は、他社が TransCoder の取り組みを基にして新たな翻訳タスクのための自己教師学習を発展させていくことを期待しています。

<<:  ニューラルネットワーク+量子コンピュータ?中国の学者が初の量子コンピューティング共同設計フレームワークをオープンソース化

>>:  異常検出に機械学習を使用する際に尋ねるべき 7 つの質問

ブログ    
ブログ    
ブログ    

推薦する

...

機械学習を使用したデータマッピング

[[278276]]中小企業から大企業まで、ほぼすべての企業が顧客の注目を集める機会を求めて競争して...

新たな調査でAIのROIの急上昇と将来の課題が浮き彫りに

Dataiku と Databricks が発表した新しい共同調査によると、生成型人工知能の急速な導...

交通渋滞の解決、放射線の監視、現場での捜索救助...ドローンにはどんな素晴らしい用途があるのでしょうか?

01 トラフィック監視セキュリティ任務におけるドローンの有望な用途の 1 つは、交通監視システムの...

Spark を使用して行列分解推奨アルゴリズムを学習する

[[182792]]協調フィルタリング推奨アルゴリズムにおける行列分解の応用では、推奨アルゴリズムに...

50%-70%スリムダウン、Ctrip Taroミニプログラムサイズ削減計画

著者についてCtrip のフロントエンド開発者である Can は、現在ミニプログラムの開発に従事して...

プログラマーはアルゴリズム思考をどのように向上させることができるでしょうか?

[[255991]]継続的な学習と継続的な開発は、主流の IT 業界のプログラマーにとって日常的な...

バブルソートに加えて、Python の組み込みソートアルゴリズムをご存知ですか?

プログラミング アルゴリズムに関して、多くの読者が学校で最初に学ぶのはバブル ソートかもしれませんが...

機械学習が戦略ゲームを改善する方法

[[390356]]ポジティブなゲーム体験を生み出すために、ゲームデザイナーはゲーム内のバランスを繰...

2019 年に注目すべき 11 の JavaScript 機械学習ライブラリ

ほとんどの機械学習は Python などの言語で行われますが、フロントエンドとバックエンドの両方にお...

7nmプロセス限界を突破した世界初の3DウェーハレベルパッケージングプロセッサIPUがリリース

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

世界はとても広い。AIがあなたと一緒に世界を旅します

[オリジナル記事は51CTO.comより] 私の周りには、「世界は広いから、外に出て旅をしたい」と言...

顔認識技術の新たな進歩:自閉症やADHDを検出できる

[[187357]]顔の表情や頭の動きから自閉症やADHDの患者を識別できる新しいコンピューターアル...

人工知能の時代が到来すると、私たちはどこへ向かうのでしょうか?

[[348861]]人工知能の時代が本格的に到来しました。私たちの生活のいたるところに見られる人工...

上海交通大学が「人間行動理解エンジン」を発表:AIが超大作映画のあらゆる行動をフレームごとに理解

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...