Microsoftは、実際のソフトウェアに存在するバグのデータを使わずに、バグを発見する深層学習モデルをトレーニングする新たな手法を開発している。
ソースコードの静的解析を行うことでセキュリティホールを発見するためのツールはすでにいくつも存在するが、機械学習を使ってバグを検出、修正しようという試みも行われている。コードのバグを見つけ、修正する作業は、ソフトウェア開発者の日常業務の中でも、時間がかかり、ストレスがたまることも多い部分だ。Microsoftの研究者は、深層学習でこのような問題に対処し、開発者が優れたソフトウェアをより速く提供できるようにしたいと考えたという。
ケンブリッジのMicrosoft Research Labの研究者は、そのような新たな取り組みの1つとして、「自己教師あり学習によってバグの検出と修復を行うためのアプローチ」をPythonで実装した「BugLab」に関する論文を発表した。BugLabでは、ラベル付きデータを使わずにトレーニングされた2つのモデルを使用して「自己教師あり学習」を行う。
Microsoftの研究者が自己教師あり学習を採用したのは、バグを発見する深層学習モデルをトレーニングするために使用できる、注釈が付いた現実のバグのデータがほとんど存在しないためだ。トレーニングに利用できるソースコードは大量に存在するが、そのほとんどには注釈が付いていない。
BugLabは、プログラムの静的解析を使った従来の手法によって発見できる重大なバグではなく、発見が困難な軽微なバグを見つけることを目指して開発された技術だ。このアプローチには、バグを発見するモデルを人間の手でコーディングするというコストの高いプロセスを回避できるという特長がある。
米国時間12月6日から開催されているNeural Information Processing Systems(NeurIPS)2021のカンファレンスで発表された論文「Self-Supervised Bug Detection and Repair」(自己教師あり学習によるバグの検出と修復)によれば、Microsoftの研究グループは、この仕組みを使って、オープンソースのソフトウェアに19件の未発見のバグを発見したという。
論文の著者であるMicrosoft Researchの主席研究員Miltos Allamanis氏とMicrosoftのシニア主席研究マネージャーMarc Brockschmidt氏は、「BugLabは、『かくれんぼ』によって、ラベル付きのデータを使わずにバグの検出と修正を行う方法を学習できる」と説明している。
コードに存在するバグを発見し、修正するには、コードの構造を推論するだけでなく、「ソフトウェア開発者がコードのコメントや変数名などに残す不明瞭な自然言語のヒントを理解する必要があると研究者らは考えている。
BugLabでは、深層学習やコンピュータービジョン、自然言語処理の分野で使われている既存の自己教師あり学習の取り組みをベースにした、競合する2つのモデルを使用したアプローチを採用している。この手法は、ディープフェイクの作成にも使われることで知られている「GAN」(Generative Adversarial Network:敵対的生成ネットワーク)の考え方に着想を得たものだという。
論文では、「このケースでは、実際のバグから得たトレーニングデータを使わずにバグ検出モデルをトレーニングすることを目指している」と述べている。
BagLabでは、バグ選択モデル(bug selector)とバグ検出モデル(bug detector)の2つのモデルが使われている。論文では、「バグ選択モデルは、正しいと考えられる既存のコードに対して、バグを導入すべきか、導入するとすればどこに導入すべきか、どんなバグを導入するかを決定する(例:特定の「+」記号を「-」記号に置き換える)。次に、バグ選択モデルの選択に従って、コードが編集され、バグが導入される。その後、もう1つのモデルであるバグ検出モデルが、コードにバグが導入されているかどうかを判断して、バグがあると判断した場合、その場所を特定して修正する」と説明している。
この訓練プロセスは概念的にGANに似ているが、この「バグ選択モデルは新しいコードスニペットを最初から生成するわけではなく、(正しいと想定される)既存のコードの一部をリライト」するという。
研究者らが、Pythonのパッケージに存在する2374件の実際のバグからなるデータセットでテストを行ったところ、26%のバグが発見され、自動的に修正されたという。
ただしこの手法では、実際にはバグではないものがバグとして検出される例も非常に多かったため、モデルが実際に導入される前にさらなる進歩が必要になりそうだと説明されている。
この記事は海外Red Ventures発の記事を朝日インタラクティブが日本向けに編集したものです。