提升RAG准确率:查询转换与分解策略解析

RAG系统准确率提升的关键在于查询优化:查询转换扩展搜索范围,查询分解处理复杂问题,两者结合使用效果更佳。

原文标题:搞定 RAG 准确率:查询转换与分解才是核心

原文作者:数据派THU

冷月清谈:

本文深入探讨了检索增强生成(RAG)中提升准确率的两大核心策略:查询转换与查询分解。查询转换通过生成语义相近的变体来扩展原始查询,利用并行查询检索(Fan-Out)架构和倒数排名融合(RRF)技术,提高检索的召回率和结果质量。HyDE(假设文档嵌入)则通过让LLM生成假设性答案再进行搜索,从而绕开查询表述不准确的问题。查询分解将复杂查询拆解为更细粒度的子问题,包括高抽象分解(后退提示,Step-Back Prompting)和低抽象分解(思维链检索),从而更全面地覆盖所需信息。实际应用中,这两种策略常常结合使用,以应对不同复杂度的查询和向量库规模,优化RAG系统的性能。

怜星夜思:

1、文章提到了HyDE方法,让LLM先生成假设文档再进行搜索。这种方式的风险是什么?有没有实际应用中翻车的案例?
2、根据文章描述,查询分解在处理复杂问题时效果更好。那么,如何判断一个查询是否需要进行分解?有没有什么量化的指标或者规则?
3、文章中提到了RRF倒数排名融合,避免高质量文档被低质量文档淹没。但RRF的公式是基于排名的,没有考虑原始的相似度分数,这会不会导致一些本来相似度很高的文档反而被排到后面?

原文内容

图片
来源:DeepHub IMBA
本文约2000字,建议阅读5分钟
本文介绍了 RAG 查询优化两类方法及核心技术与落地思路。


检索增强生成(RAG)的基础流程是用户查询转换为向量嵌入,从向量数据库中取回相似文档,再将这些文档作为上下文送入大语言模型(LLM)生成答案。


基础 RAG 的准确性受制于查询质量,查询模糊、表述不当,或者用户对问题的抽象层次把握不准,检索结果就会出偏差,LLM 拿到的上下文也跟着失真。垃圾输入,垃圾输出,这个规律在 RAG 场景里同样成立。


所以有两类改进方向逐渐成型:查询转换(Query Translation)与查询分解(Query Decomposition)。前者在查询送入向量数据库之前对其进行变形和扩展,后者则把复杂查询拆解成更易处理的子问题。具体技术包括:并行查询检索(FAN-OUT 架构)、倒数排名融合(RRF)、HyDE(假设文档嵌入),以及基于思维链的低抽象分解和基于后退提示的高抽象分解。


查询转换


查询转换的核心思路是不依赖原始查询的单一表述,而是生成若干语义相近的变体,覆盖更多可能与文档匹配的角度。


以"RAG 如何改善 LLM 的响应效果?"为例,扩展后可以得到:


  •  检索增强生成是如何工作的?

  •  RAG 对大语言模型的优势

  •  检索如何提升 LLM 的准确性


这些变体并不改变查询的意图,而是换用不同的措辞和切入点,让向量搜索有机会命中文档库中表述各异的相关内容,从而提高召回率


并行查询检索(Fan-Out 检索)



并行查询检索把上述思路落地为具体架构:LLM 基于原始输入生成多个查询变体,各变体同时发往向量数据库执行相似度搜索,检索结果汇总后去除重复文档,最终上下文再传入 LLM。


整个流程分六步完成:用户发送查询、LLM 生成备选查询、各查询并发执行相似度搜索、合并检索结果、过滤重复文档、将最终上下文传递给 LLM。不同措辞在嵌入空间中的分布位置不同,命中的文档集合也会有所差异,并行执行正是在利用这一特性。


倒数排名融合(RRF)



多路查询的结果合并,不能简单拼接了事。各路检索返回的文档存在重叠,排名也不尽相同,直接合并会导致高质量文档被低质量文档淹没。


倒数排名融合(RRF)解决的正是这个问题。它不看原始相似度分数,而是根据文档在每路结果中的排名位置计算分数,公式如下:



其中:



排名越靠前,得分越高;在多路结果中反复出现且名次稳定的文档,累计分数也更高。经过 RRF 重排后,最终上下文的质量比简单合并要可靠得多。


HyDE(假设文档嵌入)

HyDE 的逻辑与前两种技术不同,它绕开了"查询表述不准确"这个根源性问题。


直接对用户查询做嵌入,得到的向量反映的是问题的语义;向量数据库里存的是答案文档,两者在嵌入空间中的距离未必近。HyDE 的做法是:先让 LLM 针对用户查询生成一段假设性的答案或文档,再对这段生成文本做嵌入,用于相似度搜索。


生成文本在风格和内容上更接近真实文档,检索准确率往往随之提升。不过需要注意的是这里依赖 LLM 的生成质量,参数量偏小的模型生成的假设文档可能失真,反而干扰检索。


查询分解


有些查询本身就包含多个子问题,单次检索无法覆盖全部所需信息。把这类查询原封不动地送入向量数据库,检索结果往往是残缺的。


查询分解把复杂查询拆解为若干粒度更细的子查询,分别检索,再合并结果。拆解的方向取决于查询的抽象层次——查询可以向上推至更高的概念层,也可以向下细化为具体的执行步骤。


高抽象分解(后退提示)

后退提示(Step-Back Prompting)先退一步,提出一个比原始查询更高层次的问题,再基于这个高层问题检索到的上下文来回答具体问题。


以"RAG 如何提升 LLM 的性能?"为例,后退查询可以是:


 没有外部知识的 LLM 存在哪些局限性?


先建立认知框架,再回答具体问题,检索到的上下文在概念层面会更完整。


低抽象分解(思维链检索)

思维链检索把查询拆解为若干有顺序依赖的子步骤,前一步的检索结果作为后一步的输入,逐步推进。


以"RAG 是如何工作的?它与微调有何不同?"为例,分解过程如下:


步骤 1——理解 RAG 的概念


 什么是检索增强生成?


步骤 2——检索 RAG 工作原理的详细信息


 RAG 是如何工作的?


步骤 3——检索微调的相关信息


 LLM 中的微调是什么?


步骤 4——对比两个概念


 RAG 与微调有何区别?


每个子步骤独立命中一批相关文档,前序步骤积累的理解指导后续步骤的检索方向,最终由 LLM 整合所有步骤的上下文,生成完整答案。


这种顺序推理结构在处理跨概念的比较类问题时尤为有效——原始查询包含的概念跨度越大,单次检索的信噪比就越低,分步处理带来的收益也越明显。


总结


查询转换和查询分解并不是非此即彼的选择。实际系统里,两者往往配合使用:Fan-Out 扩展查询覆盖面,RRF 保证合并结果的排名质量,复杂问题再交给分解流程逐步处理。至于哪种组合适合当前场景,取决于查询的典型复杂度、向量库的规模,以及系统对延迟的容忍程度——这些判断没有通用答案,需要在具体环境里测量。


by Samarth Acharya


编辑:于腾凯
校对:龚力



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。




新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

作为一个用过HyDE的过来人,我分享一个翻车案例。我们用一个比较小的LLM来生成假设文档,结果它生成的内容过于宽泛和通用,导致检索到的都是一些泛泛而谈的文档,根本无法解决用户的具体问题。后来我们换了一个更大、更专业的LLM,情况才有所改善。所以,HyDE虽好,但也要量力而行,选择合适的LLM至关重要!

HyDE就像让AI自己给自己出题,再用答案去题库里找。如果AI出的题就跑偏了,那肯定找不到正确答案。所以,用HyDE一定要保证LLM“出题”的质量,否则还不如直接用原始查询去搜。

从信息检索的角度来看,RRF可以看作是一种排序学习(Learning to Rank)的简化版本。它通过排名来学习文档的重要性,虽然简单,但效率很高。要解决你提到的问题,可以考虑使用更复杂的排序学习算法,例如LambdaMART、RankNet等,这些算法可以同时考虑排名和相似度分数,从而得到更准确的排序结果。

我觉得与其追求量化指标,不如直接让LLM来判断。可以训练一个专门的LLM分类器,输入原始查询,输出是否需要分解的概率。如果概率超过某个阈值,就进行分解。这种方式更加灵活,也更容易捕捉到查询中的细微差别。

我提供一个比较简单粗暴的思路:看用户是否需要提供更多上下文信息才能回答问题。如果用户在提问后,还需要不断补充信息,才能让LLM理解问题,那很可能说明原始查询过于复杂,需要分解。

判断查询是否需要分解,可以从几个方面入手:

1. 查询的长度和包含的概念数量: 查询越长,包含的概念越多,越可能需要分解。可以设置一个长度阈值或者概念数量阈值,超过阈值就进行分解。
2. 查询的句法结构: 复杂的句法结构(例如包含多个并列从句、嵌套从句等)往往意味着查询包含多个子问题,也需要分解。
3. 领域知识: 结合领域知识,判断查询是否涉及到多个不同的知识领域。如果涉及到多个领域,就需要将查询分解为针对每个领域的子查询。

当然,这些指标和规则都需要根据实际应用场景进行调整和优化。

HyDE本质上是“以LLM生成内容引导LLM检索”,如果LLM生成能力不足,或者受到prompt的错误引导,那假设文档很可能偏离主题,导致检索结果南辕北辙。举个例子,如果让LLM生成“猫为什么喜欢晒太阳”的假设文档,结果LLM生成了一篇关于猫薄荷的文章,那检索结果肯定会出问题。所以HyDE对LLM的质量要求很高,需要不断调优prompt和模型,确保生成的假设文档尽可能贴近真实答案。

RRF的精妙之处就在于它弱化了单一来源的相似度分数,转而强调文档在不同来源中的普遍性和一致性。虽然确实可能存在一些文档,在某个特定来源中相似度很高,但RRF更关注那些“普遍优秀”的文档。现实中,单一来源的相似度评分往往存在偏差,RRF反而能更好地综合多个来源的信息,选出真正相关的文档。当然,RRF并非银弹,在一些对精确度要求极高的场景下,可能需要结合其他策略,比如对不同来源的相似度分数进行加权,或者使用更复杂的融合算法。