目录
4 Methodology
4.1 框架(Framework)
基于对 RAG 系统的知识库结构、任务分类和系统层级划分的分析,作者提出了一个通用且可扩展的 RAG 框架。
在这个框架中,可以通过调整主模块中的子模块来实现 RAG 系统的功能进阶。
框架结构(见原文 Figure 2)主要包括以下基础模块:
文件解析(File Parsing, PA)
- 处理多种格式的领域文档,将其转换为机器可读格式。
- 生成文件单元(file units),用于在信息源层构建图结构。
知识抽取(Knowledge Extraction, KE)
- 将文本分块(chunking),生成语料单元(corpus units)和知识单元(knowledge units)。
- 构建语料层和精炼知识层的图结构。
知识存储(Knowledge Storage)
- 将提取的知识以多种结构化格式保存。
- 形成异构多层图(heterogeneous graph)作为知识库。
知识检索(Knowledge Retrieval, RT)
- 采用混合检索策略获取相关信息。
- 知识库不仅是信息源,还通过反馈环(feedback loop)不断完善自身。
知识组织(Knowledge Organization, KO)
- 对检索到的知识进行处理与结构化整理。
知识中心推理(Knowledge-Centric Reasoning, KR)
- 基于整理后的知识进行推理,生成中间答案。
任务分解与协调(Task Decomposition & Coordination)
- 将工业应用中的问题分解为检索步骤、推理步骤及其他必要操作。
- 监督迭代的检索-生成机制:逐步收集信息 → 渐进推理 → 更新方案 → 迭代执行,直到得到更精准、完整的回答。
4.2 分阶段系统开发(Phased System Development)
作者将 RAG 系统按解决问题的能力划分为 L0-L4 五个阶段(见原文 Table 1 & Table 2)。
- L0 阶段专注于构建高质量的知识库(Knowledge Base)。
- L1-L4 阶段逐步引入更复杂的模块与推理机制,提升应对不同类型问题的能力。
各级别挑战与框架(摘自 Table 2)
Level | 主要挑战 | 对应改进框架 |
---|---|---|
L0 | - 多源文档格式复杂,需高阶文件解析技术。 - 从异构原始数据构建高质量知识库时,知识组织与整合难度大。 |
重点:提升文件解析(PA)与知识组织(KO)能力。 |
L1 | - 不合理的分块(chunking)破坏语义连贯性,影响检索准确性。 - 嵌入模型(embedding)在专业术语与别名对齐上存在局限,降低检索精度。 |
重点:优化知识抽取(KE)与检索(RT)策略。 |
L2 | - 分块文本中混有无关信息,需确保高质量信息的提取与利用。 - 任务理解与分解往往忽视支持数据的可用性,过度依赖 LLM 能力。 |
新增模块:任务分解与协调(Task Decomposition & Coordination),并强化精炼知识生成(distilled knowledge)。 |
L3 | - 面向预测型问题,知识收集与组织要求更高。 - LLM 在应用专业推理逻辑方面有限,限制了预测任务表现。 |
新增子模块:知识结构化(Knowledge Structuring)、知识归纳(Knowledge Induction),推理模块加入预测(Forecasting)能力。 |
L4 | - 从复杂知识库中提取逻辑推理链困难,多因素依赖可能导致非唯一解。 - 创造型问题的开放性使得推理与知识整合过程难以定量评估。 |
新增模块:多智能体规划(Multi-agent Planning),支持多视角推理。 |
- L0 → L1:改进文件解析与知识抽取,提高检索精度。
- L1 → L2:引入任务分解与迭代检索-生成机制,增加精炼知识抽取。
- L2 → L3:强化知识组织与预测推理能力。
- L3 → L4:加入多智能体规划模块,处理复杂多因推理与创造型任务。
5 Detailed Implementation
5.1 L0 阶段:知识库构建 (地基搭建)
这是整个 RAG 系统的基础阶段(L0 系统),其核心任务是构建一个强大而全面的知识库。这个阶段至关重要,因为它直接决定了后续高级功能能否有效地检索到知识。
L0 系统的主要目标是处理和组织特定领域的文档,将它们转换成机器可读的格式,并将提取出的知识组织成一个异构图 (heterogeneous graph)。这个图是所有后续推理和检索任务的支柱。
该阶段包含几个关键模块:文件解析、知识提取和知识存储。
5.1.1 文件解析 (File Parsing)
高效解析各类文件的能力是 RAG 系统的关键。因为现实世界中的文件格式五花八门(如 PDF、Word、图片等),仅仅提取文本是不够的。
特别是对于专业领域的文档,其中往往包含复杂的表格、图表和图片。如果粗暴地将它们转换成纯文本,会丢失大量信息并破坏原有的逻辑结构。
因此,我们提出以下方法:
- 进行版面布局分析:智能识别文档的结构,而不仅仅是文字流。
- 保留多模态元素:对于图表和图片,我们利用视觉语言模型 (Vision-Language Models, VLM) 来生成详细的文字描述。
- 辅助分块操作:版面信息可以指导后续的文本分块,确保切分出的文本块在逻辑上是完整的。
通过这种方式,我们能最大限度地保留原始文档的完整性和丰富性,为后续的知识检索打下坚实的基础。
5.1.2 知识组织 (Knowledge Organization)
我们构建的知识库并非简单的文件堆砌,而是一个多层次的异构图结构。这个图代表了不同粒度和抽象级别的信息,清晰地展示了数据各部分(如文档、章节、文本块、图表)之间的内在联系。
该结构主要分为三层:
信息资源层 (Information Resource Layer)
- 作用:这一层关注的是文档的“宏观”关系。它将每个信息来源(如一份份独立的文档)视为一个节点,并用边来表示它们之间的引用关系(例如,“文档A”引用了“文档B”)。
- 价值:这有助于进行跨文档的参考和知识溯源,为需要整合多个来源信息的复杂推理任务奠定基础。
语料层 (Corpus Layer)
- 作用:这一层将解析后的信息组织成章节 (sections)和文本块 (chunks),同时保留文档原有的层级结构。由大模型总结的表格和图表等内容,也会作为特殊的“文本块”节点整合进来。
- 价值:它使得系统能够以不同的粒度进行知识检索,无论是检索一个大章节还是一个小段落,都能精准定位。
知识蒸馏层 (Distilled Knowledge Layer)
- 作用:这一层对语料层的内容进行“深加工”,将其**提炼(或称蒸馏)**成高度结构化的知识。这个过程会利用命名实体识别 (NER)、关系提取等技术。
- 价值:提炼出的知识以更纯粹、更逻辑化的形式存在,极大地增强了系统进行高级推理和综合分析的能力。
典型的知识蒸馏形式包括:
- 知识图谱 (Knowledge graph):从文本中提取“实体-关系-实体”这样的三元组,构建成一个关系网络。
- 原子知识 (Atomic knowledge):将文本拆分成一系列最基本、不可再分的事实陈述句。
- 表格知识 (Tabular knowledge):从文本中提取具有特定类型和关系的实体对,并将它们组织成表格形式。
5.2 L1 阶段:事实性问答系统 (基础查询与应答)
L1 系统建立在 L0 构建的知识库之上,其核心目标是实现对事实性问题的检索和生成能力。简单来说,就是让系统能准确地回答“是什么”、“有多少”这类问题。
在这一阶段,主要面临两大挑战:
- 语义对齐 (Semantic Alignment):专业文档中的术语和别名繁多,而用户提问时往往使用口语化的日常用语,这种“语言鸿沟”会影响检索的准确性。
- 文本分块 (Chunking):不合理的文本切分会破坏语义的完整性,引入不相关的“噪音”信息,干扰最终结果。
为了解决这些问题,L1 系统引入了更精密的查询分析技术和知识提取模块。
5.2.1 增强分块 (Enhanced Chunking)
“分块”指的是将大段文本切分成易于管理的小片段。如果切分得不好,比如粗暴地按固定字数切分法律条文,很容易将一个完整的意思拆得支离破碎,导致关键条件丢失,从而影响检索和问答的准确性。
为此,我们提出了一种增强的文本切分算法,它在切分的同时,致力于保持上下文的连贯性。
工作原理:
该算法采用迭代的方式进行切分。其核心特点是,在处理每一个新的文本块时,都会利用 前一个文本块的摘要作为上下文参考。
可以想象成看连续剧时的“前情回顾”:
- 系统处理第一个文本块,并为其生成一个摘要。
- 处理第二个文本块时,系统会参考第一个块的摘要,这样就能更好地理解第二个块的内容,并生成一个连贯的摘要。
- 这个过程不断重复,每个块的摘要都承上启下,确保了整个文档即使被切分,其叙事逻辑和上下文信息也能完整地保留下来。
此外,该算法还能根据文本内容和结构动态调整分块的大小,更加智能灵活。
5.2.2 自动打标 (Auto-tagging)
在专业领域(如医疗、法律),文档语言通常非常严谨、专业,而用户的提问却是口语化的。例如,用户可能会问“心脏怦怦跳得很快”,而医学文献中对应的术语是“心悸”。这种领域鸿沟 (domain gap) 会严重影响检索效果。
为了解决这个问题,我们设计了一个自动打标模块,它的作用就像一个“翻译器”。
工作原理:
- 预处理:系统首先利用大语言模型(LLM)通读所有文档,自动提取出其中的关键概念,并形成一个“领域内标签库”。如果能获取到一些实际的问答样本,系统还能学习并建立一个“口语标签 → 专业标签”的映射规则库。
- 查询时:当用户提问时,系统会从问题中提取出口语化的标签,然后利用预先建立的标签库或映射规则,将其“翻译”成文档中的专业术语。
- 提升效果:这些翻译后的专业标签可以用于改写查询语句或作为关键词进行检索,从而同时提升检索的召回率(查得全)和精确率(查得准)。
这个流程充分利用了大语言模型强大的上下文理解能力,有效地弥合了用户与专业知识之间的语言障碍。
5.2.3 多粒度检索 (Multi-Granularity Retrieval)
L1 系统能够在 L0 构建的多层异构知识图上进行多层次、多粒度的立体式检索。
工作原理:
这意味着系统在寻找答案时,不仅仅是搜索零散的文本块。它会同时在知识图的所有层面进行探索:
- 信息资源层:从宏观上判断哪几份整个文档可能相关。
- 语料层:在中观上定位到最相关的具体章节或段落。
- 知识蒸馏层:在微观上挖掘出最精确的结构化知识点。
系统会计算查询语句与图中各个层面节点(分别表示为 I , C , D I, C, D I,C,D)的相似度分数 g ( ∗ ) g(*) g(∗)。更重要的是,这些分数会在图的层级之间传播和聚合。例如,一个文本块的得分会受到其所属文档的总体相关性影响,反之亦然。
最终,一个文本块的最终相似度分数 S S S 是通过一个函数 f ( ∗ ) f(*) f(∗) 将所有层面的线索聚合而成的。这种方式确保了检索结果既考虑了宏观背景,又兼顾了微观细节,从而在回答事实性问题时兼具效率与精度。
5.3 L2 阶段:关联性与推理性问答系统 (复杂分析与推理)
L2 系统的核心能力在于处理那些需要整合多个信息来源、进行复杂推理才能解答的问题。为了实现这一点,L2 系统引入了两项关键创新:知识原子化 (Knowledge Atomizing) 和 知识感知的任务分解 (Knowledge-Aware Task Decomposition)。
简单来说,L2 系统在回答复杂问题时,会像一个聪明的侦探:
- 分解任务:将一个大案子(复杂问题)拆解成一系列的小线索(子问题)。
- 精准搜证:对每一个小线索进行精确的知识检索。
5.3.1 知识原子化 (Knowledge Atomizing)
问题所在:
传统的 RAG 方法将文本切分成“块”(Chunk),但一个文本块往往包含多个不同的知识点。当我们只需要其中一个非常具体的知识点时,检索整个“块”就显得效率低下且不够精确。
解决方案:
“知识原子化”技术将每个文本块进一步拆解成最小的、不可再分的**“原子知识”**。
巧妙之处:
我们不直接存储这些零散的知识点,而是换了一种更聪明的方式来索引它们——用“问题”来索引知识。具体做法是:
- 系统利用大语言模型(LLM)去“反向提问”。
- LLM 会分析一个文本块,并尽可能多地生成“这个文本块可以回答哪些问题?”。
- 这些生成的问题就成了该文本块的“原子问题标签”。
带来的好处:
这就建立了一个双路径的检索系统:
- 传统路径:可以直接按语义相似度检索整个文本块。
- 原子路径:可以将一个子问题去匹配这些“原子问题标签”,从而精确地定位到能回答这个子问题的文本块。这极大地提升了知识检索的精准度。
5.3.2 知识感知的任务分解 (Knowledge-Aware Task Decomposition)
问题所在:
面对一个复杂问题,如何有效地将其拆解成一系列小问题?最佳的拆解策略往往取决于你的知识库里到底有什么信息。
举个例子:
问题:“市场上有多少种可互换的生物仿制药?”
- 策略一(如果知识库里有现成的列表):一步到位,直接查询“可互换生物仿制药列表”。
- 策略二(如果知识库里只有通用列表):需要分解成三步:1. 获取所有生物仿制药的列表;2. 逐一判断每种药是否可互换;3. 统计数量。
解决方案:
“知识感知”的任务分解,意味着系统在分解任务前,会先“看一眼”自己的知识库,根据已有信息来制定最高效的解题计划。
工作流程(简化版):
这是一个迭代循环的过程,就像侦探一步步破案:
- 提出假设 (Propose):针对当前要解决的大问题,LLM 会“头脑风暴”,提出几个可能需要调查的子问题(例如,“什么是生物仿制药?”“可互换性的标准是什么?”)。
- 检查线索 (Check):系统拿着这些假设的子问题,去知识库的“原子问题标签”里快速查询,看看是否有现成的、高质量的答案。
- 选择突破口 (Select):LLM 从中选择一个最关键、且已有信息支持的子问题作为下一步的突破口。
- 获取证据并更新 (Retrieve & Update):系统获取该子问题对应的知识(文本块),并将其加入到当前的“案件档案”(上下文)中。
- 循环往复:系统重复以上步骤,直到“案件档案”中的信息足以回答最初的那个复杂问题。
这个过程确保了每一步分解都是有理有据、朝着解决问题的方向高效前进的。
5.3.3 任务分解器的训练 (Decomposer Training)
目标:
上述“提出-检查-选择”的循环虽然有效,但在实时应用中可能较慢。为了提升效率,我们可以训练一个专门的任务分解器模型,让它学会如何“一步到位”地给出最优的分解路径。
训练方法:
这就像训练一个经验丰富的侦探,需要让他“见多识广”。
收集训练数据 (Data Collection):
- 系统会针对一个复杂问题,尝试多种不同的“推理路径”(即不同的分解方法)去解决它。
- 这个过程采用了一种名为 UCB (Upper Confidence Bound) 的策略,它能巧妙地平衡“利用”(选择当前看起来最优的路径)和“探索”(尝试一些不常见的、可能有惊喜的新路径)。
- 系统会记录下每一次尝试的完整路径、中间步骤,以及最终答案的质量得分。
进行模型训练 (Training):
- 将收集到的大量“推理路径及其得分”作为训练数据。
- 模型通过学习这些数据,就能逐渐掌握在特定领域内,什么样的分解方式更容易得到高分答案。
- 可以使用监督微调 (SFT) 或直接策略优化 (DPO) 等成熟的算法来训练这个分解器。
通过这种方式,我们可以训练出一个能够根据不同领域知识,自动进行高效、合理任务分解的专家模型,从而大幅提升 L2 系统的推理性能和响应速度。
5.4 L3 阶段:预测性问答系统 (数据分析与趋势预测) 📈
L3 系统的核心能力是基于知识进行预测,回答“未来会怎样?”这类问题。这不仅需要收集信息,更需要对信息进行有效的组织和分析,并构建起一套预测的逻辑。
为了实现这一目标,L3 系统在前序系统的基础上,增加了几个关键的“数据分析”模块。
工作流程:
可以把 L3 系统想象成一个数据分析师。当被问及一个预测性问题时(例如,“预测未来 FDA 批准的药物数量趋势”),它的工作流程如下:
收集原始数据: 首先,系统从知识库中检索所有相关信息,比如药品标签、临床试验数据、申请表格等。这些信息是零散且非结构化的。
知识结构化 (Knowledge Structuring): 接下来,一个专门的知识结构化子模块会介入,它像一个数据清理工具,将原始、杂乱的信息整理成结构化的、干净的格式。例如,它会提取出关键信息,整理成一个清晰的表格,如
[药品名称, 批准日期]
。知识归纳 (Knowledge Induction): 有了结构化的数据后,知识归纳子模块会对其进行进一步的分析和分类,以发现模式和趋势。例如,它会将上一步的表格按“批准年份”进行分组和统计,得出
[年份, 当年批准药品总数]
这样的洞察。进行预测 (Forecasting): 最后,由于常规的大语言模型(LLM)本身并不擅长进行专业的统计推断,L3 系统集成了一个专门的预测子模块 (Forecasting Submodule)。该模块会利用前面归纳好的数据(如历年药品批准数量),运用预测算法来推断未来的趋势,给出一个有数据支撑的预测结果。
通过这种“收集 → 整理 → 归纳 → 预测”的流程,L3 系统能够处理和利用复杂动态的知识,提供比简单回答历史事实更深入、更具前瞻性的答案。
5.5 L4 阶段:创造性问答系统 (AI 团队头脑风暴) 💡
L4 系统是该框架的最高级别,专注于解决没有标准答案的、开放式的创造性问题(例如,“如何设计一个更创新的解决方案来应对城市交通拥堵?”)。
核心挑战:
创造性问题往往涉及众多影响因素,推理过程复杂,而且很难评估答案的“好坏”。单一的思维模式很难给出富有创意的答案。
解决方案:
L4 系统的实现引入了多智能体系统 (Multi-Agent System),其工作模式可以被形象地比作一个**“AI 专家团队的头脑风暴会议”**。
工作原理:
组建团队: 当收到一个创造性问题时,系统会协调多个拥有不同“视角”和“思维方式”的 AI 代理 (Agents)。你可以想象这些代理分别扮演着不同角色,比如一个乐观的工程师、一个谨慎的风险分析师、一个天马行空的设计师等。
并行思考: 这些代理会同时、独立地从各自的角度分析问题,并提出自己的见解、策略和解决方案。
综合产出: 系统最后会将所有代理的思考过程和结论综合起来,形成一个全面、连贯且富有层次感的解决方案。
最终价值:
L4 系统追求的不是给出一个唯一的“正确答案”,而是通过模拟多元化的视角,生成一系列创新的想法和可能性。它提供的综合性输出不仅丰富了推理过程,也为用户提供了多维度的思考框架,从而激发用户的创造力,启发他们找到解决复杂问题的新思路。
好的,没有问题。我将把原文中的表格和示例补充到之前的翻译和解读中,让内容更加完整和详细。
6. 评测与指标
为了验证我们提出的方法(即“知识感知的任务分解”)是否有效,我们在通用领域和专业领域(法律)的数据集上都进行了实验。
- 第 6.1 节:介绍实验设置,包括我们用来对比的各种方法和评测标准。
- 第 6.2 节:展示在三个通用领域数据集上的评测结果。
- 第 6.3 节:展示在两个法律专业领域数据集上的评测结果。
- 第 6.5 节:通过三个真实案例进行深入分析,凸显我们方法的优越性。
6.1 实验设置
对比的基准方法 (Methods)
为了全面评估我们的方法,我们选择了一系列代表不同解题策略的AI方法作为“陪练”。
- Zero-Shot CoT (零样本思维链): 完全不给AI任何外部资料,只让它利用自己脑中的知识,通过“一步一步想”的方式来回答问题。这能衡量AI模型自身的基础推理能力。
- Naive RAG (基础版RAG): 在回答问题前,允许AI从一个外部知识库中检索相关信息作为参考。这代表了最基础的RAG方法。
- Self-Ask (自我提问): AI会像侦探一样,把一个复杂问题分解成一系列小问题,然后逐一回答,最终汇总成答案。这个过程不检索外部知识,完全靠AI自己分解和推理。
- GraphRAG (图谱RAG): 这种方法会先把知识库构建成一个知识图谱(像思维导图),然后通过图中的关联来寻找答案,特别适合需要多步推理的问题。它分为“局部”和“全局”两种模式。
知识库的两种形式:
为了进行更公平的比较,我们为 Naive RAG 和 Self-Ask 配备了两种不同类型的知识库:
- 扁平知识库 (Flat Knowledge Base, 简称 R): 就像一个简单的书架,所有知识(文本块)都直接存放在上面,检索时直接在所有书中寻找。
- 层级知识库 (Hierarchical Knowledge Base, 简称 H-R): 就像一个带有精细索引的图书馆。它不仅有书籍(文本块),还有索引卡片(即我们在L2阶段提到的“原子问题”)。检索时,AI可以同时使用两种方式:直接在书架上找(路径 a),或者先查索引卡片再找书(路径 b)。这能提供更丰富的参考信息。
我们的方法 (Ours):
我们提出的知识感知的任务分解方法。它会迭代地将问题分解,每一步分解都会去知识库中检索信息,最多进行5轮迭代,最终用5个最相关的知识块来生成答案。
评测指标 (Metrics)
我们使用了多种指标来评判答案的好坏。
传统指标:
- EM (Exact Match, 完全匹配): 答案必须和标准答案一字不差才算对。非常严格。
- F1 Score (F1 分数): 综合了答案的精确率 (Precision)和召回率 (Recall),在词语层面上衡量答案与标准答案的重合度。比EM更灵活。
新增的智能指标:
我们发现,有时候AI的回答虽然和标准答案说法不同,但意思完全正确。传统指标会给这种答案打低分。为了解决这个问题,我们引入了一个新指标:
- Accuracy (Acc, 准确率): 我们请 GPT-4 来充当裁判,由它来判断AI的回答在语义上是否正确。经过人工抽查,GPT-4的判断和人类专家的判断完全一致,证明了这个指标非常可靠。
指标的局限性:
需要注意的是,以上这些指标主要适用于有确定、事实性标准答案的问题(即 L1 和 L2 类问题)。对于 L3 (预测性) 和 L4 (创造性) 这类没有唯一正确答案的问题,这些指标就不太适用了。这类问题需要通过趋势判断、定性分析或从相关性、多样性、启发性等多个维度进行评估。
模型与参数设置
- 大语言模型 (LLM): 所有实验的核心大脑都使用 GPT-4 (1106-Preview版)。
- Embedding 模型: 用于将文本转换成向量进行相似度检索的模型是 text-embedding-ada-002 (v2)。
- 温度参数 (Temperature): 在“知识原子化”阶段设为0.7,鼓励生成多样化的问题;在所有问答环节设为0,确保AI每次的回答都保持一致,便于比较。
6.2 在通用领域的评测
我们选择了三个公认的**多跳推理 (multi-hop)**问答数据集进行测试,这类问题的特点是需要综合多个信息源才能找到答案。
数据集介绍:
- HotpotQA: 主要包含2跳问题,相对简单。
- 2WikiMultiHopQA: 问题类型更多样,难度更高,包含2到4跳问题。
- MuSiQue: 设计最巧妙,有效避免了模型通过“走捷径”猜对答案的情况,难度最高,包含2到4跳问题。
表3. 三个多跳问答数据集中问题类型的分布
(a) HotpotQA
类型 | 数量 | 比例 |
---|---|---|
comparison (比较) | 107 | 21.4% |
bridge (桥接) | 393 | 78.6% |
(b) 2WikiMultiHopQA
类型 | 数量 | 比例 |
---|---|---|
comparison (比较) | 132 | 26.4% |
inference (推断) | 64 | 12.8% |
compositional (组合) | 196 | 39.2% |
bridge_comparison (桥接比较) | 108 | 21.6% |
© MuSiQue
跳数 | 数量 | 比例 |
---|---|---|
2 | 263 | 52.6% |
3 | 169 | 33.8% |
4 | 68 | 13.6% |
表4, 5, 6. 各方法在三个通用数据集上的性能对比 (分数越高越好)
表4: 在 HotpotQA 上的性能对比
方法 | EM | F1 | Acc | Precision | Recall |
---|---|---|---|---|---|
Zero-Shot CoT | 32.60 | 43.94 | 53.60 | 46.56 | 43.97 |
Naive RAG w/ R | 56.80 | 72.67 | 82.60 | 74.52 | 74.86 |
Naive RAG w/ H-R | 54.80 | 70.25 | 81.60 | 72.56 | 72.24 |
Self-Ask | 28.80 | 43.61 | 59.60 | 43.49 | 56.21 |
Self-Ask w/ R | 44.80 | 63.08 | 81.00 | 63.23 | 74.57 |
Self-Ask w/ H-R | 47.20 | 64.24 | 82.20 | 64.27 | 75.95 |
GraphRAG Local | 0.00 | 10.66 | 89.00 | 5.90 | 83.07 |
GraphRAG Global | 0.00 | 7.42 | 64.80 | 4.08 | 63.16 |
Ours (我们的方法) | 61.20 | 76.26 | 87.60 | 78.10 | 78.95 |
表5: 在 2WikiMultiHopQA 上的性能对比
方法 | EM | F1 | Acc | Precision | Recall |
---|---|---|---|---|---|
Zero-Shot CoT | 35.67 | 41.40 | 43.87 | 41.43 | 43.11 |
Naive RAG w/ R | 51.20 | 59.74 | 62.80 | 59.06 | 62.30 |
Naive RAG w/ H-R | 51.40 | 59.73 | 63.00 | 59.36 | 62.43 |
Self-Ask | 23.80 | 37.49 | 51.60 | 34.56 | 60.72 |
Self-Ask w/ R | 46.80 | 64.17 | 79.80 | 61.17 | 80.21 |
Self-Ask w/ H-R | 48.00 | 63.99 | 80.00 | 61.30 | 79.56 |
GraphRAG Local | 0.00 | 11.83 | 71.20 | 6.74 | 75.17 |
GraphRAG Global | 0.00 | 7.35 | 45.00 | 4.09 | 55.43 |
Ours (我们的方法) | 66.80 | 75.19 | 82.00 | 74.04 | 78.87 |
表6: 在 MuSiQue 上的性能对比
方法 | EM | F1 | Acc | Precision | Recall |
---|---|---|---|---|---|
Zero-Shot CoT | 12.93 | 22.90 | 23.47 | 24.40 | 24.10 |
Naive RAG w/ R | 32.00 | 43.31 | 44.40 | 44.42 | 47.29 |
Naive RAG w/ H-R | 30.40 | 41.30 | 43.40 | 42.06 | 44.53 |
Self-Ask | 16.40 | 27.27 | 35.40 | 26.33 | 37.65 |
Self-Ask w/ R | 28.40 | 42.54 | 49.80 | 41.13 | 53.37 |
Self-Ask w/ H-R | 29.80 | 44.05 | 54.00 | 42.47 | 55.89 |
GraphRAG Local | 0.60 | 9.62 | 49.80 | 5.73 | 55.82 |
GraphRAG Global | 0.00 | 5.16 | 44.60 | 2.82 | 52.19 |
Ours (我们的方法) | 46.40 | 56.62 | 59.60 | 57.45 | 59.53 |
表7. GraphRAG (Local) 在 HotpotQA 上的一个输出示例
内容 | |
---|---|
问题 | Alsa Mall 和 Spencer Plaza 位于哪个国家? |
标准答案 | 印度 (India) |
GraphRAG的答案 | Alsa Mall 和 Spencer Plaza 都位于印度的金奈 [数据:印度和金奈社区 (2391);实体 (4901, 4904);关系 (9479, 1687, 5215, 5217)]。 |
分析 | 答案在语义上是正确的,但包含了大量与答案无关的元数据,导致其在F1等文本匹配指标上得分很低。 |
- RAG的巨大优势: 所有引入外部知识库的RAG方法,其性能均显著优于仅依赖模型内部知识的 Zero-Shot CoT,这验证了检索增强对于知识密集型任务的根本价值。
- 任务分解的重要性: 在高难度数据集(尤其是MuSiQue)上,采用任务分解策略的 Self-Ask 方法,性能优于直接检索的 Naive RAG,表明对于复杂问题,分解-解决的策略是有效的。
- 层级知识库的威力: “带索引的图书馆”(H-R) 搭配 “侦探式”的 Self-Ask 方法时,效果最好。因为侦探的每个小问题都能通过索引找到最精确的线索,尤其是在最难的 MuSiQue 数据集上提升明显。
- 我们方法的领先: 我们的方法在所有数据集上都持续领先。因为它不仅分解任务,而且每一步分解都是“知识感知”的——它知道知识库里有什么,从而制定出最高效的分解策略。这证明了“知识感知”的分解策略能更有效地规划推理路径,从而提升求解的准确性。
- GraphRAG 的奇特表现: GraphRAG 在语义准确度(Acc)上表现尚可,但在词汇匹配指标(EM/F1)上得分极低。分析其输出发现(见表7),其答案虽在语义上正确,但格式冗余,包含了大量与问题无关的元数据,导致词汇匹配度下降。这揭示了部分方法在语义正确性与表达简洁性之间的脱节。
6.3 在法律领域的评测
为验证方法在专业领域的适用性,我们在中文法律基准 LawBench 和英文法律问答数据集 Open Australian Legal QA 上进行了评测。
表8: LawBench 任务概览
任务编号 | 任务类型 | 评测指标 |
---|---|---|
1-1 | 法条背诵 (生成式) | F1 |
1-2 | 法律知识问答 (单选) | EM |
3-1 | 法条预测-基于事实 (多选) | EM |
3-2 | 法条预测-基于场景 (生成式) | F1 |
3-6 | 案情分析 (单选) | EM |
3-8 | 法律咨询 (生成式) | F1 |
LawBench 示例问题:
- 1-1 (法条背诵): 《证券法》第七十六条的内容是什么?
- 1-2 (法律知识问答): 根据《证券法》,下列关于证券交易所的说法错误的是?[A/B/C/D选项]
- 3-1 (法条预测-基于事实): 根据以下事实和罪名,请给出相关的《刑法》法条。[一段长长的案情描述] 罪名:合同诈骗罪。
- 3-2 (法条预测-基于场景): 场景:一艘货船抵达卸货港,但收货人未能及时到港提货。船长可以依据哪条法律规定,将货物卸在其他适当的地方?
- 3-6 (案情分析): 酒吧开业一年后,经营环境发生重大变化,全体合伙人开会讨论对策。根据《合伙企业法》,下列表决事项中,属于有效表决的是:[A/B/C/D选项]
- 3-8 (法律咨询): 居民A将房屋出租给B,经A同意,B对承租房进行了装修并转租给C,C擅自改变房屋承重结构,A为什么可以要求B承担违约责任?
Open Australian Legal QA 示例问题:
- “在新南威尔士州的 Anderson v Armitage [2014] NSWCATCD 157 案件中,根据该法案第63条,房东的一般义务是什么?”
表9: 在法律基准上的评测结果 (指标为 F1 / EM)
任务 | Zero-Shot CoT | GraphRAG Local | Ours (我们的方法) |
---|---|---|---|
LawBench | |||
1-1 | 21.31 | 23.27 | 78.58 |
1-2 | 54.24 | 62.60 | 70.60 |
3-1 | 53.32 | 74.60 | 83.16 |
3-2 | 27.51 | 25.98 | 46.05 |
3-6 | 51.16 | 47.64 | 61.91 |
3-8 | 17.44 | 18.43 | 23.58 |
Open Australian Legal QA | 25.10 | 34.35 | 63.34 |
表10: 在法律基准上的评测结果 (指标为 Acc - GPT-4 裁判)
任务 | Zero-Shot CoT | GraphRAG Local | Ours (我们的方法) |
---|---|---|---|
LawBench | |||
1-1 | 1.23 | 16.60 | 90.12 |
1-2 | 54.00 | 63.40 | 70.60 |
3-1 | 49.90 | 75.40 | 88.82 |
3-2 | 15.83 | 27.60 | 67.54 |
3-6 | 51.12 | 57.00 | 62.73 |
3-8 | 49.70 | 58.80 | 61.72 |
Open Australian Legal QA | 16.48 | 88.27 | 98.59 |
这次评测最有趣的发现是传统指标 (F1/EM) 和智能指标 (Acc) 之间的巨大差异,这揭示了很多深层次的问题。
意思对,但说法不同 (语义等价)
- 在法条背诵、法律咨询等生成式任务中,我们的方法 Acc 分数远高于 F1 分数。这是因为我们的答案在语义上和标准答案等价,但表述更自然、更像人类律师。传统的 F1 无法识别这种等价,但作为裁判的 GPT-4 可以。
GraphRAG 检索失败,但“骗”到了分数
GraphRAG 在部分任务中呈现出中等的 F1 分数和极低的 Acc 分数。深入分析发现,该方法未能检索到正确的法律条款,但通过复述问题中的关键词“欺骗”了 F1 指标。这暴露了单纯依赖词汇重叠度进行评估的局限性。
标准答案本身质量不高
在 LawBench 的任务3-8中,所有方法的 Acc 分数均显著高于 F1 分数。经核查,该任务的官方参考答案存在引用法条错误的问题。例如,问题关注“子女对父母的赡养义务”,而标准答案却引用了关于“父母对子女的抚养义务”的法条。本文方法正确引用了相关法条,并通过了 GPT-4 评估器的语义审核,从而获得了高分。
标准答案存在问题的示例 (任务 3-8)
问题: 父母双方离异后各自组建家庭有了新的子女,且根据法院判决,父亲需每月支付抚养费给母亲直至孩子18岁。原配婚姻的子女对父亲是否有赡养义务?
官方参考答案: 我国亲生子女对离异的父母有赡养的义务…(中略)…法律依据:《中华人民共和国民法典》第一千零六十七条规定,父母不履行抚养义务的,未成年子女或者不能独立生活的成年子女,有要求父母给付抚养费的权利…(后略)。
- 问题分析: 官方答案引用的法条 第一千零六十七条 是关于 “父母对子女的抚养义务”,与问题所问的 “子女对父母的赡养义务” 并不直接相关,属于引用错误。
我们的答案: 有赡养义务。法律依据:根据《中华人民共和国民法典》第一千零六十九条规定:“子女对父母的赡养义务,不因父母的婚姻关系变化而终止。”因此,即使父母离异再婚并有了新的子女,原配子女仍然对父母负有赡养义务。
- 分析: 我们的答案正确引用了相关的法条,逻辑清晰且准确。GPT-4作为裁判,正确地识别出我们的答案优于官方标准答案。
4. 选择题表现稳定
* 对于单选题和多选题,由于答案格式固定,F1/EM 和 Acc 分数基本一致,这符合预期。一个有趣的小插曲是,GPT-4 能正确识别中文法律条文中的汉字数字和标准答案中的阿拉伯数字,这也体现了其智能评估的优势。
6.4 领域知识微调的问题分解器实验
研究动机 🧐
我们观察到,所有方法在 MuSiQue
数据集上的准确率都明显偏低。因此,我们专门选择这个数据集进行深入研究,旨在探究一个核心问题:通过微调一个专门用于“问题分解”的小模型,能否有效提升整个问答系统的性能?
数据收集与处理
为了构建高效的实验流程,我们首先从 MuSiQue
数据集中随机抽取了 1000 个问题,并按 8:2 的比例将其划分为训练集(800个)和评估集(200个)。
- 生成“分解轨迹”: 对于训练集中的每一个问题,我们模拟我们方法(图12所示)的执行流程,逐步生成一系列能够导向正确答案的子问题。这个“提问-回答”的链条,我们称之为分解轨迹。
- 高效的数据收集: 这个过程非常高效。我们成功地为 84% 的训练数据找到了通往正确答案的完整分解轨迹。相比之下,在没有优化的情况下,基准准确率仅为58%,这是一个显著的提升。
训练方法
我们的训练目标非常明确:让模型学会如何沿着正确的路径分解问题。
训练数据: 我们只使用那些成功找到答案的“分解轨迹”进行训练。每一条轨迹都包含 (原始问题, [(子问题1, 答案1), …], 最终答案) 这样的完整信息。
转换算法 (Algorithm 3): 我们设计了一套算法,能将一条分解轨迹高效地转换为多条训练数据。其核心思想是:
对于一个包含
t
个子问题的分解轨迹,我们可以生成t+1
个训练样本。- 前
t
个样本:训练模型在看到“原始问题”和“前i-1
个子问题与答案”后,准确地提出第i
个子问题。 - 最后 1 个样本:训练模型在看到所有子问题和答案后,判断出无需进一步分解。
- 前
技术细节:
- 训练框架: 我们采用监督式微调 (SFT) 来训练模型。
- 高效微调: 使用参数高效微调 (PEFT) 技术中的 LoRA 方法,学习率为
1.5e-5
。 - 硬件: 所有训练均在单张 NVIDIA A100-80G GPU 上完成。
- 可复现性: 为保证结果的稳定性,我们使用不同的随机种子重复实验三次,并报告平均值。
实验结果与分析
在实验中,我们设置了两类角色:
- 问题分解器 (Atomic Proposer): 使用三个不同参数规模的开源小模型进行微调,专门负责拆解问题。它们分别是:
- Llama-3.1-8B
- Qwen2.5-14B
- phi-4-14B
- 最终答案生成器 (Generation LLM): 在收集完所有子问题的答案后,使用两个顶尖的大模型来生成最终答案。它们是:
- GPT-4o
- Llama-3.1-70B-Instruct
表11: 领域知识微调对问题分解器性能的影响
- 行: 代表用作“问题分解器”的小模型。
- 列: 代表用作“最终答案生成器”的大模型。
+FT
表示其搭配的分解器是经过微调的。
问题分解器 (Decomposer) | GPT-4o | GPT-4o+FT (微调后) | Llama-3.1-70B | Llama-3.1-70B+FT (微调后) |
---|---|---|---|---|
Llama-3.1-8B | 47.83% | 62.14% | 48.37% | 58.70% |
Qwen2.5-14B | 56.52% | 63.95% | 57.61% | 63.04% |
phi-4-14B | 60.33% | 65.76% | 58.70% | 62.50% |
核心结论: 🚀
实验结果清晰地表明,对“问题分解器”进行领域知识微调,能够极大地提升整个问答系统的最终准确率。
例如,观察第一行数据:
- 当使用未经微调的 Llama-3.1-8B 进行问题分解,并由 GPT-4o 生成答案时,准确率为 47.83%。
- 而当我们换用经过微调的 Llama-3.1-8B 后,准确率飙升至 62.14%。
这一显著的性能提升在所有模型组合中都得到了验证,有力地证明了训练一个专业的、小型的“分解模型”是解决复杂问题的有效策略。
6.5 实战案例分析:我们的方法为什么更胜一筹?
本节通过三个真实的案例,深入剖析我们的“任务分解”方法与传统方法(如Self-Ask)的核心区别,并展示我们方法的优越性。
核心理念差异:
- 传统方法 (如 Self-Ask): 像一个执着的侦探,每次只提出一个它认为最可能的后续问题,然后沿着这条路走下去。这种方法的风险在于,一旦第一步走错,就很难回头,最终导致满盘皆输。
- 我们的方法: 像一个谨慎的策略师,会同时提出多个可能的后续问题,探索不同的信息路径。这种方法能有效避免因“自作聪明”或“表述差异”而导致的错误。
案例一:克服“指代不明”—— 当AI“自作聪明”时
场景 (图16): 用户提问关于一部不太出名的电影《What Women Love》。
遇到的问题:
由于存在一部更著名的电影《What Women Want》(《男人百分百》),AI模型倾向于“纠正”用户的提问,误以为用户想问的是后者。Self-Ask 的失误:
它只生成了那个错误的问题(关于《What Women Want》),并沿着这条错误的路径进行推理。尽管由于文本相似性,它可能碰巧检索到了正确的信息块,但因为它回答的是一个错误的问题,最终得出的结论也是错误的。我们的解决方案:
我们的方法会同时生成关于 《What Women Love》 和 《What Women Want》 两个实体的原子问题。通过检索两者的信息,系统可以在后续步骤中验证用户的真实意图,并选择正确的信息块,从而有效避免了因模型“自作聪明”而导致的错误。
一句话总结:通过生成多个候选问题,我们的方法能有效验证和澄清模糊的用户意图,避免在第一步就走错路。
案例二:弥合“问法与说法”的鸿沟
场景 (图17): 用户提问“奥斯卡·罗勒的母亲是谁?”
遇到的问题:
用户的“问法”和知识库中的“说法”不匹配。知识库中记录的是“奥斯卡·罗勒是B和C的儿子”,而不是直接说“B是奥斯卡·罗勒的母亲”。这种表述上的差异会导致检索失败。Self-Ask 的失误:
它直接提出了“奥斯卡·罗勒的母亲是谁?”这个问题。尽管问题本身完全正确,但由于其表述方式与知识库的存储格式不匹配,导致无法检索到任何有效信息,整个流程就此卡住。我们的解决方案:
我们的方法会生成多种不同问法的原子问题,例如:- “奥斯卡·罗勒的母亲是谁?” (这个可能会失败)
- “奥斯卡·罗勒的父母是谁?” (这个成功了!)
通过这种方式,我们大大增加了与知识库中多样化表述相匹配的概率。即使一个问法失败了,另一个问法也可能成功检索到目标信息。
一句话总结:通过生成多样化的查询,我们的方法能更好地适应知识库中不同的文本结构和表述方式,显著提高检索成功率。
案例三:在“信息过载”中保持专注并保留上下文
场景 (图18): 在一个包含多个人物信息的复杂文本块中,需要找出“厄尼·瓦兹”的相关信息。
遇到的问题:
检索到的文本块信息量很大,包含了多个同名或相关的人物,容易造成混淆。Self-Ask 的失误:
它虽然检索到了正确的文本块,但在从中提取信息时,被过多的上下文干扰,错误地识别了目标人物。更致命的是,它在提取了一个(错误的)中间答案后,就丢弃了原始的完整文本块,导致后续的推理完全建立在错误信息之上,无法纠正。我们的解决方案 (双重优势):
- 简化选择过程: 我们不让AI直接去“阅读理解”那段复杂的长文本,而是让它从我们预先生成的一系列“原子问题”(相当于内容摘要)中,选择一个最相关的。这就像把阅读理解题变成了选择题,大大降低了出错的概率。
- 保留完整上下文: 在选择了正确的原子问题后,我们并不会丢弃原始的文本块,而是将其完整保留,作为后续步骤的背景信息。这样既能通过原子问题快速定位核心信息,又能确保后续推理拥有最丰富、最准确的上下文。
一句话总结:我们的方法通过“选择题”式的原子问题简化了信息提取的难度,并通过保留完整上下文,确保了后续推理的准确性和信息完整性。
7 Conclusion
为了应对 RAG 系统在真实工业应用中遇到的各种挑战,我们认为,一个强大的 RAG 系统不应仅仅停留在“检索文档”的层面,而必须能够高效地构建和运用专业的知识与逻辑。
基于这一核心思想,我们的工作主要贡献了以下三点:
1. 提出了一套全新的“RAG能力分级”理论框架 🧠
我们不再将所有问题一视同仁,而是根据知识的提取、理解和运用难度,对任务进行了系统性的分类。这套新范式为如何设计、评测以及分阶段地升级 RAG 应用,提供了一份清晰的路线图。
2. 设计了一个名为“PIKERAG”的实战系统 🛠️
我们将上述理论付诸实践,推出了 PIKERAG
框架。它专注于深度提取专业知识和构建严密的逻辑链,能够高效地理解、组织知识,并为复杂问题提供精确的答案。同时,该系统还支持定制,以满足不同场景的需求。
3. 发明了两种解决复杂问题的核心技术 ✨
为了攻克像“多跳问题”(需要多步推理才能解答)这样的难题,我们具体提出了两种创新方法:
- 知识原子化 (Knowledge Atomizing)
- 知识感知的任务分解 (Knowledge-aware Task Decomposition)
实验证明,这两种技术在通用领域和高难度的法律领域基准测试中,都取得了显著的性能提升。
总而言之, 本研究不仅为 RAG 的发展提供了新的思考范式和系统框架,还通过具体的技术创新,有效解决了复杂问题中的核心痛点,推动 RAG 从简单的“检索工具”向真正的“知识推理引擎”迈进。