外观
传统 RAG 与 HyDE 的对比
Traditional RAG vs HyDE
传统 RAG 系统还有一个关键问题:问题在语义上往往和它的答案并不相似。

结果就是,在检索阶段,会有一些无关的上下文被检索出来——因为它们与查询的余弦相似度,反而比真正包含答案的文档还要高。
HyDE 解决的正是这个问题。
下图展示了传统 RAG 和 HyDE 之间的区别。

我们来更深入地了解一下。
如前所述,问题在语义上和答案并不相似,这会导致检索过程中出现不少无关的上下文。

HyDE 是这样处理这个问题的:
用 LLM 针对查询 Q 生成一个假设性答案 H(这个答案不需要完全正确)。
用一个 contriever 模型对这个答案做嵌入,得到 E(这里常用双编码器 bi-encoder)。
用嵌入 E 去查询向量数据库,取回相关上下文 C。
把假设性答案 H + 检索到的上下文 C + 查询 Q 一起交给 LLM,生成最终答案。
完成!

当然,生成的这个假设性答案很可能包含一些幻觉细节。
但由于 contriever 模型(负责做嵌入的模型)的存在,这并不会严重影响效果。
更具体地说,这个模型是用对比学习(contrastive learning)训练出来的,同时它还起到近乎无损压缩器的作用,负责过滤掉这份「假文档」中的幻觉细节。
这样产生的向量嵌入,预期会比「问题本身与真实文档的相似度」更接近真实文档的嵌入:

多项研究表明,相比传统嵌入模型,HyDE 能提升检索效果。
但这是有代价的:延迟会增加,LLM 的调用量也会更多。