检索增强生成(RAG)系统去年挺火的,主要是因为它能高效地检索信息并生成内容。不过,要想让它的表现更上一层楼,查询优化技术就显得尤为重要了,尤其是在使用大型语言模型(LLM)的时候。我们可以通过扩展、分解、消歧和抽象这些方法来优化查询,这样一来,RAG系统里的LLM就能更高效、更准确地工作了。
1. 查询扩展这些技术通过优化用户的初始查询,让生成的内容更加准确和可靠,解决了像语义模糊、复杂需求以及查询和目标文档之间相关性差异这些问题。所以,RAG系统在处理那些需要大量知识的任务时,表现得特别出色。
查询扩展技术能够提升信息检索和生成内容的准确性和相关性。
内部扩展——这种方法利用系统内部已有的数据(比如来自LLM或查询本身的信息)来增强查询的效果。
A) GenRead —— 通过生成相关的文档片段来补充查询内容。它利用系统内部的信息来优化查询,从而提高检索和生成响应的质量。
举个例子,系统接收到用户查询“气候变化的影响”。然后,它会生成包含“全球变暖”、“极端天气”等相关术语的上下文文档。这样一来,查询就被丰富了,检索到的结果也会更加准确。
B) Query2Doc —— 使用小样本提示来生成伪文档,为查询提供额外的背景信息。
比如,用户查询“如何烤蛋糕”。LLM会生成包含“面粉”、“鸡蛋”等关键词的伪文档。然后,系统会使用这个新的查询来检索更具体、更相关的上下文。
C) HyDE(假设文档嵌入) —— 这种方法将查询与假设文档的嵌入信息结合起来,从而提升检索和响应的准确性。
系统会先创建一个假设答案,比如“做蛋糕需要准备面粉、鸡蛋和糖。”然后,根据这个答案进行相似性搜索,找到相关文档。最后,使用这个优化后的查询来获得更精确的结果。
外部扩展——这种方法需要借助外部数据源(比如知识库和网页)来为查询添加上下文,从而提高查询处理的准确性。
A)LameR(基于潜在答案的查询扩展) —— 它利用来自特定领域参考的外部候选答案来优化查询。
比如,系统会收集像“机器学习在医疗保健中的应用”这样的查询的候选答案。然后,用这些答案来扩展查询。这样一来,查询内容更丰富,检索效果也会更好。
B) CSQE(语料库源查询扩展) —— CSQE从语料库中识别并提取关键句子,用来增强查询的相关性。
系统会根据查询先检索出一些初始文档,然后从中找出相关句子,用来创建一个更详细的查询。最后,使用这个扩展后的查询来改进检索结果。
C) FLARE(未来语言和检索增强) —— 这种方法会预测查询过程中的下一步,并迭代检索相关信息,从而优化查询以获得更好的结果。
比如,系统会预测用户接下来可能会问“准备蛋糕原料的步骤是什么?”。然后,根据这个预测进行检索。如果预测不够准确,系统会进一步细化查询并检索其他文档。
D)MUGI(多参考引导查询扩展) —— 这种方法使用多个外部引用来增强用户查询的广度和深度。
举个例子,用户查询“气候变化对北极熊有何影响?”。系统会从生态研究、气候报告和保护论文中收集相关信息,探索气候变化对北极熊的影响。它会总结出像栖息地丧失、冰盖融化和种群下降等重要主题,并将它们整合成一个更全面的查询:“气候变化导致的冰盖融化和栖息地丧失如何影响北极熊种群?”
2. 查询分解查询分解技术主要用于处理RAG系统中的复杂用户查询。为了提高最终响应的质量,模型可以将复杂的查询拆解成更简单的子查询,从而更精准地收集信息。
A) DSP框架(分解、搜索、解析) —— 这种方法把复杂的查询拆解成更小、更容易处理的步骤,并通过管道式的方法逐步解决。
B) 从少到多和计划并解决 —— 这些方法通过将复杂查询按顺序分解成可管理的子查询,来简化处理过程。
“从少到多”从少量例子开始,而“计划并解决”则是先制定计划,再按顺序执行子任务。
C)自我询问 —— 这种方法解决了子查询之间的“组合差距”,通过整合它们的答案来提高整体响应的准确性。
D) ReAct —— 它将多轮交互中的推理和执行结合起来,根据前一步的反馈调整推理过程。对于需要多轮推理的查询特别有效。
E) HiRAG(分层RAG) —— 这种方法采用分层策略,将查询分解为多个子查询,并利用外部知识和推理链来解决每个步骤。它特别适合处理复杂的多维查询。
F) RichRAG和ConTReGen —— 这些技术采用多层次的方法来探索查询。它们从不同角度分析查询,并将结果组织成树状结构,从而生成全面而详细的答复。
G) EAR(集成增强检索) —— 这种方法集成多种查询变体,并对它们进行排序,以确定最适合信息检索的变体。它使用集成学习策略,通过不同的查询(通常基于同一个基本查询)来探索更广泛的搜索区域。通过对结果重新排序,EAR提高了检索系统的整体有效性,尤其是在查询不够清晰或系统需要确定最符合用户意图的方式时。
H) COK(知识组合) —— 这种方法将来自不同来源或领域的信息融合在一起,以解决复杂问题。它涉及将专业知识库(比如特定数据库)与从一般搜索中获得的内容进行整合。通过利用不同的专业领域,COK可以提高生成响应的准确性和深度。
查询消歧是个挺重要的技术,特别是在处理那些意思模糊或者有多重含义的查询时。它能帮助大型语言模型(LLM)更准确地理解用户的真实意图,从而生成更相关的搜索结果。如果只是简单地依赖原始查询,可能会得到不太满意的结果,尤其是当查询本身就不太清晰的时候。查询消歧的方法可以大致分为基本方法和高级方法两种。
A) 推理验证这种方法就像是把一个大问题拆分成几个小问题,然后逐一检查每个小问题的准确性。这样,LLM就能自我评估,提高推理的准确性。
B) EchoPrompt这个方法就像是让语言模型重新组织语言,把查询说得更清楚,确保大家理解一致。
C) 上下文树 (ToC)这个方法就像是建一棵树,从查询出发,一步步解决歧义,找到最精确的解释。
D) 信息上下文查询重写(InfoCQR)这个方法帮助LLM重写和编辑查询,让查询更清晰。
E) 自适应查询重写(AdaQR)这个方法根据之前的响应来调整查询重写,通过计算各种查询重写的条件概率来优化结果。
F) 查询重写的多方面反馈(MaFeRw)这个方法结合了检索到的文档和生成的答案的反馈,来优化查询重写。
这个方法通过抓住核心原理来简化推理过程,提升效率,就像我们人类思考问题一样。
A) 退一步看问题——这种方法让大语言模型(LLM)从更高的角度去思考,抓住核心原则,而不是纠结于复杂的细节。
B) 概念推理——这种方法把问题提升到更高的概念层次,让 LLM 能用更结构化和抽象的方式处理复杂问题。
C) 抽象链(CoA)——这个方法把传统的思路链(CoT)推理提升到更高的抽象层次,让模型能用特定工具(比如计算器或搜索引擎)得到更准确的答案。
D) 思维抽象(AoT)——这个方法把推理过程分成多个层次,每一步都逐步增加细节。
E) BaeK——这个方法通过生成高级抽象信息来增强初始问题,提供更多背景支持。它让问题更全面,适合需要背景知识的复杂问题。
G) 多方面检索和推理细化 (MA-RIR) ——这个方法识别问题的各个方面,把它们拆分成子领域,方便有针对性的检索和推理。对于涉及多个主题的问题特别有效。
H) RuleRAG——这个方法用逻辑规则来增强文档检索,结合逻辑推理和知识图谱的优势,提高准确性和推理能力。
I) SimGRAG ——这个方法通过两步把查询文本和知识图谱结构对齐。首先,把查询转换成图形模式。然后,用图语义距离 (GSD) 来衡量与候选子图的对齐程度,提高检索准确性。
检索增强生成(RAG)系统的厉害之处在于,它巧妙地把高效的信息检索和对上下文敏感的生成能力结合在了一起。通过扩展、分解、消歧和抽象这些查询优化技巧,我们可以对查询进行微调,让它更贴合用户的需求,消除歧义,还能精准处理那些复杂或知识密集型的任务。
无论是用上下文信息来丰富查询,还是把复杂问题拆解成小块,或者通过抽象来获得更广泛的见解,这些方法都能显著提升RAG系统中大语言模型(LLM)的表现和灵活性。有了这些创新,RAG系统能够提供更精准、更相关、更有深度的结果,从而推动信息驱动型应用向前迈进一大步。
论文标题:A Survey of Query Optimization in Large Language Models 论文链接:https://arxiv.org/pdf/2412.17558



原文作者:ChallengeHub;如有侵权,请联系管理员删除。