首页/AI/RAG 与向量库速查/HyDE 假设文档嵌入检索

HyDE 假设文档嵌入检索

HyDE 先让模型对问题写一段假设答案,用这段“假答案”的向量去检索真实文档;问题与文档措辞差异大的零样本场景可改善召回,代价是多一次生成调用。

RAG 与向量库速查AI更新于 2026-10-13

HyDE 是什么

HyDE(Hypothetical Document Embeddings)先让模型针对用户问题写一段“假设答案”,再用这段假答案的向量去检索真实文档。直觉是:答案与答案的措辞、句式更接近,而问题与文档之间存在文体鸿沟。它在零样本、问题表述与文档措辞差异大的场景能改善召回,代价是每次检索多一次生成调用,且假设文档可能包含编造内容。

基本信息

提出者Gao 等,Precise Zero-Shot Dense Retrieval without Relevance Labels(2022)
流程问题 → 生成假设文档 → 向量化 → 检索 → 只保留真实文档
额外成本每次查询多一次生成调用
适用零样本、无标注、问题与文档文体差异大
不适用已有高质量改写策略或高频低延迟场景

典型使用场景

  • 冷启动知识库:还没有标注数据,无法用微调改善检索时先试 HyDE
  • 问答文体差异大:用户口语提问,文档是规范的条款或手册
  • 与多查询融合配合:把原问题与假设文档各检索一次,合并候选后统一重排
  • 低延迟要求下的取舍:只对复杂问题启用,简单问题直接检索
  • 评测对照:与直接检索、查询改写两条基线在同一评测集上比 Recall@k

流程伪代码

流程伪代码
hypo = llm('写一段能回答该问题的短文,无需保证准确:' + question)
hits = vector_store.search(embed(hypo), top_k=10)
# 假设文档只用于检索,绝不进入最终上下文
context = [h.text for h in rerank(question, hits)][:5]

查询增强手段对比

手段额外调用适合场景
查询改写1 次口语化、含指代的问题
同义扩展0~1 次专名、缩写、术语不一致
多查询分解1 次多实体比较、链式推理
HyDE1 次问题与文档文体差异大
假设文档可能编造事实,它只是通往真实文档的“桥”,一旦被拼进最终上下文,模型会把它当成权威内容照抄。

易错点

  • 把假设文档原文拼进最终上下文,模型照抄编造内容,事实性风险直接暴露给用户
  • 在高频问答场景无条件启用,每次多一次生成延迟,收益抵不过体验损失
  • 未做对照评测就上线,实际召回不升反降(改写跑题)却难以察觉
  • 假设文档过长,向量被无关内容稀释,检索主题漂移
  • 与查询改写叠加使用导致两次生成调用,延迟翻倍而收益重叠

数据来源与参考

  • Gao et al., Precise Zero-Shot Dense Retrieval without Relevance Labels, arXiv:2212.10496
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌