Reranker
リランカーは、クロスエンコーダーなどの低速で高精度なモデルを使い、リトリーバーが選んだ候補を再スコアリングしてから、ユーザーやLLMに結果を提示します。
リランカーは、高速な第1段階の検索器から短い候補リストを受け取り、各候補をクエリと照合してより慎重にスコアリングし、リストを並べ替えるモデルです。検索エンジン、検索拡張生成(RAG)のパイプライン、レコメンデーションシステムでは、この手法が使われます。最も精度の高い関連性モデルは数百万件の文書を処理するには遅すぎますが、上位数十件から数百件の処理には十分高速だからです。テキスト検索では、標準的なリランカーはクロスエンコーダーです。クロスエンコーダーは、クエリと1つの候補を一緒に読み取り、単一の関連性スコアを出力するTransformerです。NogueiraとCho(2019)はこの方法でBERTをファインチューニングし、MS MARCOのパッセージランキングのリーダーボードで、以前の最高値を相対値で27%上回るMRR@10を達成しました。
検索してから再ランキングする仕組み#
第1段階では再現率を重視します。BM25によるキーワード照合、事前計算済みの埋め込みを使ったベクトル検索、またはその両方により、コレクション全体から妥当な候補を数百件、数ミリ秒で取得します。リランカーは適合率を重視します。クエリと候補の各ペアに対してモデルの処理を一通り実行し、上位数件だけをユーザーに提示するか、LLMのコンテキストウィンドウに渡します。UltralyticsのVisualAISearchソリューションは、この種の第1段階の検索器です。画像フォルダーをCLIP ViT-B/32で埋め込み、テキストクエリとのコサイン類似度で順位付けし、デフォルトでは類似度しきい値0.1を超える一致を最大30件返します。
クロスエンコーダーとバイエンコーダー#
一般的な検索器であるバイエンコーダーは、クエリと各文書を別々に埋め込むため、文書ベクトルを一度だけ計算してベクトルデータベースに保存できます。この独立性は同時に限界でもあります。クエリが分かる前に文書ベクトルが固定されるためです。クロスエンコーダーは、クエリと文書を連結して1つの入力にするため、自己注意機構でクエリ内の各単語と文書内の各単語を比較できますが、クエリ時にはペアごとに順伝播を一通り実行する必要があります。ColBERTは両者の中間に位置し、文書トークンごとに1つのベクトルを保存して、遅延インタラクションによりクエリのトークンと照合します。Sentence TransformersのCrossEncoderクラスは、MS MARCOの検索クエリで学習したms-marco-MiniLM-L6-v2などのリランカーを実行します。
from sentence_transformers import CrossEncoder
query = "When was the transformer architecture introduced?"
# Shortlist returned by a fast first-stage retriever, in its original order
candidates = [
"Transformer models such as GPT and BERT are widely used in natural language processing.",
"An electrical transformer changes the voltage of an alternating current.",
"Convolutional neural networks became popular after AlexNet won ImageNet in 2012.",
"The transformer was introduced in the 2017 paper Attention Is All You Need.",
]
# The cross-encoder reads the query and each candidate together and scores their relevance
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L6-v2")
ranked = reranker.rank(query, candidates)
for hit in ranked:
print(f"{hit['score']:6.2f} {candidates[hit['corpus_id']]}")質問に答えるパッセージは、スコア6.97で最下位から1位に上がり、次点候補の-4.48を大きく上回ります。電気変圧器についての文はクエリの重要な単語を共有していますが、スコアは-5.29です。
リランカーの種類#
- クロスエンコーダー: MS MARCO MiniLMモデルやBAAIのbge-rerankerファミリーなど、関連性ラベルでファインチューニングされたコンパクトなTransformerです。ホスト型の再ランキングAPIとしても提供されています。
- LLMリランカー: 大規模言語モデル(LLM)に候補のスコア付けやリスト全体の並べ替えを指示します。RankGPTは、ChatGPTとGPT-4が並べ替えたリストを出力してパッセージを再ランキングできることを示し、ChatGPTの順位付けを小規模な専用リランカーに蒸留しました。
- Learning-to-rankモデル: レコメンデーションシステムやeコマースシステムでは、クリック履歴、価格、新しさなどの特徴量を使った勾配ブースティング木などのモデルで候補を再ランキングします。学習にはランキング目的関数を用い、LightGBMやXGBoostで利用できます。
リランカーと関連概念#
- セマンティック検索: 通常はバイエンコーダー検索器を使い、意味に基づいて検索します。リランカーは、その上に追加する任意の第2段階です。
- ハイブリッド検索: キーワード検索とベクトル検索の結果リストを統合します。多くの場合、コンテンツを再度読み込まずに順位を組み合わせる逆順位融合を使います。統合後のリストには、リランカーを適用することがよくあります。
- 知識蒸留: 高速な検索器を学習させ、低速なリランカーのスコアを模倣させることで、再ランキングの品質の一部を第1段階に移します。
- 2段階物体検出器: 画像に対して同じパターンを適用します。領域提案段階で候補ボックスを提示し、第2段階で各ボックスのスコアを再計算して調整した後、非最大値抑制(NMS)で重複するボックスを除去します。










