AI・機械学習
上級
HyDE(Hypothetical Document Embeddings)(ハイドハイポセティカルドキュメントエンベディングス)
RAG改善技術。クエリに対してLLMが仮想的な回答ドキュメントを生成し、その埋め込みベクトルで検索することで関連文書の召喚精度を向上させる手法。
0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
RAG
HyDE
埋め込み検索
LLM
検索精度改善
ベクトル検索
HyDE(Hypothetical Document Embeddings)とは
HyDE(Hypothetical Document Embeddings)は、2022年にLuyu Gaoらが論文「Precise Zero-Shot Dense Retrieval without Relevance Labels」で提案したRAG(Retrieval-Augmented Generation)の検索精度改善手法である。従来のRAGにおける検索クエリの埋め込みベクトルではなく、LLMが生成した「仮想的な回答ドキュメント」の埋め込みベクトルを使用して知識ベースを検索する。
従来のRAGとの違い
従来のRAG検索フロー:
- ユーザークエリ → 埋め込みベクトル化
- ベクトルデータベースで類似文書検索
- 検索文書をコンテキストとしてLLMに渡す
- LLMが最終回答を生成
HyDEのフロー:
- ユーザークエリ → LLMが仮想的な回答ドキュメントを生成(まだ事実確認なし)
- 仮想ドキュメント → 埋め込みベクトル化
- ベクトルデータベースで類似文書検索(仮想ドキュメントのベクトルで)
- 検索文書をコンテキストとしてLLMに渡す
- LLMが最終回答を生成
なぜ有効か:意味空間の問題
ユーザーのクエリ(質問文)と正解文書(回答文)は、意味空間上で必ずしも近くに位置しない。たとえば「Transformerの仕組みは?」というクエリと「Self-Attentionはクエリ・キー・バリューの行列演算で…」という文書は、意味は近いが表現形式が異なる。
HyDEでは、LLMがクエリに対して「回答らしいテキスト」を先に生成することで、文書と同じ意味空間・表現形式に変換し、ベクトル空間での類似度を高める。これによりゼロショットでの高精度検索が実現する。
実装例
from openai import OpenAI
client = OpenAI()
def hyde_search(query: str, vector_store) -> list:
# Step 1: 仮想回答ドキュメントを生成
hypothetical_doc = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "以下の質問に対する回答を1段落で生成してください。"},
{"role": "user", "content": query}
]
).choices[0].message.content
# Step 2: 仮想ドキュメントの埋め込みベクトルを生成
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=hypothetical_doc
).data[0].embedding
# Step 3: ベクトルDBで類似文書検索
results = vector_store.similarity_search_by_vector(embedding, k=5)
return results
利点と欠点
利点:
- ゼロショットで高精度検索が可能(ファインチューニング不要)
- 特に短い・曖昧なクエリに効果的
- 言語間検索(日本語クエリ→英語文書)での精度向上
欠点:
- 仮想ドキュメント生成のLLM呼び出しコスト増加
- 生成した仮想ドキュメントが誤った方向に引っ張る「幻覚リスク」
- レイテンシ増加(追加のLLM推論ステップ)
他のRAG改善手法との比較
| 手法 | アプローチ | 主な改善点 |
|---|---|---|
| HyDE | 仮想ドキュメント埋め込み | 検索クエリの意味表現 |
| RAG-Fusion | 複数クエリ + RRF | 検索の網羅性 |
| Adaptive RAG | 検索要否の自動判断 | 検索コスト効率 |
| RAPTOR | 階層的要約ツリー | 長文書の構造把握 |
LangChain、LlamaIndex等のRAGフレームワークに実装済みであり、実運用環境での採用事例が増加している。