Command Palette
Search for a command to run...
Break-It-Fix-It: プログラム修復のための非監督学習
Break-It-Fix-It: プログラム修復のための非監督学習
Michihiro Yasunaga Percy Liang
概要
私たちは修復タスクについて検討します。評価者(例えば、コンパイラ)が入力の品質を評価する場合、目標は不良例(例えば、構文エラーのあるコード)を良好な例(例えば、構文エラーのないコード)に変換する修復システムを訓練することです。既存の研究では、ヒューリスティック手法(例えば、トークンの削除)を使用して良好な例を破壊し、(不良, 良好)ペアからなる訓練データを作成しています。しかし、この合成生成されたデータで訓練された修復システムは、実際の不良入力の分布に対して十分に汎化しません。このギャップを埋めるために、私たちは新しい訓練手法であるBreak-It-Fix-It (BIFI) を提案します。BIFIには以下の2つの重要なアイデアがあります:(i) 実際の不良入力に対する修復システムの出力を評価者でチェックし、良好(修正済み)な出力を訓練データに追加します;(ii) 良好なコードから現実的な不良コードを生成する破壊システムを訓練します。これらのアイデアに基づいて、破壊システムと修復システムを組み合わせてより多くのペアデータを生成しながら、反復的に更新を行います。私たちはGitHub-PythonとDeepFixという2つのコード修復データセットでBIFIを評価しました。GitHub-Pythonは新しく導入したデータセットで、ASTパースエラーのあるPythonコードの修復が目標です;DeepFixはコンパイラエラーのあるCコードの修復が目標です。BIFIは既存の方法よりも優れた性能を示し、GitHub-Pythonでは90.5%(+28.5%)、DeepFixでは71.7%(+5.6%)の修復精度を得ました。特に注目に値するのは、BIFIがラベル付きデータを一切必要としないことです;さまざまな修復タスクにおける非監督学習の強力な出発点となることを期待しています。