Cross-Encoderによる再ランキング
低コストなEmbeddingで上位50件を取得し、より低速なCross-Encoderで上位5件を再ランキングして精度を高めます。
「Cross-Encoderによる再ランキング」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
再ランキングの理由
埋め込みの類似度は、高速で大まかな第一段階の検索です。クエリとKEYWORDSを共有していても、実際にはQUESTIONと関係のないチャンクが含まれることがよくあります。
再ランキングモデルは、(クエリ、チャンク)のペアを受け取り、より正確な関連度スコアを計算します。
バイエンコーダーとクロスエンコーダー
テキストの類似度を計算する2つのアーキテクチャです。
- バイエンコーダー — クエリとチャンクを別々に埋め込み、コサイン類似度を計算します。高速(ベクトル化を一度行って再利用できます)ですが、精度は低くなります。
- クロスエンコーダー — (クエリ、チャンク)をモデルに同時に入力して処理します。低速(ペアごとに実行します)ですが、精度は大幅に高くなります。
2段階検索
これらを組み合わせるパターンです。
- バイエンコーダーで上位50件の候補を高速に取得する
- クロスエンコーダーで上位5件に再ランキングする
- 上位5件をLLMのプロンプトに渡す
バイエンコーダーの速度とクロスエンコーダーの精度を両立できます。
Cohere Rerankの利用
本番環境で最も簡単に使えるクロスエンコーダーです。
import cohere
co = cohere.Client(COHERE_KEY)
results = co.rerank(
model='rerank-multilingual-v3.0',
query='What is the refund policy?',
documents=top_50_chunks,
top_n=5
)
for r in results.results:
print(r.index, r.relevance_score, top_50_chunks[r.index])オープンソースの再ランキングモデル
BGE Rerankerは、主要なOSSの選択肢です。
from sentence_transformers import CrossEncoder
model = CrossEncoder('BAAI/bge-reranker-base')
pairs = [(query, chunk) for chunk in candidates]
scores = model.predict(pairs)
ranked = [c for _, c in sorted(zip(scores, candidates), reverse=True)][:5]Voyage Rerank
import voyageai
vo = voyageai.Client(api_key=VOYAGE_KEY)
res = vo.rerank(
query=query,
documents=candidates,
model='rerank-2',
top_k=5
)再ランキングが有効な場合
- 候補リストが長い場合(50〜200件)
- 関連性の差が微妙な場合
- 否定や比較を含むクエリの場合
- 多言語のケース
再ランキングが不要な場合
- 候補集合がすでに絞り込まれている場合(バイエンコーダーによる上位5件など)
- 低レイテンシが求められ、重要度の低いクエリの場合
コストのトレードオフ
クロスエンコーダーは、ペアごとに推論を実行します。50件の候補を再ランキングすると、モデル呼び出しは50回になります(Cohere/Voyageなら安価ですが、自前ホスティングでは低速になります)。
再ランキングの候補数は50〜200件を目安にしてください。それ以上に増やしても、割に合わないことがほとんどです。
Integrating into LangChain
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank
compressor = CohereRerank(top_n=5)
retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=vector_retriever
)Integrating into LlamaIndex
from llama_index.postprocessor.cohere_rerank import CohereRerank
rerank = CohereRerank(top_n=5)
query_engine = index.as_query_engine(
similarity_top_k=20,
node_postprocessors=[rerank]
)多様性を考慮した再ランキング
スコア上位の結果だけでなく、多様な結果が欲しい場合があります(スコア上位の結果は、ほぼ重複している可能性があります)。MMR(Maximal Marginal Relevance)は、スコアと多様性のバランスを取ります。
from langchain.vectorstores import Chroma
results = store.max_marginal_relevance_search(query, k=5, fetch_k=20, lambda_mult=0.5)2段階パターン
1つだけを使うのではなく、バイエンコーダーとクロスエンコーダーを組み合わせるのはなぜでしょうか。
まとめ
バイエンコーダーで50件を取得し、クロスエンコーダーで5件に再ランキングします。本番環境ではCohereまたはVoyageを使い、自前ホスティングではOSSのBGEを使います。コストはある程度増加しますが、精度が大幅に向上します。
よくある質問
「Cross-Encoderによる再ランキング」レッスンは無料ですか?
はい。「Cross-Encoderによる再ランキング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「Cross-Encoderによる再ランキング」で何を学びますか?
低コストなEmbeddingで上位50件を取得し、より低速なCross-Encoderで上位5件を再ランキングして精度を高めます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Cross-Encoderによる再ランキング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Cross-Encoderによる再ランキング
- HyDE:仮想ドキュメントEmbedding
- マルチベクトル検索(ColBERT)
- RAG評価(RAGAS、Recall@K)