「 精度を上げる魔法のような手法」として (再ランク)が紹介されることが多いですが、入れる前と入れた後で本当に精度が跳ねるかは、ケースバイケース。今回は仕組みと判断基準を整理します。
Reranker の仕組み:1ステージ vs 2ステージ
Reranker が効くケース
- ナレッジが多い(10万文書以上): だけだと類似度上位にノイズが入りやすい
- 長文の関連性判定が必要:Embedding は「全体的な類似」、Rerankerは「クエリへの直接回答度」を見る
- 精度が重要で、レイテンシ300ms までは許容:1ステージ100ms → 2ステージ400ms
- 多言語が混在:クロスエンコーダは言語間の関連性をより強く把握する
Reranker 不要なケース
- ナレッジが小さい(数千文書まで):Embedding 精度で十分
- リアルタイム性命:レイテンシ予算 200ms 以下
- 質問が単純:「FAQ から1個引いて返す」程度なら1ステージで十分
- コスト最優先:Reranker のホスティング/ コストが上乗せ
実装:Cohere Rerank の組み込み
Reranker を入れる最小実装
Python
import cohereco = cohere.Client(api_key=COHERE_KEY)
def search_with_rerank(query: str, top_k: int = 5): # ステージ1: Embedding検索で50件取る candidates = vector_db.query(query, top_k=50)
# ステージ2: Rerank で再ランク rerank_response = co.rerank( query=query, documents=[c.content for c in candidates], top_n=top_k, model="rerank-multilingual-v3.0", )
# スコア順に並び直して返す return [ candidates[r.index] for r in rerank_response.results ]prompt:Reranker 効果検証
現在の RAG に Reranker を入れた場合の効果を A/B テストで検証してください。
## 比較対象
- A: 現行(Embedding のみ)
- B: Embedding + Cohere Rerank
## 評価
- 評価セット @eval/queries.json
- Recall@5, MRR, P95レイテンシ
- コスト試算(月100万クエリ)
## 判断
- Bが Aより 5pt 以上改善したら採用推奨
- レイテンシが400ms超えるなら不採用
- コストが月$500超えるなら要相談 想定される実行結果(例示)
## A/B テスト結果
| 指標 | A (現行) | B (Rerank) | 差分 |
|---|---|---|---|
| Recall@5 | 0.78 | 0.91 | +13pt ✅ |
| MRR | 0.61 | 0.74 | +13pt ✅ |
| P95レイテンシ | 280ms | 380ms | +100ms |
| 月コスト | $720 | $720 + $200 = $920 | +$200 |
## 判断: **採用推奨**
- 改善幅 13pt(基準5pt超え)
- レイテンシ 380ms(400ms以下)
- 追加コスト $200(基準内)
## 実装PR案
- `rag/retrieval.py` に rerank ステージ追加
- 環境変数 `COHERE_RERANK_API_KEY` 追加
- 既存テストが全て通ることを確認
PR #523 を生成しました。次回予告
EP.05 では、RAG の評価設計(Eval)を、定性・定量・継続的評価の3層で解説します。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。