假设文档检索(HyDE)
HyDE 的思路是让模型先针对问题写一段「假设能回答这个问题的文档」,再用这段文字的向量去检索真实文档,最后只依据真实检索结果作答。它的作用在于弥合短查询与长文档之间的语义鸿沟:问题只有几个词,向量稀疏;一段假设文档的措辞、句式与真实资料更接近,检索命中率更高。
基本信息
| 原理 | 假设文档与真实文档在语义空间更接近 |
|---|---|
| 两步 | 问题 → 假设文档 → 检索 → 作答 |
| 边界 | 假设文档仅用于检索,不能作为答案来源 |
| 不适用 | 精确匹配类查询(订单号、错误码) |
典型使用场景
- 短问题检索长文档:用户只问一句,资料是几页说明
- 跨领域术语对齐:用户用口语,资料用专业表述
- 零样本检索:没有标注数据时提升召回
- 多轮问答中的追问:追问往往很短,需要先扩展语义
- 与查询改写互补:改写改文本,HyDE 造向量
两步结构
两步结构
第 1 步(问题 → 假设文档)
针对问题写一段 100-150 字的答案草稿,
只求语义接近,不要求事实正确。
语气与句式尽量贴近目标资料库的写作风格。
第 2 步(检索 → 作答)
用这段草稿的向量检索真实文档,
再「仅依据检索结果与引用」回答原问题;
检索结果不足时说明无法回答。
# 关键纪律:假设文档只进检索环节,绝不进答案环节两步的职责与风险
| 环节 | 职责 | 风险 |
|---|---|---|
| 假设文档 | 生成一段语义接近的草稿用于检索 | 被误当作答案来源,输出编造内容 |
| 检索 | 用草稿向量召回真实文档 | 语料风格差异大时收益变小 |
| 作答 | 仅依据检索结果与引用回答 | 不声明依据来源时无法核对 |
| 适用判断 | 短查询、语义鸿沟大的场景 | 精确匹配类查询收益为负 |
HyDE 与查询改写解决的是不同问题:改写是换一套更好的查询文本,HyDE 是造一个新的向量。两者可以叠加,但叠加上线时要分开评估各自贡献,否则说不清收益来自哪一步。
带编号、错误码、人名这类精确匹配的查询,HyDE 会让检索偏向语义相近但实体不同的文档,效果往往不如直接检索。按查询类型分流使用更稳。