- ハイパーネットワークがリポジトリの文脈からLoRAアダプターを動的に生成し、推論時の追加コストゼロでコードLLMにリポジトリ知識を注入
- スナップショット対応の「Code2LoRA-Static」とGRUでコード差分を追跡する「Code2LoRA-Evo」の2バリアントを提案
- 604リポジトリからなる新ベンチマーク「RepoPeftBench」で、共有LoRAベースライン比+5.2ポイントの完全一致率を達成
研究の背景
現代のソフトウェア開発では、LLM(大規模言語モデル)を使ってコードの補完やアサーションの自動生成を行う場面が増えています。しかし既存のコードLLMには大きな課題があります。モデルはリポジトリごとに異なる命名規則や設計パターン、独自のユーティリティ関数といった「リポジトリ固有の知識」を持っていないため、汎用的な補完しかできないのです。
この課題を解決する既存手法としては、文脈ウィンドウにリポジトリのコードを詰め込む「Retrieval-Augmented Generation(RAG)」や、リポジトリごとに専用のLoRAアダプターを学習する「per-repo LoRA」があります。しかしRAGは推論時に大量のトークンを消費してコストが増加し、per-repo LoRAはリポジトリが更新されるたびに再学習が必要という問題がありました。
また、実際の開発現場ではコミットが不定期かつ集中的に発生します(図2参照)。中央値で100件以上のコミットを持つリポジトリが多く、コードが絶えず変化する状況への対応が求められていました。

提案手法:Code2LoRA
本論文が提案する「Code2LoRA」は、ハイパーネットワーク(別のニューラルネットワークの重みを生成するネットワーク)を使って、リポジトリの文脈情報からLoRAアダプターを自動生成するフレームワークです。生成されたLoRAアダプターは凍結された(重みが固定された)コードLLMに注入されます。これにより、推論時に余分なトークンを使わずともリポジトリ固有の知識を活用できます。
アーキテクチャの中核となるハイパーネットワークは、リポジトリのソースコードを符号化した埋め込みを受け取り、LLMの各層に注入するLoRAの重み行列(A行列・B行列)を出力します。従来のLoRAが「事前に学習しておく」のに対し、Code2LoRAは「推論のたびにリポジトリ情報からLoRAを生成する」点が根本的に異なります。

Code2LoRAには、用途に応じて2つのバリアントが用意されています。
- Code2LoRA-Static:リポジトリのコードスナップショット(特定時点のソース全体)を符号化してLoRAを生成する。コードが安定しているリポジトリや、変更頻度が低い場面に適している
- Code2LoRA-Evo:GRU(Gated Recurrent Unit、系列を順番に処理できるネットワーク)を使って、コミットごとの差分(diff)を時系列で追跡し、LoRAを逐次更新する。コードが頻繁に変化するリポジトリに適している
新ベンチマーク:RepoPeftBench
既存のコードLLMベンチマークはリポジトリレベルの継続的な適応をほとんど評価できていませんでした。そこで本研究では、RepoPeftBenchと呼ぶ新しいベンチマークを構築しました。GitHubから収集した604件のPythonリポジトリを対象に、アサーション補完(テストコードにおけるassert文の自動生成)を評価タスクとして採用しています。
ベンチマークには2つの評価トラックがあります。「静的(Static)トラック」はリポジトリのスナップショットを使い、同リポジトリ内(IR-test)とリポジトリ横断(CR-test)の2種類で性能を測ります。「進化(Evo)トラック」はコミット履歴を時系列で追い、モデルがコードの変化にどう追従するかを評価します。
入力形式には「prefix-only(補完対象のコードのみ)」と「DRC+prefix(コード差分・リポジトリ情報・補完対象を結合)」の2種類が用意されています。図3が示すように、prefix-onlyの入力は中央値224トークンとコンパクトですが、DRC+prefixは長大なコンテキストを要するケースも存在します。
実験結果
Code2LoRAは主要な比較手法を大きく上回る性能を示しました。RepoPeftBenchの静的トラックにおいて、Code2LoRA-Staticはクロスリポジトリ(CR-test)で63.8%、同リポジトリ内(IR-test)で66.2%の完全一致率(Exact Match, EM)を達成しました。進化トラックのCR-testではCode2LoRA-Evoが60.3%を記録し、単一の共有LoRAベースラインと比べて+5.2ポイントの改善を達成しています。
CLSAのようなアテンション効率化手法と同様に、Code2LoRAも推論コストを増やさずに性能を引き上げることを重視しており、この点がRAGとの大きな差別化になっています。

図3のバイオリンプロットを見ると、Code2LoRA-Staticは分散(σ=16.8)が、Code2LoRA-Evoはさらに小さい分散(σ=15.8)を示しており、per-repo LoRA(σ=20.9)より安定していることが分かります。per-repo LoRAが事前学習済みベースラインを下回るリポジトリが10.5%存在するのに対し、Code2LoRA-Staticでは1.3%、Code2LoRA-Evoでは1.8%にとどまっています。これは複数リポジトリにわたる知識転移による「正則化効果」を示しています。
さらに、t-SNE(高次元ベクトルを2次元に圧縮して可視化する手法)でLoRAアダプターを分析すると、コードベースが似たリポジトリほどアダプターが近い位置にクラスタリングされることが確認されました。ハイパーネットワークがリポジトリの意味的な類似性を反映した「なめらかなアダプター多様体」を学習していることを示唆しています。
限界と今後の展望
失敗例の分析では、Code2LoRA-Staticの誤り2,321件のうち最多は「誤ったリテラル(31.0%)」で、次いで「構文エラー(28.0%)」「型の不一致(19.0%)」が続きます。幻覚や空の出力はそれぞれ1%未満であり、致命的なエラーは少ない一方、数値定数や文字列の細かな誤りが課題として残ります。
また、学習リポジトリ数が増えるほどCode2LoRA-Staticの性能が対数線形に向上することも確認されています(図8)。将来的により多くのリポジトリで学習すれば、さらなる改善が期待できます。コードとデータセットはHugging Faceで公開されており、再現性が高いため、コード補完・コードレビュー自動化など幅広い応用が見込まれます。
