Skip to main content
QUICK REVIEW

[論文レビュー] Learning to Complete Code with Sketches

Daya Guo, Alexey Svyatkovskiy|arXiv (Cornell University)|Jun 18, 2021
Software Engineering Research被引用数 8
ひとこと要約

この論文では、プログラミング言語の文法に従って、不確実性がある箇所に意図的に『穴』(■)を残した部分的なコード(スケッチ)を生成する、TransformerベースのモデルであるGRAMMFORMERを紹介する。標準の自己回帰モデルに比べ、10–50%高い精度の完成コードを生成し、37–50%長い、より正確なスケッチを生成する。文法に従った生成と強化学習による最適化により、真のコードと一致する長く穴の少ない予測を促進する。

ABSTRACT

Code completion is usually cast as a language modelling problem, i.e., continuing an input in a left-to-right fashion. However, in practice, some parts of the completion (e.g., string literals) may be very hard to predict, whereas subsequent parts directly follow from the context. To handle this, we instead consider the scenario of generating code completions with "holes" inserted in places where a model is uncertain. We develop Grammformer, a Transformer-based model that guides code generation by the programming language grammar, and compare it to a variety of more standard sequence models. We train the models on code completion for C# and Python given partial code context. To evaluate models, we consider both ROUGE as well as a new metric RegexAcc that measures success of generating completions matching long outputs with as few holes as possible. In our experiments, Grammformer generates 10-50% more accurate completions compared to traditional generative models and 37-50% longer sketches compared to sketch-generating baselines trained with similar techniques.

研究の動機と目的

  • 標準のコード言語モデルが誤ったコードを生成してしまうという限界を是正し、コード完成の際に不確実性を明示的に『穴』として示すことで、信頼性を向上させること。
  • プログラミング言語の文法を生成段階で活用することで、より正確で長いスケッチ(プレースホルダーを含む部分コード)を生成する手法を開発すること。
  • スケッチから導出された正規表現パターンと真のコードを照合することで、スケッチの正しさと明確さを測る新しい評価指標、REGEXACCを設計すること。
  • 長く穴の少ないスケッチを生成するように最適化する強化学習による訓練により、誤った予測を回避するモデルを訓練すること。
  • 文法に従ったスケッチに配慮した生成が、PythonおよびC#のコード補完タスクにおいて、標準の自己回帰モデルを上回ることを実証すること。

提案手法

  • GRAMMFORMERは、部分的な構文木を構築することでコードを生成するTransformerベースのアーキテクチャを採用しており、非終端記号のノードを出力で『穴』(■)として残すことができる。
  • モデルは強化学習により訓練され、スケッチ長(終端記号の数)を最大化し、穴の数を最小化する報酬関数を採用することで、正確で完全な提案を促進する。
  • 新規指標としてREGEXACCを導入:スケッチを正規表現パターンに変換(■を".+"に置換)し、その正規表現が真のコードと一致するかを確認し、穴でないトークンの割合でスケーリングする。
  • 訓練データは、真のコード完成コードに穴を挿入することで合成され、強化学習の監視信号として利用される。
  • モデルはプログラミング言語の正式な文法を活用して生成をガイドすることで、穴があっても構文的に正しいコードを保証する。
  • 標準の自己回帰モデルとは異なり、GRAMMFORMERは左から右への盲目なトークン生成を行わず、構文に配慮したデコードにより、構造的に有効な完成コードを優先する。

実験結果

リサーチクエスチョン

  • RQ1神経的コード生成モデルを訓練して、誤ったトークンを生成するのではなく、意図的に『穴』を残したスケッチを生成させることは可能か? これによりコード補完の信頼性が向上するか?
  • RQ2文法に従ったスケッチに配慮した生成は、標準の自己回帰的言語モデルと比較して、コード補完の精度と完成度においてどのように異なるか?
  • RQ3長く穴の少ないスケッチを報酬とする強化学習の目的関数は、教師ありベースラインと比較して、コード補完の質を向上させられるか?
  • RQ4新規指標であるREGEXACCは、スケッチ品質のヒューリスティックな評価とどの程度相関するか?
  • RQ5より長い、より明確なスケッチ(穴の少ないもの)を生成できる能力は、開発者の体験を向上させ、デバッグ作業を軽減するか?

主な発見

  • GRAMMFORMERは、C#およびPythonのコード補完ベンチマークにおいて、標準の自己回帰的言語モデルに比べ10–50%高い精度のコード完成を生成した。
  • GRAMMFORMERは、類似した技術で訓練されたスケッチ生成ベースラインに比べ、スケッチ長が37–50%長いことを示し、より高い正確性と明確さを示している。
  • 提案されたREGEXACC指標は、真のコードとの正規表現一致を測定するとともに、実際に予測されたトークンの割合を考慮することで、スケッチの品質を効果的に捉えている。
  • 文法に配慮した目的関数を用いた強化学習は、スケッチ生成タスクにおいて、標準の左から右への自己回帰的生成を顕著に上回った。
  • モデルが非終端記号ノードを穴として残すことで、特定の値について不確実であっても、意味的に妥当で構造的に正しいコード提案を生成できるようになった。
  • 現在の結果は自動評価指標に依存しているため、スケッチの正しさと明確さのトレードオフをさらに検証するためにはヒューリスティックな評価が必要である。

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

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

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

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