Skip to main content
QUICK REVIEW

[論文レビュー] Semantic Code Repair using Neuro-Symbolic Transformation Networks

Jacob Devlin, Jonathan Uesato|arXiv (Cornell University)|Oct 30, 2017
Software Engineering Research参考文献 14被引用数 29
ひとこと要約

本稿では、単体テストに依存せずに意味的バグ修正を行うための神経記号的フレームワークである、共有・特化・競争(SSC)を提案する。このフレームワークは、コードの共有ニューラル符号化、異なるバグタイプ向けの特化モジュール、および競争的なスコアリングを用いて正確な修正を予測する。実世界のバグにおいて41%の正確性を達成し、ベースラインのseq2seqモデルを著しく上回る性能を示した。

ABSTRACT

We study the problem of semantic code repair, which can be broadly defined as automatically fixing non-syntactic bugs in source code. The majority of past work in semantic code repair assumed access to unit tests against which candidate repairs could be validated. In contrast, the goal here is to develop a strong statistical model to accurately predict both bug locations and exact fixes without access to information about the intended correct behavior of the program. Achieving such a goal requires a robust contextual repair model, which we train on a large corpus of real-world source code that has been augmented with synthetically injected bugs. Our framework adopts a two-stage approach where first a large set of repair candidates are generated by rule-based processors, and then these candidates are scored by a statistical model using a novel neural network architecture which we refer to as Share, Specialize, and Compete. Specifically, the architecture (1) generates a shared encoding of the source code using an RNN over the abstract syntax tree, (2) scores each candidate repair using specialized network modules, and (3) then normalizes these scores together so they can compete against one another in comparable probability space. We evaluate our model on a real-world test set gathered from GitHub containing four common categories of bugs. Our model is able to predict the exact correct repair 41\% of the time with a single guess, compared to 13\% accuracy for an attentional sequence-to-sequence model.

研究の動機と目的

  • 単体テストや動作仕様にアクセスできない状況でも、正確な意味的コード修正を予測する統計モデルを開発すること。
  • プログラマーの意図や文脈を深く理解する必要がある非文法的バグを修正する課題に対処すること。
  • 共有表現と特化されたスコアリングモジュールを用いて、多様な意味的バグパターンに一般化可能なフレームワークを構築すること。
  • 実世界の、人間がキュレートしたバグデータセットを用いてモデルを評価し、実用的適用性と性能を評価すること。

提案手法

  • モデルは、ソースコードの抽象構文木の文脈的表現を生成するため、共有のRNNベースのエンコーダーを用いる。
  • 各修正タイプごとに特化したニューラルモジュールを採用し、共有コード表現に基づいて個々の修正候補のスコアを付ける。
  • 特化モジュールからのスコアは正規化され、共通の確率空間で比較され、候補間の公平な競争を可能にする。
  • フレームワークは、多様な意味的エラーのパターンを模倣するために、合成的に挿入されたバグを含む大規模な実際のPythonコードコーパスで学習される。
  • 2段階のアプローチにより、修正候補の生成(ルールベース)とスコアリング(ニューラル)が分離され、効率的かつ正確なランク付けが可能になる。
  • モデルは、合成バグセットおよび実世界のバグセット(GitHubからの人間がアノテートしたテストセットを含む)で評価される。

実験結果

リサーチクエスチョン

  • RQ1単体テストや動作仕様に依存せずに、ニューラルモデルが高精度な意味的コード修正を達成できるか?
  • RQ2共有表現と特化モジュールの組み合わせが、多様な意味的バグパターンにどの程度一般化できるか?
  • RQ3競争的スコアリング機構は、エンドツーエンドのシーケンス・ツー・シーケンスモデルと比較して、修正精度をどのように向上させるか?
  • RQ4トレーニングデータの多様性とスケールは、高レベルの修正パターンを学習する上でどのような役割を果たすか?
  • RQ5現実的な修正シナリオにおいて、モデルのパフォーマンスは人間の専門家と比べてどの程度か?

主な発見

  • SSCモデルは、GitHubからの実世界のテストセットにおいて41%の正確な修正精度を達成した。これは、ベースラインのアテンションを備えたシーケンス・ツー・シーケンスモデル(13%の正確性)を著しく上回る。
  • 人間の評価者も、すべての可能な修正候補の中から選択する際、同じテストセットで37%の正確性を示した。これは、認知的負荷が高い状況下で、モデルが人間のパフォーマンスを上回っていることを示している。
  • 上位4つのモデル予測候補に制限すると、人間のパフォーマンスは76%に向上した。これは、主な課題が理解不足ではなく認知的負荷にあることを示唆している。
  • モデルは「y.x = x」や「if (x c1 y) elif (x c2 y)」といった高レベルの修正パターンを学習し、表面的なトークン一致を超えて一般化している。
  • 失敗事例から、モデルは変数名や文字列リテラルといった語彙的キューに苦労していることが判明した。今後の研究では、サブワードまたは文字レベルの符号化の導入が求められる。
  • モデルはトレーニングデータから確率的パターンを暗黙的に学習している——例として、バージョンチェックで「<」を「<=」よりも好む傾向があるが、これはプログラムの意味論についての明示的推論を伴わない。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。