问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

掌握RAG查询优化技巧,让你的检索与生成效率翻倍(附教程)

创作时间:
作者:
@小白创作中心

掌握RAG查询优化技巧,让你的检索与生成效率翻倍(附教程)

引用
CSDN
1.
https://m.blog.csdn.net/y525698136/article/details/145263323

RAG(检索增强生成)系统通过结合高效的信息检索和上下文敏感的生成能力,能够提供更精准、相关和深入的结果。掌握查询优化技巧是提升RAG系统性能的关键,本文将详细介绍查询扩展、查询分解、查询消歧和查询抽象等核心技术,帮助读者更好地理解和应用这些方法。

查询优化简介

检索增强生成(RAG)系统去年挺火的,主要是因为它能高效地检索信息并生成内容。不过,要想让它的表现更上一层楼,查询优化技术就显得尤为重要了,尤其是在使用大型语言模型(LLM)的时候。我们可以通过扩展、分解、消歧和抽象这些方法来优化查询,这样一来,RAG系统里的LLM就能更高效、更准确地工作了。这些技术通过优化用户的初始查询,让生成的内容更加准确和可靠,解决了像语义模糊、复杂需求以及查询和目标文档之间相关性差异这些问题。所以,RAG系统在处理那些需要大量知识的任务时,表现得特别出色。

1. 查询扩展

查询扩展技术能够提升信息检索和生成内容的准确性和相关性。

内部扩展

这种方法利用系统内部已有的数据(比如来自LLM或查询本身的信息)来增强查询的效果。

  • GenRead

通过生成相关的文档片段来补充查询内容。它利用系统内部的信息来优化查询,从而提高检索和生成响应的质量。举个例子,系统接收到用户查询“气候变化的影响”。然后,它会生成包含“全球变暖”、“极端天气”等相关术语的上下文文档。这样一来,查询就被丰富了,检索到的结果也会更加准确。

  • Query2Doc

使用小样本提示来生成伪文档,为查询提供额外的背景信息。比如,用户查询“如何烤蛋糕”。LLM会生成包含“面粉”、“鸡蛋”等关键词的伪文档。然后,系统会使用这个新的查询来检索更具体、更相关的上下文。

  • HyDE(假设文档嵌入)

这种方法将查询与假设文档的嵌入信息结合起来,从而提升检索和响应的准确性。系统会先创建一个假设答案,比如“做蛋糕需要准备面粉、鸡蛋和糖。”然后,根据这个答案进行相似性搜索,找到相关文档。最后,使用这个优化后的查询来获得更精确的结果。

外部扩展

这种方法需要借助外部数据源(比如知识库和网页)来为查询添加上下文,从而提高查询处理的准确性。

  • LameR(基于潜在答案的查询扩展)

它利用来自特定领域参考的外部候选答案来优化查询。比如,系统会收集像“机器学习在医疗保健中的应用”这样的查询的候选答案。然后,用这些答案来扩展查询。这样一来,查询内容更丰富,检索效果也会更好。

  • CSQE(语料库源查询扩展)

CSQE从语料库中识别并提取关键句子,用来增强查询的相关性。系统会根据查询先检索出一些初始文档,然后从中找出相关句子,用来创建一个更详细的查询。最后,使用这个扩展后的查询来改进检索结果。

  • FLARE(未来语言和检索增强)

这种方法会预测查询过程中的下一步,并迭代检索相关信息,从而优化查询以获得更好的结果。比如,系统会预测用户接下来可能会问“准备蛋糕原料的步骤是什么?”。然后,根据这个预测进行检索。如果预测不够准确,系统会进一步细化查询并检索其他文档。

  • MUGI(多参考引导查询扩展)

这种方法使用多个外部引用来增强用户查询的广度和深度。举个例子,用户查询“气候变化对北极熊有何影响?”。系统会从生态研究、气候报告和保护论文中收集相关信息,探索气候变化对北极熊的影响。它会总结出像栖息地丧失、冰盖融化和种群下降等重要主题,并将它们整合成一个更全面的查询:“气候变化导致的冰盖融化和栖息地丧失如何影响北极熊种群?”

2. 查询分解

查询分解技术主要用于处理RAG系统中的复杂用户查询。为了提高最终响应的质量,模型可以将复杂的查询拆解成更简单的子查询,从而更精准地收集信息。

  • DSP框架(分解、搜索、解析)

这种方法把复杂的查询拆解成更小、更容易处理的步骤,并通过管道式的方法逐步解决。步骤如下:

  1. 把查询拆分成简单的子查询,比如“机器学习在医学诊断中的应用”。
  2. 为每个子查询检索相关信息。
  3. 通过推理将各个子查询的答案整合起来,形成最终的答案。
  • 从少到多和计划并解决

这些方法通过将复杂查询按顺序分解成可管理的子查询,来简化处理过程。“从少到多”从少量例子开始,而“计划并解决”则是先制定计划,再按顺序执行子任务。步骤如下:

  1. 使用其中一种方法分解查询。
  2. 按顺序检索并解决每个子查询。
  3. 将结果综合成最终的响应。
  • 自我询问

这种方法解决了子查询之间的“组合差距”,通过整合它们的答案来提高整体响应的准确性。步骤如下:

  1. 通过识别合并答案时可能遇到的难点来分解查询。
  2. 检索并响应每个子查询。
  3. 逐步整合答案,确保最终答案的正确性。
  • ReAct

它将多轮交互中的推理和执行结合起来,根据前一步的反馈调整推理过程。对于需要多轮推理的查询特别有效。步骤如下:

  1. 将查询拆分成子查询。
  2. 进行多轮交互,逐步完善答案。
  3. 将这些答案组合成最终输出。
  • HiRAG(分层RAG)

这种方法采用分层策略,将查询分解为多个子查询,并利用外部知识和推理链来解决每个步骤。它特别适合处理复杂的多维查询。步骤如下:

  1. 将查询分解为分层子查询。
  2. 整合与每个子查询相关的外部知识。
  3. 应用推理链得出每个子查询的答案。
  4. 将子查询的答案合并成一个完整的最终答复。
  • RichRAG和ConTReGen

这些技术采用多层次的方法来探索查询。它们从不同角度分析查询,并将结果组织成树状结构,从而生成全面而详细的答复。步骤如下:

  1. 将查询分解为多个方面。
  2. 收集各个方面的信息。
  3. 将结果结构化为树状格式。
  4. 将结果整合成最终的详细答案。
  • EAR(集成增强检索)

这种方法集成多种查询变体,并对它们进行排序,以确定最适合信息检索的变体。它使用集成学习策略,通过不同的查询(通常基于同一个基本查询)来探索更广泛的搜索区域。通过对结果重新排序,EAR提高了检索系统的整体有效性,尤其是在查询不够清晰或系统需要确定最符合用户意图的方式时。步骤如下:

  1. 用户输入初始查询,比如“机器学习在医疗保健中的应用”。
  2. 系统生成原始查询的多个版本,比如“医疗诊断中的机器学-习”、“医疗治疗中的机器学习”和“医疗预防中的机器学习”。
  3. 单独处理每个变体以收集相关结果。
  4. 使用多种模型对结果进行评估和排序,确保选择表现最佳的结果。
  5. 使用最准确、最相关的信息来生成最终答复。
  • COK(知识组合)

这种方法将来自不同来源或领域的信息融合在一起,以解决复杂问题。它涉及将专业知识库(比如特定数据库)与从一般搜索中获得的内容进行整合。通过利用不同的专业领域,COK可以提高生成响应的准确性和深度。步骤如下:

  1. 系统首先接收用户的原始查询,比如“深度学习在自然语言处理中的应用”。
  2. 分析上下文,考虑之前的查询、用户偏好或会话历史记录。
  3. 系统优化查询,以更好地满足用户的信息需求。比如,如果用 户之前查询过“文本分类中的应用”,系统可能会优化查询,更具体地关 注该主题。
  4. 使用优化后的查询来收集更多相关结果。
  5. 通过整合优化结果来生成最终响应。

3. 查询消歧

查询消歧是个挺重要的技术,特别是在处理那些意思模糊或者有多重含义的查询时。它能帮助大型语言模型(LLM)更准确地理解用户的真实意图,从而生成更相关的搜索结果。如果只是简单地依赖原始查询,可能会得到不太满意的结果,尤其是当查询本身就不太清晰的时候。查询消歧的方法可以大致分为基本方法和高级方法两种。

  • 推理验证

这种方法就像是把一个大问题拆分成几个小问题,然后逐一检查每个小问题的准确性。这样,LLM就能自我评估,提高推理的准确性。步骤如下:

  1. 先接收用户的初始查询。
  2. 把查询拆分成几个子查询。
  3. 对每个子查询进行单独的搜索。
  4. 利用外部知识来验证搜索结果。
  5. 根据验证的结果,给出最终的答复。
  • EchoPrompt

这个方法就像是让语言模型重新组织语言,把查询说得更清楚,确保大家理解一致。步骤如下:

  1. 接收用户的查询。
  2. 让模型重新表述查询,消除歧义。
  3. 根据重新表述的查询进行更精确的搜索。
  4. 根据完善的结果生成响应。
  • 上下文树 (ToC)

这个方法就像是建一棵树,从查询出发,一步步解决歧义,找到最精确的解释。步骤如下:

  1. 接收初始查询。
  2. 构建一棵消歧树。
  3. 浏览这棵树,澄清任何歧义。
  4. 根据最相关的解释进行搜索。
  5. 生成最终响应。
  • 信息上下文查询重写(InfoCQR)

这个方法帮助LLM重写和编辑查询,让查询更清晰。步骤如下:

  1. 接收初始查询。
  2. 重写查询。
  3. 编辑查询,加入更多细节。
  4. 进行更精准的搜索。
  5. 生成最终响应。
  • 自适应查询重写(AdaQR)

这个方法根据之前的响应来调整查询重写,通过计算各种查询重写的条件概率来优化结果。步骤如下:

  1. 接收初始查询。
  2. 生成多个重写查询。
  3. 对每个重写的查询进行搜索。
  4. 计算每个查询的条件概率。
  5. 根据这些概率选择最相关的查询。
  6. 生成最终响应。
  • 查询重写的多方面反馈(MaFeRw)

这个方法结合了检索到的文档和生成的答案的反馈,来优化查询重写。步骤如下:

  1. 接收初始查询(比如“医疗保健中的机器学习”)。
  2. 生成几个重写的查询(比如,“医疗诊断中的机器学习”、“治疗- 中的机器学习”)。
  3. 对每个查询进行搜索。
  4. 收集哪些结果最相关的反馈。
  5. 根据用户反馈优化查询。
  6. 生成最终响应。

4. 查询抽象

这个方法通过抓住核心原理来简化推理过程,提升效率,就像我们人类思考问题一样。

  • 退一步看问题

这种方法让大语言模型(LLM)从更高的角度去思考,抓住核心原则,而不是纠结于复杂的细节。步骤如下:

  1. 遇到复杂的问题,比如“怎么烤蛋糕?”
  2. 引导 LLM 去思考“烘焙的原理”或者“做蛋糕的基本步骤”。
  3. 用高级推理去找到更相关、更准确的答案。
  4. LLM 根据找到的信息给出回答。
  • 概念推理

这种方法把问题提升到更高的概念层次,让 LLM 能用更结构化和抽象的方式处理复杂问题。步骤如下:

  1. 问题比如“机器学习在医疗领域有哪些应用?”
  2. 引导 LLM 去思考机器学习或数据处理在医疗领域的一般应用。
  3. 在知识库里搜索相关的高级概念。
  4. LLM 根据提炼后的问题生成回答。
  • 抽象链(CoA)

这个方法把传统的思路链(CoT)推理提升到更高的抽象层次,让模型能用特定工具(比如计算器或搜索引擎)得到更准确的答案。步骤如下:

  1. 问题比如“怎么计算圆的面积?”
  2. 从高级原理开始推理(比如,“圆的面积是 πr²”)。
  3. 用计算器之类的工具算出具体数值。
  4. 模型给出完整、合理的回答。
  • 思维抽象(AoT)

这个方法把推理过程分成多个层次,每一步都逐步增加细节。步骤如下:

  1. 复杂问题,比如“机器学习在医疗领域有哪些应用?”
  2. 把问题拆成“诊断应用”、“治疗”和“预防”等子问题。
  3. 详细分析每个子问题,通过知识库进一步细化。
  4. 生成完整、全面的回答。
  • BaeK

这个方法通过生成高级抽象信息来增强初始问题,提供更多背景支持。它让问题更全面,适合需要背景知识的复杂问题。步骤如下:

  1. 收到用户问题:“机器学习在医疗领域的应用。”
  2. 生成更高级的抽象信息:“机器学习在医疗领域的一般应用”或- “医疗领域的数据处理技术”。
  3. 把抽象信息和初始问题结合起来,形成更精确的问题。
  4. 用提炼后的问题去搜索知识库,得到更准确的结果。
  5. 生成最终回答:LLM 根据检索到的结果综合出回答。
  • 多方面检索和推理细化 (MA-RIR)

这个方法识别问题的各个方面,把它们拆分成子领域,方便有针对性的检索和推理。对于涉及多个主题的问题特别有效。步骤如下:

  1. 收到用户问题:“机器学习在医疗领域的应用。”
  2. 定义问题的各个方面:“诊断中的应用”、“治疗中的应用”和“预- 防中的应用”。
  3. 执行多层检索:分别收集每个方面的相关信息。
  4. 推理优化:把各个方面的结果结合起来,形成一个有逻辑的回答。
  5. 生成最终回答:LLM 根据综合信息生成回答。
  • RuleRAG

这个方法用逻辑规则来增强文档检索,结合逻辑推理和知识图谱的优势,提高准确性和推理能力。步骤如下:

  1. 收到用户问题:“机器学习在医疗领域的应用。”
  2. 定义逻辑规则:“机器学习用于诊断”和“机器学习支持治疗”。
  3. 执行规则引导检索:用逻辑规则收集相关文档,比如“医学成像中的应用”和“药物发现中的人工智能”。
  4. 生成最终回答:根据收集的信息和应用的逻辑规则生成回答。
  • SimGRAG

这个方法通过两步把查询文本和知识图谱结构对齐。首先,把查询转换成图形模式。然后,用图语义距离 (GSD) 来衡量与候选子图的对齐程度,提高检索准确性。步骤如下:

  1. 收到用户问题:“机器学习在医疗领域的应用。”
  2. 转换成图形模式:“机器学习→应用于→医疗领域。”
  3. 量化对齐:用 GSD 评估查询模式和潜在子图之间的对齐程度,比如“机器学习→诊断”和“机器学习→治疗”。
  4. 执行检索:收集与得分最高的子图对应的文档。
  5. 生成最终回答:根据检索到的信息生成回答。

总结

检索增强生成(RAG)系统的厉害之处在于,它巧妙地把高效的信息检索和对上下文敏感的生成能力结合在了一起。通过扩展、分解、消歧和抽象这些查询优化技巧,我们可以对查询进行微调,让它更贴合用户的需求,消除歧义,还能精准处理那些复杂或知识密集型的任务。

无论是用上下文信息来丰富查询,还是把复杂问题拆解成小块,或者通过抽象来获得更广泛的见解,这些方法都能显著提升RAG系统中大语言模型(LLM)的表现和灵活性。有了这些创新,RAG系统能够提供更精准、更相关、更有深度的结果,从而推动信息驱动型应用向前迈进一大步。

论文标题:A Survey of Query Optimization in Large Language Models
论文链接:https://arxiv.org/pdf/2412.17558

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号