Skip to main content
QUICK REVIEW

[論文レビュー] Sequence Model Design for Code Completion in the Modern IDE

Gareth Ari Aye, Gail E. Kaiser|arXiv (Cornell University)|Apr 10, 2020
Software Engineering Research参考文献 35被引用数 20
ひとこと要約

この論文では、文字レベルの入力とトークンレベルの出力の組み合わせに加え、静的解析による有効な提案のフィルタリングと繰り返し検出ヘッドを統合したハイブリッドなシーケンスモデルをコード補完のために提案している。この設計により、実世界のIDEの制約(低遅延<110ms、小型モデル、有効なコード出力)を満たしつつ、最先端の精度を達成した。Dartのコーパス上で75.33%のリクエストが110ms未満で完了したことが実証された。

ABSTRACT

Code completion plays a prominent role in modern integrated development environments (IDEs). Machine learning has become ubiquitous in analogous natural language writing and search software, surfacing more relevant autocompletions and search suggestions in fewer keystrokes. Prior research has reported training high-accuracy, deep neural networks for modeling source code, but little attention has been given to the practical constraints imposed by interactive developer tools. In particular, neural language models for source code modeling like the one described in Maybe Deep Neural Networks are the Best Choice for Modeling Source Code are framed around code completion, but only report accuracy of next-token prediction. However, in order for a language model (LM) to work well within real-world code completion systems, it must also always make suggestions that produce valid code that typechecks to support code completion's role in correctness-checking; return instantaneous results to help programmers code more efficiently in fewer keystrokes; and be small enough to fit comfortably on disk and in memory on developer workstations, since virtually all modern IDEs run locally and support offline usage. To meet these additional requirements, we propose a novel design for predicting top-k next tokens that combines static analysis' ability to enumerate all valid keywords and in-scope identifiers with the ability of a language model to place a probability distribution over them. Our model mixes character-level input representation with token output to represent out-of-vocabulary (OOV) tokens meaningfully and minimize prediction latency. OOV tokens can be predicted through detection of local repetition common in software. This design achieves state-of-art accuracy in source code modeling and fits the constraints imposed by real-world code completion implementations in modern IDEs.

研究の動機と目的

  • 高精度なニューラルコードモデルと、実世界のIDEにおける低遅延、小型モデル、有効なコード出力といった実用的制約のギャップを埋める。
  • 静的解析のみに依存するのではなく、最小限の遅延オーバーヘッドでニューラル言語モデルを統合することで、コード補完の関連性を向上させる。
  • サブワード予測や複数の推論ステップに依存せずに、新しい識別子でよく見られるOut-of-Vocabulary(OOV)トークンの予測を可能にする。
  • インタラクティブ開発環境における高精度とパフォーマンス・正しさの要件を両立できるモデルを設計する。
  • 実世界の使用シナリオ、特に低遅延応答とオフラインIDE動作との互換性を含めた、モデルの有効性を検証する。

提案手法

  • OOVトークンに対応するために文字レベルの入力表現を採用し、1ステップで完全な識別子を予測するトークンレベルの出力ヘッドを用いることで、遅延を最小限に抑える。
  • 局所的な繰り返しパターン(例:'fooBarFoo')を検出する別個のニューラルヘッドを導入し、以前に見つけていない新しい識別子を示す。
  • 静的解析を用いて、事前に有効なキーワードとスコープ内識別子の集合を計算・フィルタリングすることで、すべての予測が文法的に正しく、型安全であることを保証する。
  • モデルサイズと予測精度のバランスを取るために、出力語彙は10万トークンに制限されるが、繰り返し検出によりOOV予測が可能になる。
  • 一般化を確保するため、レビュー済みで生産環境向けのDartコードの大規模コーパスを用いてモデルを学習する。
  • 推論では、言語モデルの確率分布と静的解析を組み合わせ、有効なトークンのみをランク付けすることで、正しさを保証するとともに探索空間を削減する。

実験結果

リサーチクエスチョン

  • RQ1コード補完用のニューラル言語モデルは、実時間での使用に耐えうるほど高速でありながら、高い精度を達成できるか?
  • RQ2サブワードトークン化に依存せずに、新しい関数名・変数名でよく見られるOut-of-Vocabulary(OOV)識別子を効果的に予測するにはどうすればよいか?
  • RQ3インタラクティブコード補完システムにおいて、モデルサイズ、推論遅延、予測精度の間にはどのようなトレードオフがあるか?
  • RQ4ニューラル言語モデルと静的解析を組み合わせることで、コード補完提案の関連性と正しさの両方を向上させられるか?
  • RQ5現代のIDEで一般的な実世界の遅延制約下で、このモデルはどの程度の性能を示すか?

主な発見

  • 大規模なDartコーパスにおいて、このモデルは、先行するニューラルモデルおよびn-gramベースのモデルを上回る最先端の精度を達成した。
  • 75.33%の予測リクエストが110ms未満で完了し、インタラクティブ開発における即時応答の100msのしきい値を満たした。
  • 平均予測遅延は109msにまで短縮され、10万トークンの大きな出力語彙を有しながらも、モデルが効率的であることが示された。
  • ハイブリッド設計により、局所的な繰り返し検出を用いてOOVトークンの正確な予測が可能となり、サブワード予測や複数の推論ステップの必要がなくなった。
  • ニューラル言語モデルと静的解析を組み合わせることで、高い関連性を維持し、すべての提案が有効で型安全であることを保証した。
  • このアプローチはモデルサイズと遅延制約に強く、ローカルでオフラインのIDEへのデプロイに適している。

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

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

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

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