[論文レビュー] Towards Full-line Code Completion with Neural Language Models
本稿では、ニューラル言語モデルを用いて1ステップで完全なコード行を生成する、全行コード補完という新しいタスクを紹介する。TransformerとRNNベースのモデルをPythonデータセット上で評価した結果、トークン列に対するTransformerモデルが構文ベースおよびBPEアプローチを上回り、高い構文的正しさと妥当な推論速度を達成したが、構文ガイダンスは明確な利点なしに顕著な遅延を引き起こした。
A code completion system suggests future code elements to developers given a partially-complete code snippet. Code completion is one of the most useful features in Integrated Development Environments (IDEs). Currently, most code completion techniques predict a single token at a time. In this paper, we take a further step and discuss the probability of directly completing a whole line of code instead of a single token. We believe suggesting longer code sequences can further improve the efficiency of developers. Recently neural language models have been adopted as a preferred approach for code completion, and we believe these models can still be applied to full-line code completion with a few improvements. We conduct our experiments on two real-world python corpora and evaluate existing neural models based on source code tokens or syntactical actions. The results show that neural language models can achieve acceptable results on our tasks, with significant room for improvements.
研究の動機と目的
- 全行コード補完という新しいコード補完タスクを提案・定義すること:1トークンずつではなく、1ステップで完全なコード行を生成すること。
- 実世界のPythonコーパスを用いて、最新のニューラル言語モデル(RNN、Transformer、構文ベースモデル)をこの新しいタスクで評価すること。
- トークンまたはBPEベースのモデルと比較して、ASDLアクションを用いた構文ベースのコード生成が、全行コード補完のパフォーマンスを向上させるかを調査すること。
- 全行コード補完における構文的正しさ、推論速度、モデル効果性のトレードオフを分析すること。
- 現在の構文ガイダンスの限界を特定し、静的解析およびAST構造の統合による今後の改善策を検討すること。
提案手法
- 著者らはGitHubリポジトリから大規模なPythonデータセット2つ(Python 2用とPython 3用)を構築し、訓練および評価に使用した。
- コードトークン、ASDL構文アクション、BPEサブトークンの各タスクで、TransformerおよびGRUベースのニューラル言語モデルを微調整し、全コード行の生成を実行した。
- 構文ベースの生成では、コードスニペットを構造的構成アクションのシーケンスに変換するASDLパーサーを用い、構文的正しさを保証した。
- 標準的な指標(BLEU、ROUGE、正確一致)を用いてモデルを評価し、両方のデータセットで結果を報告した。
- 推論速度はビームサーチ(ビームサイズ=5)を用いて測定し、トークンベース、構文ベース、BPEベースのモデル間での時間効率を比較した。
- 生成されたコードを手動で検査し、構文的正しさを確認するとともに、変数の使用やAPI呼び出しに関連する失敗事例を分析した。
実験結果
リサーチクエスチョン
- RQ1ニューラル言語モデルは、1トークンずつ予測するのではなく、1ステップで完全なコード行を効果的に生成できるか?
- RQ2全行コード補完タスクにおいて、TransformerベースのモデルはRNNベースのモデルと比べてどのように差がでるか?
- RQ3ASDLベースの構文アクションを組み込むことで、全行コード生成のパフォーマンスと正しさが向上するか?
- RQ4構文ベースとトークンベースの生成を比較した場合、構文的正しさと推論効率のトレードオフはどのようなものか?
- RQ5BPEトークン化と識別子の取り扱いは、全行コード補完におけるモデルのパフォーマンスにどのように影響するか?
主な発見
- Transformer言語モデルは、Python 2およびPython 3の両データセットで、すべての評価指標においてRNNベースのモデルを上回った。
- トークンベースのTransformerモデルが最高のパフォーマンスを達成し、Py150では47.67%の正確一致を記録したが、これは構文ベースのモデルを上回った。
- 構文ベースのモデルは構文的正しさを保証しているものの、推論速度が著しく遅く、1回の推論で1秒以上を要したのに対し、トークンベースのモデルは0.1秒未満であった。
- BPEベースのモデルは未知語問題を軽減したが、純粋なトークンモデルと比較して識別子の生成で劣った。
- トークンベースのモデルが生成したコードの大多数は構文的に正しかったため、ニューラルモデルが大規模データから文法を暗黙的に学習できることを示した。
- 構文ベースのアプローチは、ASDLアクションシーケンスが長く非効率で、モデルがデータから文法を学習している場合、明示的な構文制約が効果を発揮しない可能性があるため、トークンベースのモデルに劣った。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。