ストーリー
田
田中VPoE
クエリ変換で検索の入力を最適化した。次は検索の出力を最適化する「Reranking」だ
あなた
検索結果を並び替えるんですよね?最初の検索で順位が付いているのに、なぜもう一度並び替える必要があるんですか?
あ
田
田中VPoE
ベクトル検索はBi-Encoderという方式で、クエリとドキュメントを独立にEmbedding化して類似度を計算する。これは高速だが、クエリとドキュメントの細かな関係性を捉えきれない。Rerankingで使うCross-Encoderは、クエリとドキュメントをペアとして同時に処理するので、より精密な関連度スコアが出せる
田
田中VPoE
その通り。だからRerankingは最初の検索でTop-20程度に絞った後に適用する。全ドキュメントにCross-Encoderを適用するのは非現実的だ
Bi-Encoder vs Cross-Encoder
比較
Bi-Encoder(ベクトル検索):
クエリ → [Encoder] → クエリベクトル
→ コサイン類似度 → スコア
ドキュメント → [Encoder] → ドキュメントベクトル
特徴: クエリとドキュメントを独立に処理。事前にドキュメントのベクトルを
計算・格納可能。高速だが精度はやや劣る。
Cross-Encoder(Reranker):
[クエリ, ドキュメント] → [Encoder] → 関連度スコア
特徴: クエリとドキュメントをペアとして同時に処理。
単語間のAttentionが効くため高精度。ただし計算コストが高い。
| 観点 | Bi-Encoder | Cross-Encoder |
|---|
| 処理方式 | クエリとドキュメントを独立にエンコード | ペアとして同時にエンコード |
| 速度 | 非常に高速(事前計算可能) | 遅い(都度計算が必要) |
| 精度 | 中〜高 | 非常に高 |
| スケーラビリティ | 数百万〜数十億ドキュメント | 数十〜数百ドキュメント |
| 用途 | 初回検索(候補の絞り込み) | Reranking(最終順位の決定) |
主要なRerankerモデル
API型
| モデル | 提供元 | 特徴 | コスト |
|---|
| Cohere Rerank v3 | Cohere | 多言語対応、日本語サポート、API利用 | $2/1000検索 |
| Jina Reranker v2 | Jina AI | 高精度、長文対応 | APIプラン別 |
| Voyage Reranker | Voyage AI | コード検索にも強い | APIプラン別 |
OSS型
| モデル | 特徴 | 用途 |
|---|
| cross-encoder/ms-marco | MSMARCO学習済み、英語特化 | 英語ドキュメントのReranking |
| BAAI/bge-reranker-v2-m3 | 多言語対応、日本語良好 | 日本語を含む多言語環境 |
| ColBERT v2 | トークンレベルの遅延Interaction | 高速かつ高精度 |
ColBERT
仕組み
ColBERTはBi-EncoderとCross-Encoderの中間的なアプローチです。
ColBERTの処理:
クエリ: "RAGの精度向上"
→ トークンレベルEmbedding: [v_RAG, v_の, v_精度, v_向上]
ドキュメント: "検索精度を改善するReranking手法"
→ トークンレベルEmbedding: [v_検索, v_精度, v_を, v_改善, v_する, v_Reranking, v_手法]
スコア計算:
各クエリトークンに対して、最も類似度が高いドキュメントトークンを選択
→ MaxSim: max(sim(v_RAG, v_d)) + max(sim(v_精度, v_d)) + ...
| 観点 | ColBERT | Cross-Encoder |
|---|
| 精度 | 高(Cross-Encoderにやや劣る) | 非常に高 |
| 速度 | 高速(事前計算可能) | 遅い |
| 特徴 | トークンレベルのEmbeddingを事前計算 | 都度ペア計算 |
Reranking設計のベストプラクティス
パラメータ設計
| パラメータ | 推奨値 | 説明 |
|---|
| 入力件数 | 10〜20件 | 多すぎるとレイテンシ増加、少なすぎるとRecallが低下 |
| 出力件数 | 3〜5件 | LLMに渡すコンテキスト量とのバランス |
| スコア閾値 | 0.2〜0.5 | 関連度が低い結果を除外。値はモデル依存 |
| 最大ドキュメント長 | 512〜1024トークン | モデルの最大入力長を超えないように |
Rerankingの効果測定
Rerankingの効果(典型例):
ベクトル検索のみ:
Precision@5 = 0.60
MRR = 0.65
ベクトル検索 + Reranking:
Precision@5 = 0.85 (+42%)
MRR = 0.88 (+35%)
→ Rerankingにより、Top-5の精度が大幅に向上
コストと精度のトレードオフ
| 構成 | レイテンシ追加 | コスト追加 | 精度向上 |
|---|
| Rerankingなし | 0ms | 0円 | ベースライン |
| Cohere Rerank API | 200〜500ms | $2/1000検索 | +30〜40% |
| OSS Cross-Encoder(自前ホスト) | 300〜800ms | GPU費用 | +30〜40% |
| ColBERT(自前ホスト) | 50〜200ms | GPU費用 | +20〜30% |
「Rerankingは費用対効果が最も高い最適化手法だ。RAGの精度が思ったほど出ないとき、まずRerankingを試せ。たいていの場合、劇的に改善する」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| Bi-Encoder vs Cross-Encoder | 速度のBi-Encoder、精度のCross-Encoder |
| Rerankerの選定 | API型(Cohere等)は運用が楽、OSS型はコスト抑制 |
| ColBERT | Bi-EncoderとCross-Encoderの中間。速度と精度のバランス |
| 効果 | Precision@5が30〜40%向上する典型例が多い |
チェックリスト
次のステップへ
次は「Self-RAGとCRAG」を学びます。RAGシステム自身が検索結果の品質を自己評価し、改善する仕組みを理解しましょう。
推定読了時間: 30分