Skip to main content
QUICK REVIEW

[論文レビュー] Neural Sketch Learning for Conditional Program Generation

Vijayaraghavan Murali, Letao Qi|arXiv (Cornell University)|Mar 16, 2017
Software Engineering Research被引用数 52
ひとこと要約

本論文は Bayou を提示する。プログラムスケッチ上で学習し、条件付きで型安全な Java ライクなコードを生成し、次に組合せ探索を用いてスケッチを完全なプログラムへ具現化するニューラル-シンボリック系統。限られたラベルから API 集約的なメソッド本体を予測する強い能力を示している。

ABSTRACT

We study the problem of generating source code in a strongly typed, Java-like programming language, given a label (for example a set of API calls or types) carrying a small amount of information about the code that is desired. The generated programs are expected to respect a "realistic" relationship between programs and labels, as exemplified by a corpus of labeled programs available during training. Two challenges in such conditional program generation are that the generated programs must satisfy a rich set of syntactic and semantic constraints, and that source code contains many low-level features that impede learning. We address these problems by training a neural generator not on code but on program sketches, or models of program syntax that abstract out names and operations that do not generalize across programs. During generation, we infer a posterior distribution over sketches, then concretize samples from this distribution into type-safe programs using combinatorial techniques. We implement our ideas in a system for generating API-heavy Java code, and show that it can often predict the entire body of a method given just a few API calls or data types that appear in the method.

研究の動機と目的

  • ターゲットコードに関する情報が限られているラベルを用いた条件付きプログラム生成を動機づける。
  • 構文・意味論的制約を扱うため、生のコードではなくプログラムスケッチ上で動作する学習フレームワークを開発する。
  • スケッチのニューラルエンコーディングと型指向の組合せ的具現化を統合し、コンパイル可能なプログラムを生成する。
  • API 集約的な Android/Java コードを対象として評価し、少数の API 呼び出しや型から完全なメソッド本体を生成できることを示す。

提案手法

  • 制御フローと型情報を保持しつつ低レベルの名前を抽象化するスケッチ文法を定義する。
  • ラベル X をスケッチ Y に結びつける潜在変数 Z を持つ Gaussian Encoder-Decoder (Ged) を提案し、P(Y|X,θ) および デコーダ P(Y|Z,θ) を用いる。
  • リパラメータ化のトリックを用いた変分下界による条件付き最大尤度推定で訓練する。
  • 二段階の合成を用いる:まず P(Y|X,θ) からスケッチをサンプルし、部分的に具体化されたスケッチ (PCS) 上で型指向の確率的探索を用いて完全なプログラムに具体化する。
  • スケッチの文法とヒューリスティックな具体化分布 P(Prog|Y) を用いて、具体化が型安全性と API 使用を尊重するよう強制する。
  • 約 150k の Android メソッドを Aml(Java風)へ変換したコーパスで Bayou を評価し、AST ベースのベースラインや他のモデルと比較する。

実験結果

リサーチクエスチョン

  • RQ1Java風言語の条件付きプログラム生成は、全コードではなく高レベルのプログラムスケッチを学習することで効果的に実現できるか?
  • RQ2スケッチベースの学習と組合せ的具体化が、限られたラベル情報の下で型安全かつコンパイル可能な、対象機能に合致するプログラムを生成するか?
  • RQ3Ged モデルは、部分観測下での精度と頑健性の点で、ベースラインの条件付き生成モデルや AST ベースの学習者とどう比較されるか?
  • RQ4スケッチから候補プログラムを生成・ランク付けする実用的な性能(時間、実現可能性)はどの程度か?
  • RQ5スケッチベースの学習は、未見のデータや未見の API 使用パターンに対して良く一般化するか?

主な発見

  • Bayou は、訓練中に見られなかったタスクを実装する複雑なメソッド本体を、わずか数の API 呼び出しまたは型のみから生成できることが多い。
  • Ged-Sk(スケッチベース)モデルは、ASTベースおよび完全な AML ベースラインを上回り、部分観測下で顕著な優位性を示す。
  • Ged-Sk は複数の指標で総合精度が最も高く、スケッチを具体化する際にも整合性を保つ。
  • 10 個の候補プログラムの生成とランク付けには平均約8秒かかる。
  • スケッチベースの学習は、直接的な AST/AML ベースの学習よりも未見データへの一般化性能が高い。

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

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

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

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