リランカーとは
Reranker / Re-ranking
初期検索で取得した候補群を、より高精度なモデルで並べ替える2段階目の検索コンポーネント
ひとことで言うと
検索で見つかった候補を、もう一度精度の高い方法で並び替える仕組み。
概要
リランカー(Reranker)とは、ベクトル検索やキーワード検索等の初期検索(候補生成)で取得した上位候補群に対し、クエリと各候補との関連度をより精密に評価し直して順位を並べ替えるコンポーネント。 ベクトル検索は大量の文書から高速に候補を絞り込めるが、クエリと文書を別々にベクトル化するため精度の限界がある。 リランカーは、クエリと候補文書のペアを直接モデルへ入力して関連度を計算するクロスエンコーダ方式を用いることで初期検索より高精度なランキングを実現するが、全文書に適用するには計算コストが高いため、初期検索で絞り込んだ少数の候補にのみ適用する2段階構成が一般的。 Cohere RerankやBGE Rerankerなど専用に学習されたモデルが広く使われ、RAGパイプラインにおいて最終的にLLMへ渡す文書の質を高める重要な工程として組み込まれる。
背景
ベクトル検索(バイエンコーダ方式)は、クエリと文書を別々にベクトル化してから類似度を計算するため高速だが、両者の間の細かい相互作用を捉えにくく、上位候補の精密な順位付けには限界がある。 リランカーは、この精度の限界を補うため、計算コストの高いクロスエンコーダ方式を上位候補だけに絞って適用する2段階検索の考え方から生まれた。
歴史
2019年: Nogueira・ChoがBERTを用いたクロスエンコーダ方式で文書の再ランキングを行う手法を提案し、従来の検索アルゴリズムを大きく上回る精度を示した。 以降、この2段階検索(初期検索+リランキング)の構成が情報検索・RAGの標準的なパターンとして広まった。
アーキテクチャ
クエリと候補文書のペアを1つの入力としてTransformerエンコーダへ与え、関連度スコアを直接出力するクロスエンコーダ構成を取ることが多い。 初期検索(ベクトル検索やBM25等)で取得した上位数十〜数百件の候補にのみリランカーを適用し、計算コストを抑えながら精度を高める。
ワークフロー
初期検索(セマンティック検索・キーワード検索・ハイブリッド検索等)で上位候補を取得 → クエリと各候補のペアをリランカーへ入力 → 関連度スコアを算出 → スコア順に並べ替え、上位を最終結果として採用。
コード例
sentence-transformersのCrossEncoderでリランキングする
from sentence_transformers import CrossEncoder
model = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-6-v2")
query = "RAGにおけるリランカーの役割は?"
candidates = [
"リランカーは初期検索の候補を精密に並べ替える",
"今日の天気は晴れです",
]
scores = model.predict([(query, c) for c in candidates])
print(scores)利点
- 初期検索単体よりも高精度な関連度評価・順位付けができる
- 初期検索とリランキングを分離することで、全体の検索速度と精度のバランスを取れる
- 初期検索のアルゴリズムを変更せずに導入でき、既存の検索パイプラインへ組み込みやすい
欠点
- クエリと候補のペアごとに推論を要するため、全文書に適用するには計算コストが高い
- 初期検索で正しい候補が上位に含まれていなければ、リランキングでも救えない
- リランカーの追加により、検索全体のレイテンシが増加する
比較
関連用語
よくある質問
リランカーは必須?
必須ではないが、初期検索だけでは上位候補の精度が不十分な場合に、追加の計算コストと引き換えに検索品質を高める手段としてRAGパイプラインに組み込まれることが多い。
リランカーは何件くらいの候補に適用するのが一般的?
計算コストとのバランスから、初期検索で取得した上位数十件程度に絞って適用することが多い。
参考文献
- DocumentationCohere: Rerank
- GitHubsentence-transformers Cross-Encoders
- Research PaperPassage Re-ranking with BERT