RAGを組んでみると、検索そのものは当たっているのに答えがずれる、という状態にぶつかります。
拾ってきた断片を眺めると、欲しかった1件は確かに入っている。
ただ、それが5番目や8番目に埋もれていて、モデルに渡る上位からは外れていました。
この「惜しい取りこぼし」を拾い直す工程がリランキング(reranking)と呼ばれるもの。
チャンクの切り方を整えたあとに効いてくる、検索の二段目です。
リランキングは検索を二段構えにする
リランキングとは、一次検索で集めた候補をもう一度別のモデルで採点し直し、関連度の高い順へ並べ替える処理を指します。
この構成を Retrieve & Re-Rank と呼んで整理しているのが、Sentence Transformers の公式ドキュメント。
Sentence Transformers の Retrieve & Re-Rank ガイド
一段目は質問と文書を別々に数値化する
一次検索を担うのがバイエンコーダで、質問と文書をそれぞれ独立にベクトル化し、その距離で近さを測ります。
文書側のベクトルは事前に計算して貯めておけるため、何十万件あっても検索は一瞬。
その代わり質問と文書は最後まで一度も突き合わされず、ベクトル同士の近さだけで順位が決まります。
似た言葉が多い文書が上に来て、答えを持っている文書が少し下に沈む。
そういうズレが起きる余地は、この構造上どうしても残るのです。
二段目は質問と文書を一緒に読ませる
対してクロスエンコーダは、質問と候補文書を1つの入力としてモデルへ同時に通します。
公式ドキュメントの表現を借りると、質問と候補文書を同時にネットワークへ渡し、関連度を示す0から1のスコアを1つ出力する仕組み。
両方を突き合わせて読んだうえで点を付けるので、単語の重なり方ではなく質問への答えになっているかで並べ替えられるわけです。
なぜ最初から全件をクロスエンコーダで採点しないのか
精度が高いなら一次検索も置き換えればいい、と考えたくなります。
ところが、これは計算量の面で成立しません。
総当たりの採点は現実的な速さに収まらない
クロスエンコーダは質問が来てから初めて採点できるため、文書側だけを先に計算しておくことができないのです。
公式ドキュメントも、数千から数百万の(質問, 文書)ペアを採点するのはかなり遅くなる、と明言しています。
10万件の文書があれば、1回の質問につき10万回モデルを走らせる計算。
検索の待ち時間としてはとても許容できない水準になります。
100件だけ並べ替えるという落としどころ
そこで、速いバイエンコーダで候補を絞り、遅いクロスエンコーダは絞ったあとにだけ使う形へ落ち着きました。
公式ガイドが挙げている例では、一次検索で100件ほどの候補を作り、それをクロスエンコーダで並べ替える流れが示されています。
全体の速度は一次検索が決め、上位の並び順は二段目が決めるという役割分担。
チャンキングが検索の解像度を決める工程だとすれば、リランキングは拾ったあとの優先順位を決める工程だと整理できます。
APIとして使うリランカー
自前でクロスエンコーダを動かさなくても済むように、リランキングだけを担うAPIが提供されているのです。
Cohere Rerank の入出力
Cohere の Rerank は、質問(query)と文書のリスト(documents)を受け取り、質問との意味的な関連度が高い順に並べ替えて返します。
Cohere Rerank のドキュメント
返す件数はtop_nで指定でき、上位いくつをモデルへ渡すかをそのまま制御できる作り。
公式ドキュメントによると Rerank 4.0 には fast と pro があり、100を超える言語に対応しているとのこと。
一次検索の実装を問わない後付けの部品なので、既存のRAGに一段挟むだけで試せるところが導入しやすい点です。
挟むときに増えるもの
もちろん、ただで精度が上がるわけではありません。
二段目を通すぶん応答までの待ち時間とAPI呼び出しの費用が上乗せされます。
候補を200件渡せば採点対象も200件になるので、一次検索で何件拾うかの設計とセットで考える必要があるのです。
まずは一次検索を50件前後にとどめ、top_nを絞ってモデルへ渡す件数を減らすあたりから触ってみるのが穏当なところ。
最後に
リランキングは、速さのために粗くした一段目を、精度の高い二段目で補う仕組みでした。
チャンクの切り方を整えても残る「順位のズレ」に効くという位置づけなので、切り方の見直しとは別の打ち手として持っておくと選択肢が増えます。
埋め込みモデルを差し替える前に、いま拾えている候補の中に答えが入っているかを確かめる。
入っているのに順位が低いだけなら、それはリランキングで解ける問題。
そもそも候補に入っていないなら、検索方式そのものを見直す番になります。
以上です。














コメントを残す