type
status
date
slug
summary
tags
category
icon
password

🔍 查询增强 (Query Enhancement)

1. 查询转换 (Query Transformations)

  • 核心动机 (Motivation)
    • RAG 系统在面对复杂或模糊的查询时,常常难以检索到最相关的信息。这些查询转换技术旨在解决这一挑战,通过重构查询以更好地匹配相关文档,或通过分解查询以检索更全面的信息,从而显著提升检索阶段的效率和质量。
  • 三种核心查询转换技术
    • 1. 查询重写 (Query Rewriting)
      • 目的: 使原始查询变得更具体、更详细,从而提升检索结果的精准度。
      • 实现方式: 使用一个大语言模型(如 GPT-4)和一个为重写任务定制的提示模板 (Prompt Template),将用户的模糊查询转化为一个或多个具体的、包含更多细节的查询。
    • 2. 退步提示 (Step-back Prompting)
      • 目的: 将具体问题“退一步”思考,生成一个更宽泛、更宏观的查询。这有助于检索到更高层次的背景信息或一般性概念,为回答具体问题提供必要的上下文。
      • 实现方式: 同样使用 GPT-4 和专门设计的提示模板,引导模型从原始查询中提炼出一个更具概括性的“退步”查询。
    • 3. 子查询分解 (Sub-query Decomposition)
      • 目的: 将一个复杂的、包含多个方面的大问题,分解成一系列更简单、更具体的小问题(子查询)。分别对这些子查询进行检索可以确保信息的全面性,避免遗漏任何一个方面。
      • 实现方式: 利用 GPT-4 和相应的提示模板,将原始查询分解为 2 到 4 个独立的子查询。
  • 举例说明 (Illustrative Example)
    • 原始查询 (Original Query):
      • "气候变化对环境有哪些影响?"
    • 1. 查询重写 (Query Rewriting) 结果:
      • 模型可能会将其重写为更详细的查询,以覆盖更多具体方面:
      • "考虑到全球平均气温上升、冰川融化和海平面上升,气候变化对地球的生物多样性、生态系统和自然环境造成了哪些具体和可衡量的影响?"
    • 2. 退步提示 (Step-back Prompting) 结果:
      • 模型会生成一个更宏观的问题来获取背景知识:
      • "气候变化的一般性影响是什么?"
    • 3. 子查询分解 (Sub-query Decomposition) 结果:
      • 模型会将原问题分解为多个可以独立检索的子问题:
      • [ "气候变化如何影响生物多样性?", "气候变化对海洋生态系统有哪些影响?", "气候变化如何改变全球的天气模式?", "气候变化对陆地环境和森林造成了哪些后果?" ]
  • 综合优势 (Benefits of these Approaches)
    • 提升相关性 (Improved Relevance): “查询重写”有助于检索到更具体、更贴切的信息。
    • 优化上下文 (Better Context): “退步提示”能够检索到更广泛的背景知识,为回答提供坚实的上下文基础。
    • 结果更全面 (Comprehensive Results): “子查询分解”确保了复杂问题的各个方面都能被充分检索,使最终答案更完整。
    • 使用灵活 (Flexibility): 这三种技术可以独立使用,也可以根据具体的应用场景和查询类型组合使用,具有很高的灵活性。

2. 假设性文档嵌入 (HyDE - Hypothetical Document Embedding)

  • 核心动机 (Motivation)
    • 传统的检索方法常常受困于“语义鸿沟”问题,即用户的简短查询在向量空间中的表示,与包含答案的、内容详尽的文档的表示相去甚远。HyDE 通过将查询扩展为一个完整的、内容丰富的假设性文档来解决此问题,使得扩展后的查询向量能更接近目标文档的向量,从而提升检索的相关性。
  • 核心组件 (Key Components)
    • 文档预处理与分块: 对原始 PDF 等文档进行解析和文本分块。
    • 向量存储创建: 使用 FAISSOpenAI Embeddings 构建高效的向量数据库。
    • 假设性文档生成: 利用大语言模型(LLM)根据用户查询生成一个假设性的、包含答案的文档。
    • 自定义检索器: 实现一个自定义的 HyDERetriever 类,用于封装和执行 HyDE 的特定检索逻辑。
  • 实现方法详解 (Method Details)
    • 1. 文档预处理与向量存储:
      • 此步骤为标准 RAG 流程:加载并处理 PDF 文档,将其分割成文本块,然后使用 OpenAI Embeddings 将这些文本块向量化,并存入 FAISS 向量存储中。
    • 2. 假设性文档生成:
      • 这是 HyDE 的核心步骤。当用户输入一个查询时,系统会先使用一个强大的 LLM(如 GPT-4),通过一个特别设计的提示模板 (Prompt Template) 来生成一个“假设性文档”。
      • 这个文档的内容是模型设想的、能够完美回答用户查询的理想答案。
    • 3. HyDE 检索流程:
      • 自定义的 HyDERetriever 严格遵循以下流程:
        • a. 接收用户原始查询。
        • b. 调用 LLM,根据查询生成一个假设性文档。
        • c. 将这个新生成的假设性文档本身进行向量化,并将其作为新的“查询向量”
        • d. 使用这个新的查询向量,在 FAISS 向量存储中搜索并返回最相似的真实文档
  • 举例说明 (Illustrative Example)
    • 原始查询 (Original Query):
      • "RAG系统中的HyDE技术是如何工作的?"
    • 传统检索的问题:
      • 这个简短查询的向量可能与任何一篇具体解释 HyDE 实现细节的长文档的向量都有较大距离。
    • HyDE 的处理方式:
      • 1. 生成假设性文档: LLM 会生成一个类似下面这样的理想答案:
        • "HyDE,即假设性文档嵌入,是一种先进的检索技术。它的工作原理是,首先不直接使用用户的原始查询进行搜索,而是利用一个生成式语言模型,根据原始查询凭空创造一个详尽的、包含理想答案的‘假设性文档’。然后,系统将这个假设性文档进行向量化,并用这个新的向量去文档库中寻找最相似的真实文档。这种方法能有效解决用户短查询和数据库中长文档之间的语义差异问题,从而提升检索的准确性。"
      • 2. 进行检索: 系统会使用上面这段长文本的向量去进行搜索,这个向量显然比原始短查询的向量更能代表“解释HyDE工作原理”的语义,因此能更精准地找到相关的真实技术文档。
  • 主要特性与优势 (Key Features & Benefits)
    • 查询扩展 (Query Expansion): 自动将简短、模糊的查询扩展为内容详尽的假设性文档。
    • 提升相关性 (Improved Relevance): 通过查询扩展,HyDE 能够捕捉到更细微和相关的匹配,从而提升检索结果的质量。
    • 处理复杂查询 (Handling Complex Queries): 对于那些难以直接匹配的、复杂的或多方面的问题尤其有效。
    • 更佳的上下文理解: 扩展后的查询能更好地捕捉原始问题的深层意图和上下文。

3. 假设性提示嵌入 (HyPE - Hypothetical Prompt Embedding)

  • 与 HyDE 的核心区别
    • HyPE 的理念与 HyDE 恰好相反,两者的核心差异在于“假设”对象和发生阶段的不同:
    • HyDE (假设性文档嵌入): 在 查询时 (Runtime),为用户的 查询 (Query) 生成一个假设性的 答案 (Answer)
    • HyPE (假设性提示嵌入): 在 索引时 (Indexing),为知识库中的每个 文档块 (Chunk) 生成多个假设性的 问题 (Question)
  • 实现方法详解 (Method Details)
    • 1. 文档预处理:
      • 使用 PyPDFLoader 加载 PDF 文档,并利用 RecursiveCharacterTextSplitter 将其分割成保持信息连贯性的文本块 (chunks)。
    • 2. 假设性问题生成 (Offline):
      • 此为 HyPE 的核心步骤。系统不会直接嵌入原始的文本块,而是在索引阶段,利用 LLM 为每一个文本块生成多个(例如3-5个)可能的“代理问题”(proxy questions)。
      • 这些预先计算好的问题模拟了真实用户的潜在查询,极大地提升了与用户真实查询的对齐程度,并且完全消除了类似 HyDE 等技术所需的运行时生成开销。
    • 3. 向量存储创建 (Multi-Vector Representation):
      • 将上一步生成的每一个假设性问题使用 OpenAI Embeddings 进行向量化。
      • FAISS 向量存储中,建立起每个“问题向量”与其“原始文档块”之间的关联映射。
      • 这种方法为单个文档块创建了多个向量表示,极大地扩展了其语义覆盖范围,从而提高了被检索到的灵活性和可能性。
    • 4. 检索流程 (Question-Question Matching):
      • 当用户发起查询时,检索器执行的是“问题-问题”匹配:
        • a. 接收用户的真实查询(一个问题)。
        • b. 在 FAISS 中高效地搜索与用户查询最相似的假设性问题向量
        • c. 返回这些向量所关联的原始文档块,这些文档块将为下游的 LLM 提供更丰富、更精准的上下文。
  • 举例说明 💡
    • 场景: 索引一篇关于光合作用的文章。
    • 原始文本块: "光合作用是植物利用叶绿素,在光的照射下,将二氧化碳和水转化为有机物,并释放出氧气的过程。"
    • HyPE流程 (索引时):
        1. LLM为这个文本块生成多个假设性问题,如:
            • "什么是光合作用?"
            • "植物如何制造氧气?"
            • "光合作用需要哪些原料?"
        1. 系统将这些问题向量化并存储,同时链接回原始文本块。
    • 查询时: 当用户提问"植物制造氧气的过程叫什么?"时,他的问题会与存储的假设性问题"植物如何制造氧气?"高度匹配,从而准确地检索到原始文本块。
  • 主要特性与优势 (Key Features & Benefits)
    • 消除运行时开销: 所有的假设性问题生成都在索引阶段离线完成,用户查询时的计算成本与标准 RAG 完全相同,速度极快。
    • 显著提升检索精度: 通过“问题-问题”匹配,更好地对齐了查询与存储内容的语义。根据其论文预印本的评估,该技术在检索精度上带来了高达 42% 的提升,在声明召回率上提升了 45%
    • 多向量表示: 每个文档块被多次索引(每个代理问题一次),提供了更广泛的语义覆盖,更容易被不同措辞的查询命中。
    • 灵活且可扩展: HyPE 的模块化设计易于调整,并且可以与诸如“重排序 (reranking)”等其他高级 RAG 优化技术无缝结合。
百度云4机A800测试RAG技术汇总(1)基础RAG技术
Loading...