从扩展、分解、消歧和抽象四个关键方面应用查询优化(Query Optimization)技术提升 RAG(检索增强生成) 系统中 LLM 的效率和准确性。
查询扩展
查询扩展(Query Expansion)在 RAG 的性能中起着关键作用,尤其是在与 LLM 集成时。
查询扩展技术通过增强查询的上下文信息(无论是基于内部资源还是外部资源),来提升信息检索的准确性和生成结果的质量。
查询扩展技术可以分为两大类:
内部扩展(Internal Expansion):侧重于利用查询本身或 LLM 中已有的信息来提高检索和响应质量。使用方法包括 GenRead、Query2Doc 和 HyDE 等。
外部扩展(External Expansion):通过整合外部来源(如知识库或网页)的补充数据,增强查询内容,提供更多上下文和更高的准确性。使用方法包括 LameR 和 CSQE 等。
这两种方法都能够提高检索增强生成任务的效果,提升检索过程的质量,并生成更准确、相关的回答。
问题分解
对于复杂查询,直接用原始查询进行检索往往无法获取充分的信息。将复杂查询分解(Query Decomposition)成更简单的子查询,然后分别检索相关信息,最终综合各子查询的答案,能够更好地解答原始问题。
主要的分解方法
DSP 框架:通过管道化的方式将问题分解为简单的步骤,并在每一步进行推理和检索,逐步得出最终答案。
Least-to-Most & Plan-and-Solve:这两种方法都通过将复杂问题拆解成一系列简单的子问题,按顺序逐个解决。前者通过少量示例来分解,后者则先制定一个计划,将任务划分为子任务。
SELF-ASK:专注于查询中的“组合性差距”,即处理模型在整合多个子查询答案时可能出现的问题,通过正确回答子查询来提高复杂查询的正确性。
ReAct:通过推理和执行的结合,让模型在多轮交互中逐步调整和完善推理过程。
增强的分解方法
HiRAG:将查询拆解为多步查询,利用外部知识和推理链(Chain-of-Thought)结合,逐步解答每个子查询,并最终合成完整答案。
RichRAG & ConTReGen:采用多层次的查询探索方法,分析查询的不同方面,利用多方面的检索和树状结构,提供更全面、更深度的回答。
其他补充方法
EAR:通过生成多种不同的查询并重新排序,选择最优的查询路径。
CoK:通过多个候选答案和调整基础知识的步骤,逐步修正推理过程。
消除歧义
查询消除歧义(Query Disambiguation)主要用于解决多义或模糊查询的问题,目的是帮助语言模型(LLM)准确识别用户意图并生成更精确的搜索查询。对于模糊查询,仅依赖原始查询进行信息检索往往无法得到有效的结果。主要的消歧义方法有两种:
针对单一模糊查询,
针对多轮对话中的查询消歧义。
基本消歧方法
推理验证:通过自然语言的演绎推理格式,将推理过程分解为一系列的子过程,每个子过程只接收必要的上下文和前提信息,从而生成精确的推理步骤。这种方法帮助LLM按步骤进行自我验证,提高推理的严谨性和可信度。
EchoPrompt:通过查询重述任务(如“让我们重复查询并逐步思考”)鼓励 LLM 重新表述查询,这有助于确保理解一致性,避免歧义。模型通过重述查询进行推理,从而提高消歧义的效果。
ToC:通过递归地构建查询消歧义树,利用少量示例提示和外部知识,检索相关事实,生成更准确、更详细的长篇回答。这种方法有助于通过层次化的方式消解模糊查询。
InfoCQR:提出“重写-编辑”框架,LLM先重写原始查询,再对重写后的查询进行编辑,消除其中的歧义。通过精心设计的提示,引导LLM进行重写和编辑,生成更明确且富有信息的查询。
高级消歧方法
AdaQR:提出了一种基于偏好的优化方法,利用对话中的回答来模拟检索器的偏好,从而优化查询重写过程。重写器会生成多个重写查询,再通过目标检索器进行检索,计算每个重写查询的条件概率,并基于这些概率优化重写器。
MaFeRw:通过结合检索到的文档和生成的回答的多方面反馈,优化查询重写策略。这种方法通过综合反馈提高查询重写的效果,从而增强RAG(检索增强生成)的表现。
CHIQ:利用 LLM 的 NLP 能力,如解决指代关系和扩展上下文,减少对话历史中的歧义,从而提高生成搜索查询的相关性。此方法通过改进对话历史,增强查询消歧义。
查询抽象
对于复杂的多跳查询,逐步分解可能无法得到准确的答案,反而可能使问题更加复杂。因此,借鉴人类的思维方式,进行查询抽象(Query Abstraction),提取出高层次的原则来解决复杂问题,有助于减少中间推理步骤中的错误。
基础的抽象方法
Step-Back:通过精心设计的提示引导 LLM 的推理过程,使输出更贴近原始查询的核心思想,特别是对于需要复杂推理的任务。这种方法可以帮助模型在复杂问题中站得更高,避免陷入细节。
概念推理:要求 LLM 进行抽象查询的概念推理,在一个可验证的符号空间内生成解决方案。这样,模型能更好地处理抽象概念,进行高层次的推理。
CoA:将常规的 Chain-of-Thought(CoT)推理抽象为一个具有抽象变量的推理链。通过这种方式,LLM 可以利用领域专用工具(如计算器的计算结果或通过网页搜索引擎检索的相关文章)来解答问题。
更高层次的抽象方法
AoT:采用一个抽象的框架来结构化整个推理过程。不同于没有约束的 CoT,AoT 明确地在推理过程中引入不同层次的抽象,逐层提炼细节,每个更高层次的抽象包含更少的具体细节,明确说明每一步推理的目标和功能。
Baek:生成更高层次的抽象信息,为原始查询提供背景支持,丰富了查询对象的直接信息,使得查询本身更具全面性。
面向多方面查询的抽象
MA-RIR:定义查询方面为多方面查询中的子范围,表示查询内的不同主题或方面。这种方法有助于在复杂查询的不同方面之间进行更加聚焦和有效的推理。
Meta-Reasoning:通过将每个查询中的实体和操作的语义分解为通用符号表示,寻求提高推理效率和准确性。这种方法让 LLM 在多种语义复杂场景中学习到更通用的推理模式。
结合逻辑推理和知识图谱的抽象
RuleRAG:观察到广泛的逻辑规则可以指导任务完成,提出一种新方法,通过这些规则的逻辑方向检索支持查询的文档,从而基于检索到的信息和可归因的规则生成最终回答。
SimGRAG:通过两阶段过程有效地将查询文本与知识图谱(KG)结构对齐。第一阶段是将查询转化为目标图模式,第二阶段通过图语义距离(GSD)量化这些模式与候选子图之间的对齐程度。
文章来源:PyTorch研习社