MultiHop-RAG:多跳查询的基准检索增强生成

【摘要】检索增强生成(RAG)通过检索相关知识来增强大语言模型(LLM),在减轻 LLM 幻觉和提高响应质量方面显示出巨大的潜力,从而促进 LLM 在实践中的广泛采用。然而,我们发现现有的 RAG 系统不足以回答多跳查询,这需要对多个支持证据进行检索和推理。此外,据我们所知,现有的 RAG 基准测试数据集还没有关注多跳查询。在本文中,我们开发了一个新颖的数据集 MultiHop-RAG,它由知识库、大量多跳查询、其真实答案以及相关的支持证据组成。我们详细介绍了构建数据集的过程,利用英语新闻文章数据集作为底层 RAG 知识库。我们在两个实验中展示了 MultiHop-RAG 的基准测试实用性。第一个实验比较了用于检索多跳查询证据的不同嵌入模型。在第二个实验中,我们检查了各种最先进的 LLM(包括 GPT-4、PaLM 和 Llama2-70B)在给定证据的情况下推理和回答多跳查询的能力。这两个实验都表明,现有的 RAG 方法在检索和回答多跳查询方面的表现并不令人满意。我们希望 MultiHop-RAG 能够成为社区开发有效 RAG 系统的宝贵资源,从而促进法学硕士在实践中得到更多采用。

原文:MultiHop-RAG: Benchmarking Retrieval-Augmented Generation for Multi-Hop Queries
地址:https://arxiv.org/abs/2401.15391v1
代码:https://github.com/yixuantt/MultiHop-RAG/
出版:未知
机构: Hong Kong University of Science and Technology

1 研究问题

本文研究的核心问题是: 如何针对需要检索和推理多个证据片段的多跳问题,构建一个检索增强生成(RAG)评测数据集。

在金融分析场景下,用户可能会提出类似"对比2023年三季报中谷歌、苹果和英伟达的毛利率,谁的最高?"这样的多跳问题。它需要从各公司财报中检索相关证据,并进行比较推理得出最终答案。现有的RAG评测数据集主要聚焦单跳问题,缺乏对多跳问题的系统研究。

本文研究问题的特点和现有方法面临的挑战主要体现在以下几个方面:

  • 多跳问题的答案分散在多个文档中,需要模型具备跨文档的检索和推理能力。这对文本匹配模型提出了更高要求。

  • 构建多跳问题的评测集需要更细粒度的证据标注,既要标明问题的最终答案,还要标明推理链上的关键证据片段。人工标注的成本较高。

  • 评测集要具有良好的问题类型覆盖性。基于对实际应用场景的观察,本文将多跳问题归纳为推理类、比较类、时序类和空问题类四种。

  • 评测集的知识库要与预训练语言模型的训练数据相区分,以测试模型在未见过的领域上的检索推理能力。

针对这些挑战,本文提出了一种基于GPT-4辅助构建的"MultiHop-RAG"数据集:

本文利用GPT-4强大的语言理解和生成能力,实现了MultiHop-RAG数据集的半自动化构建。具体而言,首先从一个新闻文章数据集出发,抽取每篇文章中的事实性句子作为原始证据。接着利用GPT-4改写每个证据,生成对应的声明,并识别出其中的核心实体和话题作为后续生成多跳问题的"桥接点"。然后再利用GPT-4围绕相同的桥接实体或话题,构造出推理类、比较类、时序类和空问题类四种多跳问题及其答案。最后,本文还设计了一套严格的人工检查和模型验证流程,以保证构建数据的质量。

与依赖纯人工方式构建的传统做法相比,本文方法在保证数据质量的同时大幅提升了标注效率。更重要的是,借助GPT-4的知识化生成能力,本文得以构建出难度更高、类型更丰富的多跳问题。MultiHop-RAG最终包含了2500余个多跳问题,其中88%的问题答案需要结合知识库中2-4个证据片段推理得出。在后续的评测实验中,无论是检索阶段还是答案生成阶段,现有的RAG模型在MultiHop-RAG上的表现都远低于单跳问题,充分说明了该数据集对RAG模型研究的推动作用。

2 研究方法

论文提出了一种新的数据集MultiHop-RAG,旨在评估能够从多个证据源检索和推理信息以回答多跳查询的检索增强生成(RAG)系统的性能。MultiHop-RAG包含一个知识库、大量多跳查询及其参考答案和相关证据。

2.1 MultiHop-RAG数据集构建

2.1.1 知识库构建

为了构建MultiHop-RAG的知识库,论文使用mediastack API下载了大量英文新闻文章,涵盖娱乐、商业、体育、技术、健康和科学等不同类别。为了模拟真实的RAG场景,论文选择了2023年9月26日至12月26日期间发布的新闻,这个时间范围超出了ChatGPT和LLaMA等广泛使用的语言模型的知识截止点。此外,论文只保留了token数大于等于1024的文章,每篇新闻都有标题、发布日期、作者、类别、URL和新闻来源等元数据。

2.1.2 数据生成流程

论文采用了一个广泛的流程来构建多样化的多跳查询集合,每个查询都需要从知识库中检索和推理多个文档。首先,论文使用训练好的语言模型从每篇新闻文章中提取事实性或观点性句子作为证据。然后,论文利用GPT-4对证据进行释义,称为"主张"(claim),并识别每个主张的主题(topic)和实体(entity)。这些主题和实体可以作为不同证据之间的桥梁,称为bridge-topic或bridge-entity。接下来,论文使用GPT-4根据具有相同bridge-topic或bridge-entity的主张集合来生成具体的多跳查询及其答案。最后,论文采取验证步骤以确保数据质量,包括人工抽检和使用GPT-4评估每个样本是否满足特定标准。

2.1.3 多跳查询类型

根据真实RAG系统中常见的查询类型,论文将多跳查询分为四类:

  1. 推理查询(Inference query):需要从证据集合中推理出答案。

  2. 比较查询(Comparison query):需要比较证据集合中的事实。

  3. 时序查询(Temporal query):需要分析检索到的证据块的时序信息。

  4. 空查询(Null query):答案无法从检索集合中得出。空查询用于评估语言模型在缺乏相关证据时是否会产生幻觉。

这四种查询类型代表了RAG系统在实践中经常遇到的场景。例如,在一个由财务报告组成的知识库中,分析师可能会询问"谷歌、苹果和英伟达中哪家公司在2023年第三季度报告中利润率最高?"(比较查询),或"苹果过去三年的销售趋势如何?"(时序查询)。

2.2 使用MultiHop-RAG进行评估

论文通过两个实验展示了如何使用MultiHop-RAG来评估RAG系统的检索和生成性能。实验使用基于LlamaIndex框架实现的RAG系统。

2.2.1 检索任务

第一个实验比较了不同嵌入模型在检索多跳查询相关证据方面的性能。实验将知识库中的文档划分为包含256个token的块,并使用嵌入模型将文本块转换为向量表示。对于每个查询,实验检索与查询嵌入具有最高余弦相似度的前K个块。实验测试了多种嵌入模型,包括OpenAI的ada-embeddings、voyage-02、llm-embedder等。实验使用平均精度(MAP@K)、平均倒数排名(MRR@K)和命中率(Hit@K)等指标评估检索性能。

2.2.2 生成任务

第二个实验评估了不同语言模型在给定检索证据的情况下回答多跳查询的能力。实验考虑了两种设置:1)使用表现最佳的检索模型检索前K个文本块;2)直接使用与每个查询相关的真实证据。后一种设置代表了语言模型生成能力的上限。实验评估了GPT-4、GPT-3.5、PaLM、Claude-2、Llama2-70B和Mixtral-8x7B等领先的语言模型。结果表明,当前的RAG系统在有效检索和回答多跳查询方面还有很大的改进空间。即使在提供真实证据的情况下,开源语言模型的生成准确率也不理想。相比之下,GPT-4展现出较强的推理能力,但仍有进一步提升的空间。

总的来说,MultiHop-RAG数据集提供了一个具有挑战性的基准,用于评估RAG系统从多个来源检索和推理信息以回答复杂查询的能力。论文详细介绍了数据集的构建过程,展示了如何使用该数据集来评估RAG系统的不同组件,为RAG研究社区提供了有价值的资源。

4 实验

4.1 实验场景介绍

该论文提出了一个新的多跳查询数据集MultiHop-RAG,用于基于检索的语言生成任务(Retrieval-augmented Generation, RAG)的评估。论文实验旨在展示MultiHop-RAG数据集在评估RAG系统的检索和生成能力方面的benchmarking作用。

4.2 实验设置

  • 实验使用论文提出的MultiHop-RAG数据集,该数据集包含一个知识库、大量多跳查询、相应的ground-truth答案以及支撑证据。

  • 实验使用LlamaIndex框架实现RAG系统。

  • 评估指标:
    • 检索任务使用MRR@K、MAP@K、Hits@K等指标

    • 生成任务使用Accuracy指标

  • 实验环境:未提及

4.3 实验结果

4.3.1 实验一、不同Embedding模型在多跳查询检索任务上的表现对比

目的: 评估不同Embedding模型在多跳查询检索任务上的表现。

涉及图表: 表5

实验细节概述:

  • 将MultiHop-RAG知识库中的文档分割成chunks,每个chunk包含256个token

  • 使用不同的Embedding模型将chunk转换为向量表示,存入向量数据库

  • 使用相同的Embedding模型将查询转换为向量,检索与查询向量余弦相似度最高的Top-K个chunk

  • 评估检索结果,NULL类型查询不包含在评估中

结果:

  • 现有的Embedding模型在检索多跳查询相关证据方面表现不佳,即使使用Reranker技术,Hits@10的最佳结果也只有0.7467

  • 实际RAG系统中,语言模型的上下文窗口通常有限制,因此检索的chunk数量受限,Hits@4只有0.6625,说明现有方法无法有效检索多跳查询的相关证据

4.3.2 实验二、不同语言模型在多跳查询生成任务上的表现对比

目的: 评估不同语言模型在多跳查询生成任务上的表现。

涉及图表: 表6,图3

实验细节概述:

  • 实验一:使用实验一中性能最佳的检索模型(voyage-02+bge-reranker-large)检索Top-K文本作为Language Model的输入

  • 实验二:直接使用每个查询对应的ground-truth evidence作为Language Model的输入,代表理想检索结果下的Language Model表现上限

  • 评估GPT-4、GPT-3.5、Claude-2、Google-PaLM等商业模型和Mixtral-8x7B、Llama-2-70B等开源模型

结果:

  • 使用检索文本作为输入时,最先进的GPT-4模型的准确率也只有0.56

  • 即使直接使用ground-truth evidence作为输入,GPT-4的准确率为0.89,其他模型更低,说明语言模型在多跳查询推理方面还有很大提升空间

  • 不同类型的多跳查询难度不同,Null Query较易判断,而Comparison Query和Temporal Query对语言模型推理能力要求更高

4 总结后记

本论文针对现有Retrieval-Augmented Generation (RAG)系统在回答多跳查询(Multi-hop query)方面表现不佳的问题,构建了一个新的数据集MultiHop-RAG。该数据集包含一个知识库、大量多跳查询及其标准答案和支撑证据。论文详细介绍了利用新闻文章数据构建数据集的过程,并通过两个实验展示了MultiHop-RAG在评测RAG系统性能方面的有用性。实验结果表明,现有RAG方法在检索和回答多跳查询方面表现欠佳。MultiHop-RAG有望成为社区开发有效RAG系统的宝贵资源。

疑惑和想法:

  1. 除了新闻文章,是否可以利用其他领域的文本来构建类似的多跳查询数据集?不同领域的数据在RAG任务难度上可能存在差异。

  2. 除了精确匹配和Reranker,是否存在其他更有效的多跳查询证据检索方法?如何利用查询分解、知识图谱等技术来提升检索性能?

  3. 论文目前只评测了生成准确性,是否可以引入其他指标如生成流畅性、多样性等,以更全面地评估RAG系统的生成能力?

可借鉴的方法点:

  1. 利用GPT-4等强大语言模型自动构建大规模、高质量的评测数据集的方法可推广到其他NLP任务。

  2. 多跳查询的定义和分类方法可用于指导其他涉及多文档推理的任务如多文档摘要、开放域问答等的研究。

  3. 实验中检索模型和生成模型分别评测的思路可用于论文的发现和评估,有利用解耦不同模块,定位RAG系统的优化方向。

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的基于Matlab的WSN多路由代码示例: ```matlab % 定义网络拓扑结构,连接矩阵表示节点之间的连通性 connectivity_matrix = [0 1 1 0 0 0; 1 0 1 1 1 0; 1 1 0 0 1 1; 0 1 0 0 1 0; 0 1 1 1 0 1; 0 0 1 0 1 0]; % 定义节点位置信息 node_positions = [0.2 0.5; 0.5 0.8; 0.8 0.8; 0.5 0.5; 0.8 0.2; 0.2 0.2]; % 定义传输距离阈值 threshold_distance = 0.3; % 定义源节点和目的节点 source_node = 1; destination_node = 6; % 使用Dijkstra算法计算最短路径 shortest_path = dijkstra(connectivity_matrix, source_node, destination_node); % 根据最短路径确定多路径 multihop_path = []; current_node = source_node; for i = 2:length(shortest_path) next_node = shortest_path(i); if norm(node_positions(current_node,:) - node_positions(next_node,:)) > threshold_distance % 如果两节点距离大于传输距离阈值,则需通过中间节点进行多 intermediate_node = find(connectivity_matrix(current_node,:) & connectivity_matrix(next_node,:)); multihop_path = [multihop_path intermediate_node]; end multihop_path = [multihop_path next_node]; current_node = next_node; end % 输出最终的多路径 if isempty(multihop_path) disp('No multihop path is required.'); else disp(['Multihop path is: ' num2str([source_node multihop_path destination_node])]); end ``` 该代码中使用了Dijkstra算法计算最短路径,并根据节点位置信息和传输距离阈值确定多路径。需要注意的是,这只是一个简单的示例代码,实际应用中可能需要考虑更多的因素,如能量消耗、网络拥塞等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值