作って遊ぶ機械学習。

~基礎的な確率モデルから最新の機械学習技術まで~

もうバグに悩まされることもない?MITの研究者が人工知能を利用した自動デバッグシステムを開発

こんにちは。

MITの研究者が従来法よりも10倍多くのバグを修正できるアルゴリズムを開発したそうです。

news.mit.edu

 

・従来法の問題点

ソースコードのバグを自動修正するという研究は従来からありました。一般的な方法としては、修正したいソースコードに対する正解セット(入力値とそれに対する正しい出力値)をいくつか人間が用意してあげて、その正解セットに合致するような修正提案をシステムが一生懸命探すというものです。このような手法は論理的な計算を多く必要とするので時間がかかるのと、結局修正コードを作ってもらっても与えたセット以外の入力に対してめちゃくちゃな値を出して使えないとかいった問題がありました。

 

・大量のパッチからプログラムの修正パターンを学習

今回のMITの研究者が開発したアルゴリズムの革新的なところは、ソースコードの修正に機械学習技術*1を利用した点です。研究者らは、GitHubから大量のオープンソースプログラムの修正パッチを取得し、それを「学習データ」としてコードを自動修正するための汎用的な規則を抽出しました。機械学習アルゴリズムを使うには、生データ(今回はソースコード)に対してどのような特徴量を設計したらいいのかがひとつの重要なポイントになります。この研究ではソースコード上の変数にいくつかの特性(変化する値か定数か、グローバルかローカルか、など30種類)を与えることによって特徴量を設計しているようです。この特徴量の空間でバグの入ったコードと修正パッチの規則性を学習します。従来技術では1個か2個ほどのバグしか修正できなかったのに対して、今回の手法は15から18個ものバグを修正できたそうです。

 

・これからの課題と雑感

今のところはソースコード全体に影響を及ぼすような複雑なバグは修正できず、ローカルな一対一対応のような小さなバグを修正するのみとなっているようです。とはいえ、それでも人間のかなりの作業量を減らせることに間違いはありません。また、アルゴリズムの学習データとなるソースコードは日々オープンに蓄積されていきますし、今回の技術もまだまだ洗練されているとは言えないので、これからの技術改善に注目です。

 

*1:人工知能」は人間などの「知能」をコンピュータ上に実現するための技術の総称です。それに対して「機械学習」はもうちょっと工学寄りで、データから規則的な構造を自動発見して未来の予測や判断を行うための技術の総称です。