Python

リランクモデルとは?ベクトル検索と組み合わせる種類・仕組み・選び方【2026年版】

リランクモデル(リランカー)は、検索で一次的に絞り込んだ文書を、クエリとの関連度で並べ替え直す専用モデルです。ベクトル検索や全文検索が「速く広く候補を集める」役割なら、リランクモデルは「集めた候補を精度優先で順位付け直す」役割を担い、両者を二段階に組み合わせることで検索やRAGの精度が上がります。この記事では、リランキングの仕組み、クロスエンコーダやColBERTなどモデルの種類と使い分け、nDCG・MRRによる評価、レイテンシとコストの課題、Pythonでの実装までを2026年時点の情報で整理します。なお本記事は検索・AI分野のリランキングを扱います(ゴルフツアーのリランキング制度とは別の話題です)。

まとめ:リランクモデルの要点

  • 役割:ベクトル検索や全文検索が集めた候補(例:上位100件)を、クエリと文書のペアを見て関連度で並べ替え直す二段目の処理。
  • ベクトル検索との違い:ベクトル検索はクエリと文書を別々にベクトル化して近さを測る(バイエンコーダ)。リランカーはクエリと文書を一緒に読む(クロスエンコーダ)ため精度が高いが、その分1件ずつ計算するので重い。
  • 代表モデル(2026年):マネージドAPIはCohere Rerank 4/Voyage rerank-2.5/Zerank-2、自己ホストはBGE-reranker-v2-m3/Jina Reranker v2/mxbai-rerank。用途は精度・レイテンシ・多言語・ライセンスで選ぶ。
  • 評価:nDCG@k・MRR・Recall@k で導入前後を数値比較し、効果を確認してから本番投入する。
  • 注意:候補が数件しかない、数十msの低レイテンシが必須、といった場面ではリランカーを入れない判断も正しい。

リランキングとは:検索結果を関連度で並べ替え直す仕組み

リランキング(reranking)とは、検索で得た文書リストを、クエリとの関連度に基づいてもう一度並べ替える処理を指します。「リランク」「再ランキング」とも呼びます。一次検索が返す並び順は、速度を優先した近似的なスコア(ベクトルのコサイン類似度やBM25)で決まっており、必ずしも人間が見て最も関連の高い順とは限りません。ここに関連度を精密に測るモデルを挟み、上位に来るべき文書を上げ直すのがリランキングです。

一次検索が数万件から候補を絞る「粗い網」だとすれば、リランカーはその網に入った候補だけを丁寧に見る「細かいふるい」に当たります。全文書にふるいをかけると計算量が膨大になるため、必ず一次検索で候補を絞ってからリランカーへ渡す、という順番が前提になります。この一次検索を含む検索工程全体の設計はリトリーバルの工程と実装の判断基準にまとめています。

ベクトル検索とリランキングの違いと役割分担

リランクモデルは単体で使うものではなく、一次検索と組み合わせた二段階検索(retrieve & rerank)の後段として働きます。両者は仕組みも役割も異なります。

一段目:ベクトル検索・全文検索による候補取得

一段目は「速く広く」集める段です。ベクトル検索はクエリと文書をそれぞれ独立に固定長ベクトルへ変換し(バイエンコーダ)、事前にインデックス化した文書ベクトルとの距離を近似最近傍探索で高速に求めます。文書側のベクトルは事前計算・索引化できるため、数百万件規模でもミリ秒単位で上位候補を返せます。ベクトル検索そのものの仕組みや全文検索との使い分けはベクトル検索とセマンティック検索の違い、索引構造の詳細はベクトルデータベースの仕組みで扱っています。

二段目:リランカーによる精密な並べ替え

二段目はクエリと候補文書をペアで同時にモデルへ入力し、相互の意味関係まで見て関連度スコアを付け直します。クエリと文書を別々にベクトル化する一段目と違い、語と語の対応まで踏み込むため精度は高くなります。一方で候補1件ごとに推論が走るため、候補100件なら100回の推論が必要で計算コストは高い。だからこそ、全文書ではなく一段目が絞った上位候補(例:上位50〜100件)に限定して適用します。「速いが粗い一段目」と「精密だが重い二段目」で役割を分けるのが、二段階検索の狙いです。

リランクモデルの主要な種類と特徴

リランカー(リランキングモデル)は、内部の仕組みでいくつかの型に分かれます。精度・速度・運用形態が異なるため、型の違いを押さえると選定が楽になります。

クロスエンコーダ型(cross-encoder)

クエリと文書を連結して1つの入力とし、Transformerで同時に符号化して関連度スコアを1つ出す型です。語同士の相互注意が効くため精度が最も高く、リランカーの主流。反面、クエリごとに候補全件を推論し直す必要があり、事前計算が効かないため最も重い型でもあります。オープンソースではms-marco系のMiniLMクロスエンコーダやBGE-reranker系が代表です。連結入力の仕組みや日本語モデルの実測スコア、自前学習に踏み切る判定ラインはクロスエンコーダの解説記事で詳しく整理しています。

遅延相互作用型(late interaction/ColBERT系)

ColBERTに代表される型で、トークン単位のベクトルを保持し、クエリ側の各トークンと文書側トークンの最大類似度を足し合わせて(MaxSim)スコアを出します。文書側のトークンベクトルを事前計算できるため、クロスエンコーダより速く、バイエンコーダより精度が高い中間的な位置づけです。2026年時点ではColBERTv2やjina-colbert-v2が使われますが、トークン単位ベクトルの保存でストレージを食うため、標準的な「バイエンコーダ+クロスエンコーダ」構成で足りる場面ではニッチな選択肢とされています。遅延相互作用型の採点手順と採否のしきい値はColBERTの仕組みとRAG検索精度への効果・導入判断で詳しく整理しています。

マネージドAPI型(Cohere・Voyage・ZeroEntropy)

自前でモデルを持たず、APIに候補を投げてスコアを受け取る型です。運用負荷が小さく、多言語対応や長文対応が組み込み済みで、導入が最も速い。2026年の代表は次のとおりです(変動が速いためモデルIDと最新版は各公式で確認してください)。

モデル 提供 特徴(2026年)
Cohere Rerank 4 Cohere Fast/Proの2種。コンテキスト32K(3.5比4倍)。自己学習に対応
Voyage rerank-2.5 Voyage AI code/finance/legalのドメイン特化版。lite版はレイテンシ半減。該当領域では汎用より数ポイント高精度(データセット依存)
Zerank-2 ZeroEntropy 公開リーダーボードの対戦ELOで上位(2026年前半時点)

自己ホスト型オープンソース(BGE・Jina・mxbai)

重みを自分の環境に置き、GPUで動かす型です。データを外部に出さずに済み、量が多ければAPI課金より安くなります。BGE-reranker-v2-m3(BAAI)は多言語対応の定番、Jina Reranker v2やmxbai-rerank(Mixedbread)も広く使われます。軽量・低依存で手早く試すならFlashRankが便利です。英語中心のRAGでは、これらとマネージドAPIの精度差はデータセット依存で数ポイントに収まることが多く、選定の決め手は絶対精度よりコスト構造・レイテンシ・自己ホスト可否になります。

ハイブリッド検索のスコア統合(RRF)とリランキングの違い

ベクトル検索と全文検索(BM25)を併用するハイブリッド検索では、性質の違う2つの順位リストを1つにまとめる必要があります。ここで使うRRF(Reciprocal Rank Fusion)は、各リストでの順位の逆数を足し合わせて統合順位を作る手法で、スコアのスケールが違うリスト同士でも安定して混ぜられます。

RRFとリランカーは役割が別です。RRFは複数リストの統合(順位だけを使い、モデル推論は不要で軽い)、リランカーはクエリと文書の内容を見た再スコアリング(重いが精密)。実務では「ハイブリッド検索でRRF統合 → その上位をリランカーで並べ替え」と両方を段で重ねることも珍しくありません。RRFのスコア計算式やRAG-Fusionでの使い方はRRF(Reciprocal Rank Fusion)とRAG-Fusionの仕組みで詳しく整理しています。

リランキングの評価指標と精度測定

リランキングは「入れたら効いた気がする」で判断せず、順位の良し悪しを測る指標で導入前後を数値比較します。検索やRAGの並べ替え評価でよく使うのは次の指標です。

  • nDCG@k(正規化割引累積利得):上位ほど重みを大きくして関連度を積み上げ、理想順位で割って0〜1に正規化。段階的な関連度(3=完全一致〜0=無関連)を扱えるため、リランキング評価の主力。
  • MRR(平均逆順位):最初に出た正解の順位の逆数の平均。「正解が何番目に来たか」を1つの正解前提で測る。QAやFAQ検索に向く。
  • Recall@k:上位k件に正解がどれだけ含まれたかの割合。一段目の候補取得の抜け漏れ確認に使い、リランカーへ渡す前の候補品質を測る。
  • Precision@k・MAP:上位k件の的中率と、その平均。複数正解がある検索の総合評価に使う。

実務では、正解ラベル付きの評価用クエリセットを用意し、一段目のみ(ベクトル検索だけ)とリランカー適用後でnDCG@10とRecall@50を並べて比較します。Recall@50が高いのにnDCG@10が低ければ「候補は取れているが並び順が悪い」=リランカーが効く典型で、導入判断の根拠になります。

導入時の処理速度・コストの課題と解決策

リランカーは精度を上げる一方で、レイテンシとコストを押し上げます。クロスエンコーダは候補1件ごとに推論するため、候補100件なら一段目の距離計算に比べて桁違いに時間がかかります。現実的な対策は次のとおりです。

  • 候補数(top-k)を絞る:リランカーに渡す件数を100→50→20と減らせば処理は比例して軽くなる。一段目のRecall@kを見て、正解を落とさない最小のkを探す。
  • モデルサイズを下げる:MiniLM系の小型クロスエンコーダやRerank 4 Fast、Voyage rerank-2.5-liteなど軽量版で、精度を大きく落とさずレイテンシを削る。
  • キャッシュする:頻出クエリ×文書のスコアをキャッシュし、同一ペアの再計算を避ける。
  • コスト設計:APIは件数課金で候補数×クエリ数に比例。トラフィックが大きいと自己ホストGPUのほうが安くなる分岐点があるため、月間リランク件数で試算して選ぶ。

Pythonでのリランキング実装例

自己ホスト型の最短経路は、sentence-transformersのクロスエンコーダです。一段目で集めた候補(docs)を、クエリとのペアにしてスコアリングし、降順に並べ替えます。

from sentence_transformers import CrossEncoder

# 多言語対応の定番リランカー(自己ホスト)
reranker = CrossEncoder("BAAI/bge-reranker-v2-m3")

query = "リランクモデルの評価指標は?"
docs = [
    "nDCGは上位ほど重みを大きくする順位評価指標です。",
    "BM25は全文検索で使われる古典的なスコアです。",
    "MRRは最初の正解の順位の逆数を平均します。",
]

# クエリと各文書をペアにして関連度を採点
pairs = [(query, d) for d in docs]
scores = reranker.predict(pairs)

# スコア降順に並べ替え直す(=リランキング)
ranked = sorted(zip(docs, scores), key=lambda x: x[1], reverse=True)
for doc, score in ranked:
    print(round(float(score), 3), doc)

マネージドAPIに切り替える場合も考え方は同じで、候補docsとクエリを渡し、返ってきたtop_n件の並びをそのまま採用します。モデルIDやパラメータ名は提供各社で異なるため、公式ドキュメントの最新版を確認してください。RAGへ組み込むなら、この並べ替え済み上位数件だけをLLMのコンテキストへ渡すことで、無関係な文書による幻覚を抑えられます。

モデル選定の判断基準:採用すべき場面と避けるべき場面

リランカーは「入れれば精度が上がる」万能部品ではありません。判断は次の軸で切り分けます。

マネージドAPIを選ぶべき場面:運用チームが小さく、多言語や長文を扱い、まず素早く精度を出したいとき。Cohere Rerank 4やVoyage rerank-2.5が候補になります。自己ホストを選ぶべき場面:データを外部に出せない、リランク件数が多くAPI課金が重い、GPUを運用できるとき。BGE-reranker-v2-m3やJina Reranker v2が候補です。多言語・長文が主戦場ならBGE系、レイテンシ最優先なら軽量版という順に絞ります。

逆に、リランカーを入れないほうがよい場面もはっきりしています。一段目の候補が数件しかない(並べ替える余地がない)、数十msの応答が必須でクロスエンコーダの遅延を許容できない、Recall@kが既に低く「候補取得側」に問題がある——こうした場合は、まず一段目の検索やインデックス設計を直すべきで、リランカーを足しても効果は薄いか、レイテンシ悪化のほうが目立ちます。2026年はCohere Rerank 3.5の非推奨化(rerank-4系への移行)やZerank-2の台頭などモデルの入れ替わりが速いため、特定モデルに固定せず、自前の評価セットでnDCGを測って差し替えられる構成にしておくのが安全です。

よくある質問(リランクモデル)

リランクとは何ですか?

検索で得た文書リストを、クエリとの関連度でもう一度並べ替え直す処理です。速く広く集める一次検索(ベクトル検索・全文検索)の後段に置き、上位に来るべき文書を精密に上げ直します。

リランキングとAIはどう関係しますか?

リランカーの中身はTransformerベースの言語モデルで、クエリと文書の意味関係を学習して関連度を出します。RAG(検索拡張生成)でLLMへ渡す文書を絞る用途が代表例で、AI検索の精度を支える部品になっています。

RRFとリランキングは同じものですか?

別物です。RRF(Reciprocal Rank Fusion)は複数の順位リストを順位の逆数で統合する軽い手法、リランキングはクエリと文書の内容を見て再スコアするモデル処理です。ハイブリッド検索で両方を段で重ねることもあります。

クロスエンコーダとバイエンコーダの違いは何ですか?

バイエンコーダはクエリと文書を別々にベクトル化して距離を測る方式で、事前計算が効き高速なため一段目のベクトル検索に使われます。クロスエンコーダはクエリと文書をペアで同時に読んで関連度を出す方式で、精密ですが1件ごとに推論が要り重いため、リランカー(二段目)に使われます。日本語を含む多言語のリランクはBGE-reranker-v2-m3やCohere Rerank 4がそのまま扱えます。

リランキングの効果はどう測りますか?

正解ラベル付きの評価クエリで、リランカー適用前後のnDCG@kやMRRを比較します。Recall@kが高いのにnDCG@kが低い状態はリランカーが効きやすい典型です。

関連記事

資料請求

RELATED POSTS 関連記事