[論文レビュー] Guiding Language Models of Code with Global Context using Monitors
本稿では、静的解析によるモニタを統合することで、コード生成中にグローバルな文脈を提供する、Monitor-Guided Decoding (MGD) を提案する。リポジトリ全体の型や意味的解析を用いてトークン生成のログィットマスクを制御することで、MGDはコンパイル成功率と正解一致率を向上させ、SantaCoder-1.1B といった小規模モデルが text-davinci-003 よりも優れた性能を発揮することを可能にする。
Language models of code (LMs) work well when the surrounding code provides sufficient context. This is not true when it becomes necessary to use types, functionality or APIs defined elsewhere in the repository or a linked library, especially those not seen during training. LMs suffer from limited awareness of such global context and end up hallucinating. Integrated development environments (IDEs) assist developers in understanding repository context using static analysis. We extend this assistance, enjoyed by developers, to LMs. We propose monitor-guided decoding (MGD) where a monitor uses static analysis to guide the decoding. We construct a repository-level dataset PragmaticCode for method-completion in Java and evaluate MGD on it. On models of varying parameter scale, by monitoring for type-consistent object dereferences, MGD consistently improves compilation rates and agreement with ground truth. Further, LMs with fewer parameters, when augmented with MGD, can outperform larger LMs. With MGD, SantaCoder-1.1B achieves better compilation rate and next-identifier match than the much larger text-davinci-003 model. We also conduct a generalizability study to evaluate the ability of MGD to generalize to multiple programming languages (Java, C# and Rust), coding scenarios (e.g., correct number of arguments to method calls), and to enforce richer semantic constraints (e.g., stateful API protocols). Our data and implementation are available at https://github.com/microsoft/monitors4codegen .
研究の動機と目的
- グローバルな文脈(他のファイルやライブラリの型など)が欠落している場合に、コード言語モデルが識別子や型を誤って生成してしまうという限界を解消すること。
- 開発者が使用するIDEレベルの静的解析の利点を、再トレーニングなしにコード生成モデルに拡張すること。
- リポジトリ全体の解析に基づいて型や意味的整合性を保証するモジュール型で、推論時のみに適用可能な方法を設計すること。
- プログラミング言語(Java, C#, Rust)、コーディングタスク(例:メソッド引数の数)、意味的制約(例:APIプロトコル)の多様な文脈に一般化できることを評価すること。
- 小規模モデルにMGDを適用することで、大規模でチューニングされていないモデルを上回るコード生成品質を達成できることを示すこと。
提案手法
- ログィットマスクを用いて静的解析によるガイダンスを提供する、推論段階の強化手法として、モニタ・ガイドドデコード(MGD)を提案する。
- モニタを、生成されたコードを観測し、トリガー箇所(例:オブジェクトの参照)で静的解析を照会する状態保持インターフェースとして定義する。
- 静的解析の結果をトークンマスクに変換し、デコード段階で言語モデルの次トークン確率分布を再構成する。
- リポジトリ全体および依存関係(Lombok や Protobuf を含むビルドアーティファクトを含む)の型や意味的情報を取得するため、Language Server Protocol (LSP) を使用する。
- Javaメソッド補完用に特化した新しいデータセット、PragmaticCode を構築し、正解の型整合性のある補完とグローバル文脈のアノテーションを含む。
- アーキテクチャの変更やファインチューニングなしに、既存のコード言語モデル(例:SantaCoder, text-davinci-003)にMGDを統合する。
実験結果
リサーチクエスチョン
- RQ1静的解析から得られるグローバルな型や意味的文脈を組み込むことで、MGDはコード生成の正確性とコンパイル成功確率を向上させることができるか?
- RQ2MGDを適用した小規模なコード言語モデルが、大規模でチューニングされていないモデルを上回るコード生成品質を達成できるか?
- RQ3MGDは、複数のプログラミング言語(Java, C#, Rust)および複数のコーディングシナリオ(例:引数の数の正しさ、APIプロトコル準拠)に一般化できるか?
- RQ4誤ったメソッド名、フィールドアクセス、戻り値の型に関連する幻覚現象を、MGDはどれほど効果的に低減できるか?
- RQ5FIM や RLPG といった他のプロンプト技術と組み合わせることで、MGDは正解一致率をさらに向上させることができるか?
主な発見
- SantaCoder-1.1B に MGD を適用した場合、はるかに大きな text-davinci-003 モデルよりも高いコンパイル成功率と次識別子一致率を達成した。
- PragmaticCode データセットにおいて、MGDはパrameterスケールにかかわらず、あらゆるモデルでコンパイル成功率と正解一致率を一貫して向上させた。
- MGDは識別子生成における幻覚現象を低減した—例として、誤った名前 'host' や 'port' を正しく 'getDescription' や 'of' に置き換えた。
- コンパイル可能だが正しくないコードを生成するケースにおいて、MGDは FIM や RLPG といったプロンプト拡張技術と組み合わせることで、正解と完全一致を達成できた。
- MGDは C# や Rust に対しても効果的に一般化され、引数の数の不一致や状態を保持するAPIプロトコルの遵守といった状況で正答率が向上した。
- この手法により、局所的な自己回帰的デコードでは入手不可能なリポジトリ全体の文脈にアクセスできるため、小規模モデルが大規模モデルを上回る性能を発揮できるようになった。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。