0Pricing
AI Agents · レッスン

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段階検索

これらを組み合わせるパターンです。

  1. バイエンコーダーで上位50件の候補を高速に取得する
  2. クロスエンコーダーで上位5件に再ランキングする
  3. 上位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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Cross-Encoderによる再ランキング
  2. HyDE:仮想ドキュメントEmbedding
  3. マルチベクトル検索(ColBERT)
  4. RAG評価(RAGAS、Recall@K)
← AI Agentsに戻る