🐕

RAGの精度はRerankで決まる|top-k検索のその後を評価で検証する

はじめに

RAGを構築し、Embeddingによるコサイン類似度検索は実装したものの、
「検索結果の中に関係の薄いドキュメントが混ざる」
「top-kで取得したはずなのに、回答に使われてほしくない情報が選ばれる」
といった違和感を感じたことはないでしょうか。

多くの場合、この問題はEmbedding自体ではなく、top-k検索後の並び替え(選別)が行われていないことに起因します。

本記事では、コサイン類似度検索の後段に導入するRerankに焦点を当てて、top-k=20で取得したドキュメントに対して、どのように再評価・再順位付けが行われるのかを実際に検証します。

この記事を通して

  • Rerankとは何をしているのか
  • なぜEmbeddingだけでは不十分なのか
  • Rerank導入前後で検証結果はどのように変わるのか

を、評価の視点を交えて理解できる構成にしています。

なぜtop-k検索だけでは精度が頭打ちになるのか

まず前提として、Embeddingによるベクトル検索は「最終的に正しいドキュメントを1件に決める」ための処理ではなく、質問に対して漏れがないように、関連しそうな候補を広めに取得する候補生成(Recall)の役割を担います。

ただRAGでは、関連テキストを取りこぼさないためにtop-kを増やすほど、正解文書が含まれる確率が高まりますが、逆に取得するドキュメント数が増えることで、LLMに渡されるコンテキスト量も増加し、ノイズの多い情報が混ざりやすくなります。

その結果、

  • top-kを増やすと、Recallは向上しますが、文脈のノイズが増える。
  • top-kを減らすと、コンテキストは整理されますが、正解を取りこぼす。

という結果となり、ベクトル検索だけでは検索精度が頭打ちになるというジレンマに陥ります。

Rerankとは何か

こうした課題を解決するために用いられるのがRerankです。
Rerankは、ベクトル検索によって取得したtop-kの候補群に対して、クエリとの関連度を再評価し、順位を付け直す為の処理です。

先ほど述べた通り、top-kを増やすことで、Recallを向上させ、正解となるドキュメントを取りこぼしにくくなる課題がありますが、Rerankは、こうした不適切な候補を除外するためのフィルター的な役割を果たします。

具体的には、取得したtop-kのドキュメントに対して、クエリ(質問)との関連度を改めて評価し、そのスコアに基づいて順位を並び替えます。これにより、ベクトル検索だけでは判断しきれなかった「本当に質問に答えるために必要なドキュメント」を上位に引き上げることが可能になります。

検証設計

本章では、Rerankの有無によって検索結果の順位がどのように変化するかを検証します。

本記事の目的は、ベクトル検索そのものの精度を評価することではなく、ベクトル検索後に取得された候補群に対して、Rerankがどのように再順位づけを行うかを確認することです。

そのため本検証では、ベクトル検索を実施したと仮定し、top-k=20で取得された候補ドキュメントがすでに存在する前提で検証を行います。
これら20件のドキュメントに対してRerankを適用し、クエリとの関連度に基づいて順位がどのように入れ替わるかを評価します。

検証に使用するドキュメントは、以下の4カテゴリから構成します。
※ドキュメントは、GPT5.2により生成したものを使用します。

  • RAG設計解説
  • Embedding解説
  • Rerank/ Retriever系
  • 関連しそうでズレた記事

各カテゴリにつき5件ずつ、合計20件のドキュメントを用意します。

検証結果

実際にCohere社のRerankモデルを用いて、再順位付けの挙動を確認します。

データが何を使って、Rerankを使ったかはこちらを確認してください。

docsの中身
docs = [
    "RAG(Retrieval-Augmented Generation)は、LLM単体の生成能力に外部知識検索を組み合わせる設計手法です。ユーザーの質問をEmbeddingでベクトル化し、ベクトルDBから関連ドキュメントを検索します。その検索結果をコンテキストとしてLLMに渡すことで、事前学習に含まれない情報や最新情報を含めた回答が可能になります。RAGは「検索」と「生成」を分離することで、回答の根拠を外部データに依存させられる点が特徴です。",
    "RAG設計におけるEmbeddingモデル選定では、検索対象ドキュメントとの意味的な一致度が最重要です。特に日本語の場合、文脈理解が弱いEmbeddingを使うと類似度検索の精度が低下します。また、次元数は高ければ良いわけではなく、検索速度やコストとのバランスが必要です。さらに、後段でRerankを行う前提であれば、EmbeddingはRecall重視の設計にするのが一般的です。",
    "RAGの精度低下は、Embedding検索だけに依存していることが大きな原因になるケースが多いです。top-kを増やすとRecallは向上しますが、同時に無関係なドキュメントが混入し、ノイズが増加します。その結果、LLMが誤った文脈を参照してしまいます。また、チャンク分割が粗すぎたり、逆に細かすぎたりすると、意味が壊れた状態で検索され、期待した情報が取得できなくなります。",
    "チャンク分割はRAG設計の精度を左右する重要な要素です。文章を単純に文字数で分割すると、意味的なまとまりが壊れ、検索精度が低下します。そのため、見出しや段落単位で意味を保った分割が推奨されます。また、チャンクが大きすぎると不要な情報が混ざり、小さすぎると文脈不足になります。Rerankを前提とする場合は、やや小さめのチャンクでRecallを確保する設計が有効です。",
    "RAGにRerankを組み合わせる最大のメリットは、検索結果のノイズ除去です。Embedding検索は意味的に近いドキュメントを広く取得するため、top-kの中に不要な情報が含まれがちです。Rerankではクエリとドキュメントを直接比較し、関連度の高い順に並び替えることで、本当に必要な文脈を上位に集約できます。これにより、LLMが参照する情報の質が向上し、最終回答の精度が大きく改善されます。",
    "Embeddingとは、テキストなどのデータを数値ベクトルに変換する技術です。単語や文章の意味的な特徴を多次元ベクトルとして表現することで、数値計算による類似度比較が可能になります。Embeddingを用いることで、「意味が近い文章」を距離として測定でき、検索やクラスタリング、RAGのような情報検索型AIシステムの基盤として広く利用されています。",
    "Embedding検索でコサイン類似度がよく使われる理由は、ベクトルの大きさではなく方向の近さを評価できるためです。文章の長さや単語数が異なっても、意味が近ければ方向は似るという性質を活かせます。特に高次元Embeddingでは、ユークリッド距離よりも安定した類似度評価が可能なため、多くのベクトルDBで標準的に採用されています。",
    "Embeddingモデルの次元数が高いほど、意味表現の表現力は向上しますが、その分計算コストやストレージコストも増加します。次元数が低すぎると意味の違いを十分に表現できず、検索精度が低下します。一方で、高すぎる次元数は精度向上に寄与しないケースも多く、実運用ではRAG全体の性能やRerankの有無を踏まえて適切な次元数を選定することが重要です。",
    "Embedding検索は意味的に近いドキュメントを広く取得する仕組みのため、top-kを増やすほどRecallは向上しますが、同時に無関係な情報も混入します。Embeddingは文全体の意味を圧縮した表現であり、細かな文脈や質問意図の違いまでは完全に捉えられません。その結果、検索結果の上位にノイズが残り、LLMが誤った情報を参照する原因になります。",
    "RAG設計におけるEmbeddingの役割は、関連しそうな候補ドキュメントを漏れなく集めることです。つまり、PrecisionよりもRecallを重視した設計が求められます。Embedding検索は一次フィルタとして使い、多少ノイズが混ざる前提でtop-kを取得します。その後、Rerankや評価処理によって不要な情報を削減することで、全体として高精度なRAGシステムを構築できます。",
    "RAG設計では、RetrieverとRerankは異なる役割を担います。RetrieverはEmbedding検索を用いて、質問に関連しそうなドキュメントを広く取得する工程です。この段階ではRecallを重視し、多少ノイズが含まれることを許容します。一方Rerankは、Retrieverで取得した候補に対して、クエリとの関連度を再評価し、順序を最適化します。これにより、LLMが参照すべき情報を上位に集約できます。",
    "RetrieverはEmbeddingによる意味的な近さで検索を行いますが、質問意図や文脈の細かな違いまでは十分に反映できません。そのため、top-kを増やすと無関係なドキュメントが混ざり、検索精度が頭打ちになります。Rerankはクエリとドキュメントを直接比較するため、より精緻な関連度判定が可能です。RetrieverでRecallを確保し、RerankでPrecisionを高めることで、RAG全体の品質が向上します。",
    "Rerankモデルは、クエリと各ドキュメントのペアを入力として受け取り、関連度スコアを算出します。このスコアは、単純な意味類似度だけでなく、文脈の一致度や質問意図への適合度を考慮したものです。その結果、Embedding検索では上位に来なかったドキュメントが、Rerank後に上位へ移動することがあります。これにより、回答生成に適した情報が優先されます。",
    "Retrieverでtop-kを大きく取る最大のメリットは、重要なドキュメントの取りこぼしを防げる点です。特にEmbedding検索では、表現の違いによって関連文書が下位に沈むことがあるため、Recall向上に有効です。一方で、top-kを増やすほどノイズが増え、RerankやLLMに渡す文脈が冗長になります。そのため、Rerankを前提にした設計でなければ、逆に精度が低下する可能性があります。",
    "RAG設計では、Retrieverで「広く集める」、Rerankで「正しく絞る」という役割分担を明確にすることが重要です。RetrieverはEmbedding性能や検索速度を考慮しつつ、Recallを最大化する設定にします。一方、Rerankは計算コストが高いため、対象件数を適切に制御する必要があります。両者のバランスを取ることで、精度・コスト・レスポンス速度を両立したRAGシステムを構築できます。",
    "社内ナレッジ検索システムを導入する際には、技術的な問題よりも組織的な課題が大きく影響します。情報の更新が属人化していたり、ドキュメントの記載ルールが統一されていない場合、検索精度以前にデータの信頼性が低下します。また、検索システムを導入しても利用文化が定着しなければ活用されません。そのため、運用ルールや教育体制の整備が重要になります。",
    "AIを活用したFAQシステムは、問い合わせ対応の自動化による業務効率化が大きなメリットです。過去の質問と回答を蓄積することで、ユーザーは自己解決しやすくなります。また、問い合わせ傾向を分析することで、サービス改善にも活用できます。特にカスタマーサポート領域では、応答速度の向上と人件費削減の両立が期待できます。",
    "SEOにおいて重要なのは、検索ユーザーの意図を正しく理解したコンテンツ設計です。単にキーワードを多く含めるだけではなく、ページ構造や見出しの整理、内部リンク設計などが評価されます。また、検索エンジンはコンテンツの信頼性や専門性も重視するため、継続的な情報更新や品質管理が不可欠です。技術的SEOとコンテンツSEOの両立が求められます。",
    "機械学習モデルの評価指標には、Accuracy、Precision、Recall、F1スコアなどがあります。分類問題では、単純な正解率だけでなく、誤検知や見逃しの影響を考慮することが重要です。また、回帰問題ではRMSEやMAEなどが使われます。評価指標はタスクや業務要件によって適切に選択する必要があり、一つの指標だけで判断するのは危険です。",
    "クラウドでデータ分析基盤を構築する際は、スケーラビリティとコスト管理が重要なポイントになります。大量データを扱う場合、ストレージや計算資源の使い方によってコストが急増する可能性があります。また、セキュリティやアクセス制御の設計も欠かせません。分析基盤は一度作って終わりではなく、運用を前提とした設計が求められます。"
]

実際に検証

import cohere

co = cohere.ClientV2(COHERE_API_KEY)

query = "RAGとはなんですか?"

docs = [
    "RAG(Retrieval-Augmented Generation)は、...",
    "RAG設計におけるEmbeddingモデル選定では、..."
]

results = co.rerank(
    model="rerank-v4.0-pro", query=query, documents=docs, top_n=5
)

ranked = [(r.index, r.relevance_score, docs[r.index]) for r in results.results]

for i, (idx, score, text) in enumerate(ranked, start=1):
    print(i, idx, score, text[:60])

その実行結果がこちらです。

一番にヒットしたドキュメントは、関連度0.95で他を群を抜いて、一番と結果が出ており、Rerankによって、クエリとの関連度に基づく順位付けが適切に行われていることが確認できました。

考察:Rerankは万能ではない

Rerankは強力な手法ですが、全てのRAG構成で常に効果を発揮するわけではありません。

効くケース

  • 文章量が多い
  • 類似文書が多い
  • 質問が曖昧・抽象的

効かないケース

  • top-kがすでに小さい
  • embedding精度が十分高い

まとめ

今回はRAGで精度改善を行うために、Rerankモデルについて解説および検証を行いました。
RAGはEmbeddingによる検索だけで十分な精度が得られる場合もありますが、もし精度が出ない時のTipsの一つとして活用して頂ければ幸いです。


関連記事

Rerankによる再順位付けの効果を正しく判断するためには、RAG全体を評価する視点が欠かせません。
RAGの品質評価をRAGASで行う内容について整理した記事はこちらです:
https://zenn.dev/startspace/articles/4bd3129246f19f

また、Rerankの前段となるEmbedding検索の精度を高めるためには、チャンク設計も重要な要素になります。入力構造を壊さないチャンク化の設計パターンについては、以下の記事で詳しく解説しています。
https://zenn.dev/startspace/articles/a64111f52d1718

StartSpace Tech Blog

Discussion