一句话定义
查询改写(Query Rewriting)是把用户原话改写成更适合检索系统理解的查询;HyDE(Hypothetical Document Embeddings,假设文档嵌入)则更“绕”:先让大模型虚构一段可能的答案,再用这段假答案去检索真资料。
原理:像去图书馆找书
假设你对管理员说:“我那个新买的手机充不进电咋办?”如果直接拿这句话去搜,可能搜不到重点。查询改写会把它变成:“智能手机 无法充电 故障排查 保修政策”。这相当于把口语问题翻译成馆藏语言,关键词更明确,检索更容易命中。
HyDE 的思路不同。它先让模型写一段“假答案”,比如:“手机无法充电,常见原因包括充电线损坏、接口灰尘、充电器功率不匹配、电池保护机制……建议先更换充电线,再检查接口。”然后拿这段假答案去做向量(embedding)检索,找真实文档中与它相似的段落。为什么这样有效?因为“答案”和“答案”的写法、用词、结构往往更接近;用户问题很短,真实文档很长,两者直接比向量可能不如“假答案 vs 真文档”匹配得好。
和相邻概念的区别
| 概念 | 做什么 | 例子 |
|---|---|---|
| 查询改写 | 改查询文本,让它更好检索 | “报销怎么弄”改成“差旅费 报销流程 发票 标准” |
| 查询扩展 | 加同义词、近义词、相关词 | “报销”扩展出“报账、费用核销” |
| 多查询 | 生成多个查询变体,分别召回再合并 | 同时搜“报销流程”“差旅报销”“发票要求” |
| HyDE | 不改查询本身,先生成假设答案再检索 | 先写一段“报销通常需要……”再去搜真文档 |
| 重排(Rerank) | 对已召回结果重新排序 | 不改变查询,只调整结果顺序 |
可以把查询改写理解为“换一把更合适的钥匙”,HyDE 则是“先画一张可能的钥匙图,再按图找钥匙”。两者可以叠加:先改写,再 HyDE,再合并召回、重排。
对从业者和普通人的实际意义
在 RAG(Retrieval-Augmented Generation,检索增强生成)系统里,查询改写和 HyDE 主要解决“用户问得短、口语、模糊,知识库写得长、专业、正式”之间的鸿沟。它们能提升召回率,尤其适合客服机器人、企业知识库、电商搜索和文档问答。
但 HyDE 有风险:假设答案可能编造。正确做法是把它当“检索跳板”,最终回答仍要基于真实召回文档,并配合引用、重排和置信度检查。同时,生成假设答案会增加延迟和成本,适合对召回质量要求高的场景。
普通人可以记住:搜索时把问题说具体,交代场景、对象和目标;产品侧则会用这些技术把你的一句大白话,变成更容易找到靠谱资料的查询。具体实现方式和参数,以所用模型或框架的官方页面为准。
