アーカイブ / LLM
名前が違う実装も探す、MediaWikiのコード検索
MediaWiki Code2Code Search
概要
- 約129万件の関数、型、テンプレートを対象に、コード片から役割の近い実装を探す。
- 著者の27件評価でP@10は0.87、BM25は0.64だった。
- ノートPCでの応答時間中央値は1.85秒だが、公開環境の平均は約31秒と報告された。
補足:編集した模式図で仕組みを確認する
VISUAL EXPLAINER
図でつかむ、MediaWiki Code2Code Searchの仕組み
- 01検索用コード片
- 02数値表現へ変換
- 03圧縮索引を検索
- 04類似実装を表示
原論文の説明をもとにした模式図です。処理の細部は省略しています。
研究の背景
MediaWiki関連のコードは2,500を超えるリポジトリに分散し、同じ役割の処理でも名前が異なることがある。既存の文字列検索では、探す側が実装の語彙を知らないと候補を見落としやすい。
たとえば編集権限の確認処理を探す際、関数名に「permission」が入るとは限らない。既存コードの発見が難しければ、保守担当者は似た機能を再実装する前に、広い範囲を手作業で調べる必要がある。
手法
事前準備ではリポジトリを収集し、Tree-sitterという構文解析器で関数、型、テンプレートを抽出する。各コード片をQwen3の埋め込みモデルで数値の並びに変え、FAISSのIVF-PQという圧縮した近傍検索索引へ登録する。コードの所在や行番号などは別のSQLiteデータベースに保持する。
利用時には、たとえば権限確認を行う短いコード片を入力する。同じモデルで入力を数値化し、索引から近い実装を探して、元のリポジトリとともに返す。埋め込みは表面上の単語が違うコードを比べるための表現であり、検索結果が同じ仕様を満たすかは人が確認する。
新規性
関数名や単語の一致に頼らず、コード片を数値の並びに変換して、計算上の役割が近い実装を探す。対象はMediaWiki関連の複数の保管先に散らばる関数、型、テンプレートだ。
索引の作成と検索サービスを分け、前者ではGPUを使い、後者はCPUで動かす構成を採った。検索結果にはSoftware Heritageの内容に基づく識別子も付け、元のコードをたどれるようにしている。
従来手法との違い
比較対象のBM25は、検索文に含まれる識別子を単語として取り出し、同じコード集合から一致度の高いものを探す。Code2Codeはコード片全体を埋め込みと呼ぶ数値表現に変え、近い表現を持つ実装を返す。
著者の27件の比較では、名前を変えて同じ処理を表した課題で差が大きかった。一方、特徴的なAPI名が残る課題では両方式が並び、MediaWiki固有の課題ではBM25の平均が上回った。既存のHound検索とは入力形式が異なるため、直接比較していない。
実験結果
著者は1,289,452件の構造要素を索引化し、27件のコード片による検索をBM25と比較した。上位10件のうち関連または一部関連と判定された割合を示すP@10は0.87対0.64、完全に関連する結果だけでは0.52対0.34だった。判定は単一のLLMによる。
索引は168.6MBで、単精度の非圧縮索引より96.6%小さい。27件を7回実行したノートPC上の応答時間中央値は1.85秒だったが、CPUのみのToolforge公開環境では平均約31秒と著者は報告する。
応用の可能性
編集上の応用案 · 論文が実証した用途とは区別しています。
編集上の応用案:MediaWikiの拡張機能を保守する担当者が、既存のアクセス制限処理を探す場面を想定する。担当者は必要な動きを短いコード片で書き、検索結果の関数名、所在、該当行を確認する。
候補が見つかったら元の実装と呼び出し元を読み、再利用できるかを判断する。検索結果は実装の候補であり、権限判定が同じ意味を持つことや、そのまま移植できることまで保証するものではない。
応用先の候補からNauhに相談できます。
導入時の検証
導入時の検証案 · 対象データでの再評価が必要です。
導入時の検証案:対象のリポジトリから、担当者が答えを確認できるコード片を少数選ぶ。関数名が分かる例と、名前から役割を推測しにくい例を含め、Code2Codeと識別子によるBM25検索へ同じ入力を渡す。
上位10件の有用な候補数、重複を除いた候補数、元コードを確認するまでの時間を記録する。公開サービスを使う場合は応答時間も測り、探索作業の待ち時間として許容できるか判断する。
限界と課題
著者は、評価用の27件が少なく英語中心で、関連性の判定を単一のLLMが行ったため、判定者間の一致を測れないと述べる。外部依存コードの重複により、上位10件に同一内容が複数入る例も報告した。
編集上の確認点は、実際に使う言語と保管先で必要なコードが索引に含まれるか、重複を除いても候補が役立つかである。公開先のToolforgeでは平均応答時間が約31秒と報告されており、利用者が待てる時間も別途確かめたい。
出典
元のタイトル・要旨を確認する(英語)
MediaWiki Code2Code Search: Neural Retrieval for the Semantic Discovery of Open-Source Software Entities
Code search in large-scale ecosystems is often hindered by the lexical gap between user queries and implementation details, alongside the trade-off between the low latency of traditional Information Retrieval (IR) and the precision of Deep Learning (DL). We present MediaWiki Code2Code Search, a neural retrieval system for semantic code-to-code discovery. By indexing 1.29 million structural entities (functions, types, and templates) across 2,500+ MediaWiki repositories, our system enables retrieval based on computational intent rather than surface tokens. We employ a split-build architecture, decoupling GPU-intensive offline indexing from a CPU-only serving layer; our FAISS IVF-PQ index occupies 168.6 MB: a 96.6\% reduction compared to a flat float32 baseline, and achieves a median query latency of 1.85 seconds on commodity hardware, satisfying the 6 GiB RAM constraint of Wikimedia Toolforge. Our evaluation across a 27-query benchmark demonstrates superior performance over the BM25 baseline, achieving a P@10 of 0.87 compared to 0.64 (0.52 versus 0.34 for strict matching). Gains are most pronounced in name-obfuscated tasks where lexical methods fail. The system is available at https://code2codesearch.toolforge.org under the Apache 2.0 licence and provides an open RESTful API.
論文本体の取得範囲に基づく解説。AIが作成した未校閲の記事です。性能の数値は著者の評価条件に依存します。応用例と検証計画は編集上の提案です。解説更新:2026-09-29




