LLMにクエリから仮想的な回答文書を生成させ、その文書の埋め込みベクトルで検索することで、クエリと文書の意味的ギャップを埋めるRAG検索手法。2022年にGao et al.が提案した。
HyDEは、検索クエリを直接埋め込みベクトル化するのではなく、LLMに仮想的な回答文書を生成させてから埋め込み検索を行うRetrieval-Augmented Generation(RAG)の改良手法である。2022年にLuyu Gao et al.が論文「Precise Zero-Shot Dense Retrieval without Relevance Labels」で提案した。従来のRAGではクエリ「GPUの選び方は?」と文書「RTX 4070はミドルレンジ向けで...」の間に語彙・文体の差(クエリ-文書ギャップ)があり検索精度が低下する問題があったが、HyDEはこのギャップをLLMの生成能力で埋める。
| ステップ | 通常RAG | HyDE |
|---|---|---|
| 1 | クエリをベクトル化 | LLMで仮想文書生成 |
| 2 | ベクトルDBで検索 | 仮想文書をベクトル化 |
| 3 | Top-K文書を取得 | ベクトルDBで検索 |
| 4 | LLMで回答生成 | Top-K文書を取得 |
| 5 | — | LLMで回答生成 |
| レイテンシ | 200〜500ms | 500〜1,500ms |
| LLM呼び出し | 1回 | 2回 |
LangChainではHypotheticalDocumentEmbedderクラスとして実装済み。以下の3行で基本的なHyDEパイプラインが構築できる:
ChatOpenAI(GPT-4o)で仮想文書生成OpenAIEmbeddings(text-embedding-3-large)でベクトル化Chroma等のベクトルDBで検索LlamaIndexではHyDEQueryTransformとして提供。Haystack 2.xではカスタムコンポーネントとして実装する。
| 手法 | アプローチ | 強み | 弱み |
|---|---|---|---|
| HyDE | 仮想文書生成→検索 | 短いクエリに強い | レイテンシ・コスト増 |
| Self-RAG | 検索要否を自己判断 | 不要な検索を省略 | 学習コスト高 |
| CRAG | 検索結果を事後評価 | 低品質文書を排除 | 評価ステップの追加コスト |
| GraphRAG | ナレッジグラフ活用 | 関係推論に強い | グラフ構築コスト大 |
Q1: HyDEの仮想文書がハルシネーションだらけでも検索精度は上がるの? A: 上がる。仮想文書の事実正確性は重要ではなく、語彙・文体・構造の類似性が検索に効く。LLMが生成する仮想文書は実際の文書と表面的な特徴を共有するため、内容が不正確でもベクトル空間上では正しい文書の近傍に位置する。
Q2: HyDEのレイテンシを削減する方法は? A: 3つのアプローチがある。(1) 小型LLM(Phi-3-mini, Gemma 2B等)で仮想文書を生成しコスト・速度を最適化。(2) 同一クエリパターンの仮想文書をRedis等にキャッシュ。(3) Streaming生成で部分文書から早期にベクトル化を開始。
Q3: HyDEはどんなドメインで最も効果がある? A: 医療・法律・学術論文など専門用語が多くクエリと文書の語彙差が大きいドメインで効果が顕著。一般的なWeb検索のようにクエリと文書の語彙が一致しやすいドメインでは効果が限定的。