Intelと科学者がコード用のAI Clippyを開発:こんにちは。またロックフリーのブルームフィルタを開発されているんですね。何かお手伝いしましょうか?

Table of Contents

Intelと科学者がコード用のAI Clippyを開発:こんにちは。またロックフリーのブルームフィルタを開発されているんですね。何かお手伝いしましょうか?

インテルのエンジニアと、MIT およびジョージア工科大学の研究者は、2 つのコード スニペットが異なって書かれていても、同じ目的を達成しようとしているかどうかを予測するニューラル ネットワークを構築しました。

つまり、2つのルーチンを提示すれば、実装に関わらず、それらが同じ動作をするように設計されているかどうかを判断できるはずです。このAIシステムは、私たちが想定しているレコメンデーションエンジン開発への足がかりとなります。ネットワークは、膨大な数の共通アルゴリズムを用いてトレーニングされます。アプリケーションのソースコード内で、識別するようにトレーニングされたルーチンの1つと類似した動作を行う関数を発見した場合、その関数は、実績のある最適化されたルーチンに置き換え可能、あるいはそこから改変可能であることを指摘します。

これにより、コードブロックがテスト済みの既知の問題のないコードに置き換えられるため、バグの数を減らし、パフォーマンスを向上させることができます。プログラマーは、車輪の再発明をすることなく、ライブラリ関数を使用するように指示される可能性があります。開発者によると、このAIは「ソフトウェアテストの自動構築と欠陥軽減」にも使用できるとのことです。

ロボット

プログラマーの皆さん!StackOverflowのタブを閉じてください。このAIロボットがあなたの代わりにソースコードを作成します。

続きを読む

現時点では、「機械推論コード類似性(Machine Inferred Code Similarity)」、略してMISIMと呼ばれるこのシステムは、実用的なツールというよりは研究プロジェクトに近い。このシステムは、数万件のCおよびC++プログラムのデータセット内のアルゴリズムに類似したコードを認識するように学習された。これらのプログラムは、104のコーディング問題に取り組む学生によって作成された。データセット内で、同じ問題を解くプログラムのペアは類似しているとラベル付けされた。

ニューラルネットワークの開発者たちは、学習後、2つの関数が結果的に類似しているかどうかをシステムが判断できるかどうかをテストしました。これは、コードを1行ずつ単純に比較するだけの単純な作業ではありません。各ルーチンは異なる方法で記述されていても、同じタスクを実行する場合があります。MISIMは基本的に、2つのコードブロックが動作面で類似しているかどうかをパーセンテージで表します。

「MISIMはニューラルベースのコード類似性スコアリングアルゴリズムを提供し、学習したパラメータを使ってさまざまなニューラルベースのネットワークアーキテクチャで実装することができます」とインテルの主席科学者兼マシンプログラミングリサーチディレクターのジャスティン・ゴットシュリッヒ氏はThe Registerに語った。

MISIMのスコアリングアルゴリズムについて、研究者らは3つのニューラルネットワーク手法、すなわちグラフニューラルネットワーク(GNN)、リカレントニューラルネットワーク(RNN)、そしてバッグオブマニュアルフィーチャ(BoF)ニューラルネットワークを調査しました。MISMはGNNを用いた場合に全体的に最も優れたパフォーマンスを示しました。

研究チームが執筆し、arXivで共有した論文によると、GNNは2つのプログラムの類似性を75%以上の確率で正確に識別できた。現在、インテルはMISIMシステムをコード推奨エンジンへと改良する取り組みを進めている。

このタイプのシステムは、開発者が入力した単純なアルゴリズムの背後にある意図を認識できる。

Chipzillaは声明で、「この種のシステムは、開発者が入力した単純なアルゴリズムの背後にある意図を認識し、意味的には類似しながらもパフォーマンスが向上した候補コードを提示することができる」と述べた。これはまさにインテルのやり方そのものだ。同社のエンジニアのほとんどは、シリコン上のコードを高速化するツールを開発するソフトウェア開発者だ。

「コード推奨エンジンのような将来の自動コーディングツールを開発するには、システムがコードのどの部分が他の部分と類似しているかを理解する必要があります」とゴットシュリッヒ氏は語った。「この基盤がなければ、正確な推奨を行うことはできません。MISMは、こうしたより大規模で複雑なシステムを構築するための第一歩となるのです。」

彼は、そのようなエンジンが将来、例えばコード内のよくあるプログラミングミスや設計ミスを自動的に検出するなど、開発者の役に立つことを期待しています。「もし機械がバグを見つけて修正してくれるなら、ほとんどの開発者は喜んで機械に任せるでしょう。私もそうするでしょう」と彼は付け加えました。®

Discover More