当前位置: 首页 > news >正文

【RAG】重点部分 RAG-Fusion, Decomposition, HyDE 和 Routing

1. RAG-Fusion

所属模块: 查询转换 (Query Translation) 和 检索 (Retrieval)

核心思想: RAG-Fusion 是一种旨在提高检索质量的策略,它通过生成多个不同的但语义上相关的查询,并行地从知识库中检索信息,然后将这些检索到的结果进行融合,以更全面地覆盖用户查询的意图并提升最终检索结果的相关性。

工作原理:

  1. 多查询生成: 接收到用户的原始问题后,RAG-Fusion 会利用大型语言模型 (LLM) 生成多个与原始问题语义相关但表达方式不同的变体查询。这可以通过以下方式实现:

    • 改述 (Re-phrase): 使用不同的词语和句式重新表达原始问题。
    • 方面分解 (Aspect Decomposition): 如果原始问题包含多个方面,将其拆分成针对每个方面的子查询。
    • 添加假设 (Adding Hypothetical Constraints): 在查询中加入一些基于对问题理解的假设性条件。
  2. 并行检索: 使用生成的所有查询并行地从知识库(通常是向量数据库)中检索相关的文档或信息片段。每个查询都会返回一个相关的结果集。

  3. 结果融合 (Result Fusion): 将从不同查询中检索到的多个结果集进行融合。融合的目标是突出显示那些被多个查询检索到或者与原始查询的不同变体都相关的文档。常见的融合方法包括:

    • 简单合并 (Simple Merging): 将所有检索到的文档放在一起,然后根据某种相关性度量(例如,基于原始查询的相似度)进行排序和去重。
    • 加权融合 (Weighted Fusion): 根据生成查询的方式或其与原始问题的相关性,对不同查询检索到的结果赋予不同的权重,然后进行排序。
    • 交叉注意力机制 (Cross-attention Mechanisms): 利用 Transformer 模型中的交叉注意力机制,让模型学习不同查询检索到的文档之间的关系,并根据综合的相关性进行排序。这种方法可以更智能地识别出哪些文档包含了回答用户问题所需的关键信息,即使这些信息分散在不同的检索结果中。

为什么有效:

  • 覆盖更广泛的意图: 用户的问题可能存在多种解读方式,通过生成多个不同的查询,RAG-Fusion 可以覆盖用户更广泛的潜在意图。
  • 提高检索的鲁棒性: 不同的查询可能侧重于问题的不同方面或使用不同的关键词,这有助于应对原始查询不够精确或知识库索引方式的局限性。
  • 增强相关性: 通过融合多个检索结果,RAG-Fusion 更有可能将那些真正与用户需求相关的文档排在前面。

简单例子 (不用代码):

原始问题:“介绍一下北京的著名景点和美食。”

RAG-Fusion 可能生成以下查询:

  • “北京有哪些值得参观的景点?”
  • “北京有什么特色美食?”
  • “去北京旅游应该去哪些地方?”
  • “北京的当地小吃有哪些?”

然后,系统会使用这四个查询分别检索知识库,得到四个不同的景点和美食列表。最后,RAG-Fusion 会将这四个列表融合在一起,可能会根据景点或美食在多个列表中出现的频率或其与原始问题的相关性进行排序,最终呈现一个更全面和相关的北京景点和美食推荐列表。

2. Decomposition (分解/拆解)

所属模块: 查询转换 (Query Translation)

核心思想: Decomposition 是一种处理复杂多方面问题的策略,它将一个复杂的问题拆分成几个更简单、更集中的子问题,然后针对每个子问题进行单独的检索,最后将检索到的信息组合起来生成最终答案。

工作原理:

  1. 问题理解与分析: LLM 需要深入理解原始问题的结构和包含的不同信息需求。这包括识别问题中的多个子任务、实体和它们之间的关系。

  2. 子问题生成: 基于对原始问题的理解,LLM 将其分解为一系列独立的、可以单独检索的子问题。子问题的生成需要保证覆盖原始问题的所有方面,并且每个子问题都足够具体,以便进行有效的检索。

  3. 子问题检索: 针对每个生成的子问题,系统会独立地从知识库中检索相关的信息。这可能涉及到使用标准的检索方法。

  4. 答案组合: 将从每个子问题检索到的信息组合起来,生成最终的、能够回答原始复杂问题的答案。这可能需要对检索到的信息进行整合、总结和排序,以确保答案的连贯性和完整性。

为什么有效:

  • 简化复杂查询: 将一个复杂的问题分解成多个简单的子问题,可以降低每个子问题检索的难度,提高检索的准确性。
  • 针对性检索: 每个子问题都可以针对性地检索知识库中与该方面最相关的信息。
  • 提高答案的全面性: 通过解决原始问题的各个子方面,最终生成的答案更有可能覆盖所有关键信息。

简单例子 (不用代码):

原始问题:“介绍一下RAG的工作原理和它的主要优点。”

Decomposition 可能会将其分解为以下子问题:

  • “RAG是如何工作的?”
  • “RAG的主要优势有哪些?”

然后,系统会分别检索关于 RAG 工作原理和 RAG 主要优势的信息。最后,将检索到的两部分信息整合在一起,生成一个既解释了 RAG 原理又列出了其主要优点的完整答案。

3. HyDE (Hypothetical Document Embeddings)

所属模块: 查询转换 (Query Translation)

核心思想: HyDE 是一种创新的检索增强策略,它不是直接使用原始问题进行检索,而是先让语言模型基于原始问题生成一个或多个假设性的“文档”或“答案”,然后使用这些假设文档的嵌入向量进行检索。

工作原理:

  1. 生成假设文档: 接收到用户的原始问题后,LLM 会尝试想象一个可能包含答案的文档会是什么样的,并生成这个假设文档的文本。这个假设文档不需要完全准确或详尽,但应该在语义上与真实答案相关。

  2. 嵌入假设文档: 使用文本嵌入模型(与知识库中文档使用的嵌入模型相同)将生成的假设文档转换成向量表示。

  3. 检索真实文档: 使用假设文档的嵌入向量在知识库中进行相似性搜索,寻找与假设文档在语义空间中最接近的真实文档。

  4. 利用检索到的文档生成最终答案: 将检索到的真实文档作为上下文,结合原始问题,输入到 LLM 中生成最终的答案。

为什么有效:

  • 语义对齐: HyDE 的核心思想是,模型生成的假设答案可能在语义空间上更接近包含真实答案的文档,即使它们在字面上不完全匹配。这有助于弥补原始问题和知识库文档之间可能存在的词汇差异或表达方式的不同。
  • 利用 LLM 的生成能力: HyDE 巧妙地利用了 LLM 的语言理解和生成能力来辅助检索,而不是仅仅依赖于对原始问题的直接编码。

简单例子 (不用代码):

原始问题:“什么是光合作用?”

HyDE 可能会让 LLM 生成一个关于光合作用的假设文档,例如:

“光合作用是一种生物过程,植物利用光能将二氧化碳和水转化为糖和氧气。这个过程发生在叶绿体中,需要叶绿素作为光合色素。光合作用是地球上大部分生命的基础,因为它产生了我们呼吸的氧气和植物生长的能量来源。”

然后,HyDE 会将这段假设文档编码成向量,并使用这个向量在存储了科学知识的知识库中搜索相关的真实文档。即使知识库中的文档对光合作用的描述与假设文档的用词略有不同,但由于它们在语义上相似,因此很可能被检索到。最后,LLM 会基于检索到的真实文档生成关于光合作用的准确答案。

4. Routing (路由)

所属模块: 路由 (Routing)

核心思想: Routing 模块负责将用户的查询或处理后的信息导向到最合适的资源或处理流程。在 RAG 流程中,这通常意味着根据用户问题的性质,选择最有可能包含答案的特定知识库或采取特定的检索策略。

主要类型:

  1. Logical Routing (逻辑路由):

    • 原理: 利用 LLM 的文本理解和分类能力,分析用户查询的意图和涉及的领域,然后基于预定义的规则或模型,判断哪个或哪些数据库或知识库最有可能包含回答该问题所需的信息。
    • 实现:
      • 查询理解: LLM 分析用户问题,识别关键实体、概念和意图。
      • 知识库索引: 每个知识库都有相关的描述或元数据,说明其包含的信息类型和范围.
      • 分类或决策模型: 基于查询理解和知识库索引,LLM 或外部模型判断最佳的知识库。
      • 路由执行: 将查询导向选定的知识库。
    • 例子: 如果用户询问产品价格,逻辑路由可能会将其导向产品数据库;如果用户询问售后服务,则可能导向客户服务知识库。
  2. Semantic Routing (语义路由):

    • 原理: 将用户的查询嵌入到一个向量空间中,然后将其与预定义的提示词或指令的嵌入进行比较,选择语义上最相似的提示词或指令,并将其用于后续的处理(例如,指导 LLM 的生成风格或选择特定的检索策略)。
    • 实现:
      • 嵌入生成: 使用文本嵌入模型将用户问题和预定义的提示词都转换为向量。
      • 相似度计算: 计算问题向量和每个提示词向量之间的相似度(例如,余弦相似度)。
      • 提示词选择: 选择相似度最高的提示词。
      • 应用提示词: 将选定的提示词用于后续的生成或检索过程.
    • 例子: 如果用户的问题是“总结一下这篇文章的主要内容”,语义路由可能会将其与“摘要提示”的嵌入最相似,从而选择该提示词来指导后续的摘要生成。

为什么有效:

  • 提高效率: 通过将查询导向最相关的资源,避免了在所有知识库中进行不必要的搜索,提高了检索效率。
  • 提升准确性: 不同的知识库可能包含不同类型的信息,选择正确的知识库可以提高检索到相关信息的概率。
  • 定制化处理: 语义路由可以根据问题的语义选择最合适的处理方式或生成风格。

总结:

RAG-Fusion 通过生成和融合多个查询结果来提高检索的覆盖率和相关性。Decomposition 将复杂问题分解为更易于处理的子问题。HyDE 则通过生成假设文档的嵌入来弥合查询和文档之间的语义差距。而 Routing 则负责将查询导向最合适的知识库或处理流程。理解和灵活运用这些策略,能够显著提升 RAG 系统的性能和回答用户问题的能力。

相关文章:

  • apipost快捷使用实例
  • 耳机插进电脑只有一边有声音怎么办 解决方法分享
  • Java——包装类
  • 【大模型面试每日一题】Day 13:数据并行与模型并行的区别是什么?ZeRO优化器如何结合二者?
  • MLX-Audio:高效音频合成的新时代利器
  • 依赖关系-根据依赖关系求候选码
  • 基于Llama3的开发应用(一):Llama模型的简单部署
  • 力扣刷题 每日四道
  • vue项目的创建
  • LDO与DCDC总结
  • 华为5.7机考-最小代价相遇的路径规划Java题解
  • ATH12K驱动框架架构图
  • 使用PyTorch训练马里奥强化学习代理的完整指南
  • 地平线rdk-x5部署yolo11(1) 模型转出
  • EPS三维测图软件
  • lvm详细笔记
  • ASCII码的快速记忆方法
  • 【A2A】管中窥豹,google源码python-demo介绍
  • 小程序消息订阅的整个实现流程
  • TOGAF 企业架构介绍(4A架构)
  • 优秀“博主”在上海杨浦购房最高补贴200万元,有何条件?
  • 国家出口管制工作协调机制办公室部署开展打击战略矿产走私出口专项行动
  • 河南省平顶山市副市长许红兵主动投案,接受审查调查
  • 纽约大学朗格尼医学中心的转型带来哪些启示?
  • 股价两天涨超30%,中航成飞:不存在应披露而未披露的重大事项
  • 习近平同俄罗斯总统普京会谈