RAG入門:AIに知識を与える技術
RAG精度改善(2):高度な検索手法(HyDE, Reranking)
このレッスンで分かること
- この記事では「RAG精度改善(2):高度な検索手法(HyDE, Reranking)」を RAG 実装 の現場で使える形で整理します
- RAGの検索精度に悩んでいませんか? をおさえれば、現場で迷ったときに立ち戻れる
- なぜ標準的なベクトル検索だけでは限界があるのか? をおさえれば、現場で迷ったときに立ち戻れる
- HyDE(Hypothetical Document Embeddings)による検索精度の向上 をおさえれば、現場で迷ったときに立ち戻れる
- HyDEの仕組み をおさえれば、現場で迷ったときに立ち戻れる
RAG精度改善(2) とは
RAGの検索精度を向上させる「HyDE」と「Reranking」を詳しく解説。仮説ドキュメント生成による検索ヒット率の向上や、リランカーを用いた高精度な並べ替え手法など、実務で使える高度な検索テクニックを学びます。
RAGの検索精度に悩んでいませんか?
RAG(検索拡張生成)を構築した際、多くの開発者が最初に直面する壁が「関連するドキュメントを正しく取得できない」という問題です。ユーザーが入力した短い質問文と、膨大なデータベース内の文書の間には、言葉の表現や情報密度に大きな隔たりがあります。単純な意味的検索(セマンティック検索)だけでは、この溝を埋めきれないケースが多いのです。
検索の質 = RAGの質 — LLMをいくら高性能にしても、検索段階で関連ドキュメントを拾えなければ回答は崩れます。改善ポイントの大半は Retrieval 層にあります。
本レッスンでは、RAGの検索精度を劇的に向上させる2つの強力な手法「HyDE」と「Reranking」について解説します。これらの技術をマスターすることで、AIがより正確で、文脈に即した回答を生成できるシステムを構築できるようになります。
なぜ標準的なベクトル検索だけでは限界があるのか?
標準的なRAGでは、ユーザーの質問をベクトル化し、データベース内のベクトルと比較して類似度の高いものを抽出します。しかし、以下の理由により精度が低下することがあります。
- 質問文の情報量不足は「○○の手続きは?」といった短い質問文には、検索に必要なキーワードや文脈が十分に揃っていません。
- 表現の揺らぎはユーザーの言葉遣いと、社内ドキュメントの専門用語が一致しない場合、コサイン類似度が低くなってしまいます。
- 上位検索結果のノイズは検索エンジンの上位5件が、必ずしも回答に最適な5件であるとは限りません。
これらの課題を解決するために考案されたのが、検索プロセスを高度化するテクニックです。
HyDE(Hypothetical Document Embeddings)による検索精度の向上
HyDE(ハイド)は、日本語で「仮説ドキュメント埋め込み」と呼ばれます。その仕組みは非常にユニークです。
HyDEの仕組み
通常、ユーザーの「問い」で検索を行いますが、HyDEでは以下のステップを踏みます。
- 仮の回答を生成はユーザーの質問に対し、
LLM(生成AI)が「おそらくこんな内容の回答がドキュメントにあるだろう」という「仮の回答(仮説ドキュメント)」を生成します。 - 仮の回答で検索はその生成された「仮の回答」をベクトル化し、データベースに対して検索をかけます。
HyDE — 「答えで答えを探す」発想。短い質問より、LLMが生成した仮の回答文の方がドキュメントに近い形をしているため、ヒット率が伸びます。
なぜHyDEが有効なのか?
LLMが生成する「仮の回答」には、ユーザーの短い質問よりも多くの関連キーワードや文脈が含まれています。たとえ内容が一部間違っていたとしても(ハルシネーションが含まれていても)、その「文章の形」や「使われている単語」が実際のドキュメントと似ているため、検索ヒット率が大幅に向上するのです。
良い例 HyDEを使用した場合の検索
- ユーザー:「退職金の手続きを教えて」
- LLMの仮回答:「退職金の申請には、退職願の提出後に社内ポータルから『退職給付金申請書』をダウンロードし……(中略)」
- 検索:この「仮回答」を使って検索するため、社内規定の具体的な記述とマッチしやすくなる。
避けたい例 標準的な検索のみの場合
- ユーザー:「退職金の手続きを教えて」
- 検索:この短い一文のみで検索。関係の薄い「退職」という言葉を含む別の雑多な文書がヒットしてしまう可能性がある。
Reranking(リランキング)で検索結果を並べ替える
検索の精度を高めるもう一つの主役が、リランキング(Reranking)です。これは、一度取得した検索結果を「精査」して並べ替えるプロセスを指します。
二段階検索の戦略
ベクトル検索は「高速だが精度に限界がある」という特性を持っています。そこで、以下の二段階で検索を行います。
- ファーストステージ(
Retrieval)は高速なベクトル検索で、広めに(例えば上位50件)候補を抽出します。 - セカンドステージ(
Reranking)は抽出された50件に対して、精度は高いが処理が重い「Reranker(リランカー)」モデルを使い、質問との関連度を厳密に再計算して上位5件に絞り込みます。
Cross-Encoderの魔法
通常のベクトル検索は、質問と文書を別々に計算する「Bi-Encoder」方式ですが、リランキングで使われるCross-Encoder(クロスエンコーダ)は、質問と文書をセットにして一つのモデルに入力します。これにより、両者の微細なニュアンスの重なりを判定できるため、圧倒的に正確なランキングが可能になります。
二段構えがコスパ最強 — 安いベクトル検索で候補を広く集め、高価な Cross-Encoder で少数だけ精査する。精度と計算コストのバランスを取る定石パターンです。
| 特徴 | ベクトル検索(Bi-Encoder) | リランキング(Cross-Encoder) |
|---|---|---|
| 速度 | 非常に高速 | 低速(計算量が多い) |
| 精度 | 標準的 | 非常に高い |
| 主な用途 | 膨大なデータからの候補絞り込み | 少数の候補からの厳選 |
HyDEとRerankingを組み合わせた実践的パイプライン
これらを組み合わせた最高精度の検索パイプラインは以下のようになります。
- Query Expansionはユーザーの質問をHyDEで「仮の回答」に拡張する。
- Initial Retrievalは「仮の回答」で
ベクトルデータベースから上位100件を取得。 - Rerankingは100件のドキュメントと元の質問をリランカーにかけ、最も関連性の高い5件を選ぶ。
- Generationは選び抜かれた5件をコンテキストとしてLLMに渡し、最終的な回答を生成する。
このように、検索のステップを「多層化」することが、商用レベルのRAGには欠かせません。
やってみよう あなたの会社のRAGで、「専門用語が多い文書」を検索する場合、HyDEとRerankingのどちらがより効果的だと思いますか?それぞれのメリットを考慮して考えてみましょう。
まとめ:検索の質が回答の質を決める
RAGの性能は、LLMの性能以上に「いかに良質な情報を検索できるか」にかかっています。
HyDEは、質問の情報量を増やして検索のヒット率を高めます。Rerankingは、検索された候補の中から「真に正しい情報」を厳選します。
まずは実装が容易なRerankingから試し、それでも精度が不足する場合にHyDEを検討するのが実務的なステップです。次回のレッスンでは、これらの検索結果を最大限に活かす「プロンプトエンジニアリング」について学んでいきましょう。
検索の高度化は、RAG開発の中で最も奥が深く、面白い部分です。パラメーター一つ、手法一つでAIの賢さが劇的に変わる体験を、ぜひ楽しんでください!
現場でよくある具体例
- 業務ケース 1 — 社内規程 200 ページに RAG を導入。チャンクサイズ 512、
top-k=5、Re-ranker 有りで Recall@5 が 0.62 → 0.81 - 業務ケース 2 — エンジニア向け技術文書では「コードブロックを 1 チャンク」にしたら検索精度が大きく改善
- 業務ケース 3 — 営業 FAQ では
BM25+ Embedding の Hybrid Retrieval で、固有名詞検索の取りこぼしが減った
次にとるべきアクション
- 手元の社内 PDF / FAQ 10 件で RAG ミニ版を作る —
LangChainかLlamaIndexで構築し、「RAG精度改善(2):高度な検索手法(HyDE, Reranking)」の論点を試す - チャンクサイズと検索件数を 2 通り試す — 256 / 512 トークン × top-k=3 / 5 など、定量比較する
- 評価指標を 1 つ決める — Recall@k / 回答正答率 / コストのいずれかをチームで KPI 化する
次のレッスン
次は RAG精度改善(3):プロンプトエンジニアリングの勘所 で、RAG精度改善(3):プロンプトエンジニアリングの勘所 を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- RAG精度改善(2) の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. RAG精度改善(2) とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
参考にした出典
- Lewis et al.「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」 — RAG の原論文(出典: NeurIPS 2020, https://arxiv.org/abs/2005.11401)
- OpenAI Cookbook「Question answering using embeddings」 — Embedding ベース検索の実装例(出典: OpenAI, https://cookbook.openai.com/examples/question_answering_using_embeddings)
- LangChain 公式ドキュメント「RAG」 — チャンク分割・リトリーバ設計のベストプラクティス(出典: LangChain, https://python.langchain.com/docs/tutorials/rag/)
学習を加速したい方へ
RAG (検索拡張生成) 入門ガイドを体系的にマスターするなら、chotdekiru の無料学習ポータル で実際に手を動かして学習を始めるのがおすすめです。質問・つまずきも現役エンジニアが伴走します。
復習ミニクイズ
RAGの検索精度を最大化するためにHyDEとRerankingを組み合わせて使用する場合、その処理プロセスとして最も適切なものはどれですか?