在使用向量检索时,一个常见的挑战是问题与文档片段之间的语义鸿沟。用户提问往往简短、口语化,例如“怎么退换货?”而知识库中的文档片段却是正式、陈述性的说明,如“退换货政策:客户可在签收后7日内申请无理由退货。”这种表述方式的不匹配,会让单纯基于问题的向量检索效果打折扣。
假设文档嵌入(Hypothetical Document Embeddings,简称 HyDE) 就是专门解决这一问题的技术。它的思路非常直接:不要直接用问题去检索文档,而是先让大语言模型生成一个“假设性的理想答案”,再用这个生成的答案去检索知识库。
1. 为什么直接问问题不够好
向量检索的相似度计算,比较的是问题嵌入向量与文档片段的嵌入向量在语义空间中的距离。然而:
- 问题是问句形式,文档是陈述句形式,两者在向量空间中可能相距较远。
- 用户提问可能缺少专业术语。例如,用户问“笔记本连不上投影仪怎么办?”而知识库文档中写的是“外部显示设备输出故障排除步骤”。语义上显然是相关的,但直接用问句检索,匹配度可能不高。
HyDE 的做法相当于在检索前,先对问题进行“翻译”或“扩展”——把它变成一个更像真实文档片段的陈述性段落,从而拉近检索输入与文档之间的语义距离。
2. HyDE 的工作流程
整个过程可分三步,简单且高效:
- 生成假设文档
将用户的原始问题送入大语言模型,并给出一条类似这样的指令:“请根据问题,写出一段详细、专业的回答或文档说明,就像它可能出现在技术手册里一样。”
用户问:“怎么退换货?”
模型可能生成:“退换货流程通常包括:在签收后7天内通过订单页面提交退换申请,上传商品照片,审核通过后会生成退货地址,顾客寄回商品并录入运单号,仓库验收后3个工作日内退款。”
- 将假设答案向量化
用与索引知识库相同的嵌入模型,将这段生成的文本转换为向量。
- 检索真实文档
用这个假设文档的向量,在知识库中搜索最相关的真实文档片段。由于假设文档已经是陈述性的长文本,其向量表示更接近知识库中文档片段的模式,检索召回率通常会显著提高。
3. 实际效果与适用场景
在实践中,HyDE 对于以下情况尤其有效:
- 用户提问极短,如“退货时效”“打印机报错 E05”;
- 知识库文档专业性强,术语密集;
- 直接问题检索效果不佳,需要弥补语义差距。
但需要注意的是,HyDE 的效果高度依赖假设文档的质量。如果模型生成的假设答案本身跑偏或包含错误信息,就可能把检索带到错误的方向。但这种错误通常影响有限,因为仍然是用假设文档的向量去匹配真实文档,最终返回的还是知识库中的原文,不会直接用假设答案作为最终回复。换句话说,HyDE 只是为检索提供更好的“查询表达”,并不改变回答的真实来源。
4. 一个真实的例子
某医疗设备公司维护着一份《常见故障代码手册》,手册中关于 E05 故障的描述是:“E05:温度传感器异常。请检查连接线缆并重启设备,若故障依旧需更换传感器模块。”
- 客服系统收到用户提问:“屏幕显示 E05 什么意思?”
- 直接用问题进行检索,可能因为问句长度短、缺乏关键词,召回的片段匹配度不高。
- 启用 HyDE,先让模型生成假设答案:“E05 故障代码通常表示设备温度传感器出现异常,可能由传感器线缆松动或传感器模块损坏引起,建议检查连接并重启,必要时更换传感器。”
- 用这段假设答案去检索,就能精准命中手册中的相关原文,最终给用户的回答也更准确。
这个过程中,最终呈现给用户的仍然是基于手册原文生成的答复,假设答案只是幕后帮手。
5. 实施建议
- 生成假设文档的提示词要具体:明确要求生成“类似技术文档、手册条目或详细步骤说明”的文本,以最大程度模拟知识库的风格。
- 控制成本:HyDE 增加了一次大模型调用(生成假设答案),会带来额外延迟和费用。建议仅在简单问题检索效果差的场景中启用,或与直接检索结果进行融合和对比。
- 可结合缓存:对频繁出现的同类问题,可以缓存其假设文档,避免重复生成。
HyDE 以一种巧妙而低成本的方式,纯用文本层面的转换来提升检索相关度,无需调整嵌入模型或索引结构,是 RAG 系统中常见且实用的检索增强技术。