RAG・検索基盤

リランキングとは|並べ直したら、nDCGが77.5%から69.8%に下がった

リランキングとは何をする工程なのか並べ直せば必ず良くなるのか何件取ってから並べ直すのか

検索の結果を、別の基準でもう一度並べ直す工程があります。粗く取った候補を、より丁寧な基準で見直す形です。

実際にやってみたところ、nDCGが77.5%から69.8%に下がりました。並べ直せば良くなる、とは限りません。

この記事の要点

  • 並べ直しでnDCG@3が77.5%から69.8%に下がった
  • 適合率@3は46.7%のまま変わらない
  • 並べ直せるのは粗く取った範囲の中だけ
  • 基準が合わなければ下げる工程になる

並べ直したら、nDCGが77.5%から69.8%に下がった

BM25で粗く取ってから語の近さで並べ直しました。nDCG@3は77.5%から69.8%に下がり、適合率は変わりません。

リランキングが常に効くのかを、実際に並べ直して測りました。用意したのは文書13件と問い5件で、BM25で上位6件を取ってから並べ直しています。

並べ直しは本当に実行しています。ただし基準は語の近さで、実際の製品が使う仕組みとは別物です。

javascript
// BM25は語の位置を見ないので、そこを補う基準にしてみた
function proximityScore(docText, qs) {
  const qw = [...new Set(bigrams(qs))].filter((w) => docText.includes(w));
  if (qw.length < 2) return qw.length;
  const pos = qw.map((w) => docText.indexOf(w)).sort((a, b) => a - b);
  const span = pos[pos.length - 1] - pos[0] + 2;
  // 語がそろっているほど高く、離れているほど低い
  return qw.length + qw.length / span;
}
text
問い                  並べ直し前        並べ直し後        nDCG前   nDCG後
宿泊費の上限は             1,5,12            1,12,5               100%      92%
日帰りの日当              3,9,12            3,9,12               100%     100%
前払の申請期限             12,4,6            12,4,6                63%      63%
備品の購入               12,7,0            12,7,0                63%      63%
報告書の提出期限            11,9,12           12,9,11               61%      31%

平均  nDCG@3  前: 77.5%  → 後: 69.8%
      適合率@3 前: 46.7%  → 後: 46.7%

最後の行が大きく落ちています。「報告書の提出期限」で61%から31%。正解の11番が1位から3位に押し下げられました。

何が上がったのか

代わりに1位になったのは12番、あらゆる語を少しずつ含む長い総則です。語の近さという基準では、総則のほうが高く出ました

総則には「報告書の提出」という並びがそのまま入っています。語としては近い。ところが期限は書かれていません。基準が捉えたかった「関連の深さ」とはずれています。

指標によって見え方が違う

適合率@3は46.7%のまま変わりませんでした。上位3件に入る顔ぶれは同じで、順番だけが入れ替わったためです。

順位を見る指標では下がり、件数を見る指標では変わらない。片方だけを見ていると、この劣化に気づけません。指標の違いはnDCGの記事で扱っています。

取った範囲の中でしか直せない

もうひとつ押さえておきたいのが、並べ直しの守備範囲です。粗く取った件数が、直せる範囲の上限になります。

上位6件を取ったなら、7位以下にある正解は絶対に上がってきません。取りこぼしは並べ直しでは直りません

基準が合わなければ、並べ直しは順位を下げる工程になる。

単位: %並べ直し前77.5%並べ直し後69.8%−10%問い5件の平均。適合率@3はどちらも46.7%で、上位3件の顔ぶれは変わっていない。
図1 ── 並べ直しの前後の nDCG@3
出典Elastic Docs「Semantic reranking」2026-08-18 確認
This technique makes sense on a small top-k result set, as one of the final steps in a pipeline.
原文Elastic Docs「Semantic reranking」 この内容の有効期限2027-02-18

リランキングとは何をする工程なのか

検索で粗く絞った候補を、より丁寧な基準で並べ直します。全件には掛けられない基準を、少数にだけ掛ける形です。

リランキングは、検索で取った候補を、別の基準でもう一度並べ直す工程です。検索の後段に置きます。

なぜ2段にするのか

丁寧な基準は重いためです。全件に掛けると時間がかかりすぎるので、粗い基準で少数に絞ってから掛けます。

Elasticの説明でも、この手法は小さな上位の結果集合に対して意味があり、処理の流れの最後のほうの段として使うとされています。

何が違う基準なのか

実際の製品では、問いと文書を同時に読む仕組みが使われます。同じ文書では、問いと文書の両方を同時に処理するので関連度をよりよく推し量れ、並べ直す役として有効になると説明されています。

検索の段では、文書を先に処理して数値にしてあります。問いを見ながら文書を読み直すことはできません。そこが並べ直しの段との違いです。

置く場所

検索の直後に置きます。語の検索と意味の検索を混ぜている場合は、混ぜた後の一覧に対して掛けるのが素直です。混ぜ方はハイブリッド検索の記事で扱っています。

余談 前後を測らないと入れ替えられない

実装してみて痛感したのは、並べ直しの前の順位を保存しておかないと、良し悪しを判定できないということでした。入れた後の数字だけを見ても、上がったのか下がったのか分かりません。前の節の77.5%も、並べ直す前に測っておいたから比べられます。

出典Elastic Docs「Semantic reranking」2026-08-18 確認
Because a cross-encoder model simultaneously processes both query and document texts, it can better infer their relevance, making it more effective as a reranker than a bi-encoder.
原文Elastic Docs「Semantic reranking」 この内容の有効期限2027-02-18

リランキングを入れるときの落とし穴

入れれば良くなると思い込むことです。基準が合わなければ、前の節のように下がります。

リランキングは工程が増えるぶん、入れたこと自体が改善だと思われがちです。前の節の結果は、そうではないことを示しています。

下がっても気づきにくい

下がったことに気づけるかどうかが分かれ目です。適合率だけを見ていれば、46.7%のまま変わらないので何も起きていないように見えます

利用者から見ると、上位3件の1位と3位が入れ替わっただけです。苦情になるほどではないが、確実に使いにくくなっているという状態になります。

工程が増える

並べ直しには計算が要ります。問いと文書を同時に読む仕組みを使うなら、候補の件数だけ処理を回すことになります

6件なら6回、20件なら20回です。応答時間にそのまま乗るので、粗く取る件数を増やすほど遅くなります

入れる順番

  1. 並べ直す前の順位で測る。これがないと比べられない
  2. 並べ直しを入れて測り直す。同じ問いで
  3. 下がった問いを個別に見る。何が上がったかを確かめる
  4. 測らずに入れる。下がっても気づけない

3番目が改善につながります。前の節でも、上がってきたのが長い総則だと分かったので、基準の問題だと判断できました

入れた後の数字だけでは、上がったか下がったか分からない。

充足 2 / 4並べ直す前の順位を測ってある前が77.5%と分かっていたから、後の69.8%を劣化と判定できた順位を見る指標で測っている適合率は46.7%のまま変わらず、劣化が見えなかった入れたこと自体を改善とみなしている基準が合わなければ下がる。実測では7.7ポイント落ちた取りこぼしも並べ直しで直ると考えている並べ直せるのは粗く取った範囲の中だけ。7位以下は上がってこない文書13件・問い5件での実測にもとづく。BM25で上位6件を取ってから並べ直した。
図2 ── リランキングを入れるときの点検項目
出典Elastic Docs「Semantic reranking」2026-08-18 確認
Bi-encoders rerank using embeddings.
原文Elastic Docs「Semantic reranking」 この内容の有効期限2027-02-18

よくある質問

なぜ下がったのですか
並べ直しの基準が、この文書と問いに合っていなかったためです。語が近くに並んでいるかを見る基準にしましたが、それが正解の順位と一致しませんでした。
適合率が変わらないのはなぜですか
上位3件に入る文書の顔ぶれが変わらず、順番だけが入れ替わったためです。順位を見る指標では下がり、件数を見る指標では変わりません。
何件取ってから並べ直しますか
並べ直せるのは取った範囲の中だけなので、取る件数が上限になります。ただし増やすほど並べ直しの計算も増えます。
実際の製品では何を基準にしますか
問いと文書を同時に読む仕組みが使われます。片方ずつ処理する仕組みより関連度を捉えやすいとされています。

まとめ

  • リランキングは粗く取ってから別の基準で並べ直す工程
  • 実測ではnDCG@3が77.5%から69.8%に下がった
  • 適合率@3は46.7%のままで、順番だけが入れ替わった
  • 採用の前に前後を測ることが要る

今日から始められること

  1. 並べ直す前の順位で、nDCGを測っておく
  2. 並べ直しを入れて、同じ問いで測り直す
  3. 下がった問いについて、どの文書が上がったかを見る
  4. 上がらないなら、基準そのものを見直す

実務で組んだリランキングのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る