Skip to main content
QUICK REVIEW

[論文レビュー] Structural Language Models of Code

Uri Alon, Roy Sadaka|arXiv (Cornell University)|Sep 30, 2019
Software Engineering Research被引用数 44
ひとこと要約

この論文は Structural Language Modeling (SLM) を導入し、複数の AST パスを通じて抽象構文木(AST)ノードとしてコードを予測することで any-code completion を実現し、Java の any-code completion で最先端の結果を達成し、C# の restricted completion で強力な改善を示す。

ABSTRACT

We address the problem of any-code completion - generating a missing piece of source code in a given program without any restriction on the vocabulary or structure. We introduce a new approach to any-code completion that leverages the strict syntax of programming languages to model a code snippet as a tree - structural language modeling (SLM). SLM estimates the probability of the program's abstract syntax tree (AST) by decomposing it into a product of conditional probabilities over its nodes. We present a neural model that computes these conditional probabilities by considering all AST paths leading to a target node. Unlike previous techniques that have severely restricted the kinds of expressions that can be generated in this task, our approach can generate arbitrary code in any programming language. Our model significantly outperforms both seq2seq and a variety of structured approaches in generating Java and C# code. Our code, data, and trained models are available at http://github.com/tech-srl/slm-code-generation/ . An online demo is available at http://AnyCodeGen.org .

研究の動機と目的

  • vocab と構造が制限なしで any-code completion 問題を動機づける。
  • コードを AST として扱い、ノードごとに予測する構造言語モデリング手法を提案する。
  • AST パス上でのジョイントなソース/ターゲットモデリングが、シーケンスベースや他の構造ベースのベースラインより生成品質を改善することを示す。
  • Java の any-code completion で最先端の結果を示し、C# の restricted completion で強力な改善を示す。
  • 性能に不可欠な要素を特定するアブレーションの分析を提供する。

提案手法

  • プログラムを AST として表現し、Pr(A_P) を AST 探索全体の条件付きノード確率の積として分解する。
  • 部分木を根-葉のパスの集合として表現し、各パスをノード埋め込みの LSTM でエンコードする。
  • 複数のパスのエンコーディングをトランスフォーマーに基づくコンテキストと、根-パスエンコーディングをインデックス情報で結合して次のノードを予測する。
  • 次の AST ノードまたはサブトークンを、パスエンコーディングからのコピースコアとサブトークン埋め込みを組み合わせた構文コピー機構を用いて予測する。
  • 生成を EOS ノード/トークンで拡張し、木の生成時の階数と深さを制御する。
  • Adam を用いたクロスエントロピーでエンドツーエンドに訓練し、推論時にはビーム探索を行う。NMT およびコード構造のベースラインと比較する。

実験結果

リサーチクエスチョン

  • RQ1any-code completion を、flat なシーケンスよりも AST-パス条件付き確率で効果的にモデル化できるか。
  • RQ2ソースコードとターゲットコードを同一の木としてジョイントモデリングすることは、エンコーダ-デコーダや生産規則ベースのアプローチより生成品質を改善するか。
  • RQ3パスベース表現、注意の集約、およびコードコピー機構が、exact-match および木構造の精度に与える影響はどの程度か。
  • RQ4SLM は Java の any-code completion と C# の restricted completion において、強力なベースラインと比較してどうなるか。
  • RQ5root attention、コピー、パスベース表現などの要素の寄与を示すアブレーションは何を明らかにするか。

主な発見

Modelacc@1acc@5tree@1tree@5
code2seq (Alon2019a)10.6815.5630.4643.94
Iyer et al. (2018)5.949.1925.5436.75
seq2prod (Yin&Neubig2017)8.0511.8230.7741.73
Transformer_small +copy14.2321.3531.8347.40
Transformer_base +copy16.6524.0534.6850.52
BiLSTM→LSTM +copy (Luong2015)16.9323.1734.2949.72
seq2tree +copy (Aharoni&Goldberg2017)16.8123.0438.1452.36
SLM (this work)18.0424.8339.1055.32
  • SLM は Java の any-code completion において exact-match acc@1 および acc@5 で最先端を達成: 18.04% および 24.83%、tree@1 が 39.10%、tree@5 が 55.32%。
  • Java では、SLM は code2seq、seq2tree、Transformer 系のベースラインを含むすべてのベースラインを上回り、acc@1 および acc@5 で顕著な改善。
  • restricted C# completion では、SLM は acc@1 が 37.61%、acc@5 が 45.51%、tree@1 が 51.10%、tree@5 が 59.82% に達し、GNN→NAG などの他のベースラインを上回る。
  • アブレーションにより、ジョイントモデリング(Paths→Paths)とコピー機構が重要であることが示される;root attention や copy を削除すると性能が大幅に低下する(例:No Copy は指標を著しく低下させる)。
  • tree@k 指標は、サブトークンが異なる場合でも正しい構文を予測するモデルが多く、トークン名予測の向上によるさらなる改善の可能性を示している。

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

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

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

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