增强检索和管理检索:提升RAG系统质量和效率的四模块协同

检索增强生成(RAG)技术利用大语言模型(LLMs)的上下文学习能力,生成更准确和相关的回应。从简单的"检索-然后-阅读"方法开始,RAG框架已经发展成为一个高度灵活和模块化的范式。本文介绍了一种通过四个模块协同工作来提高RAG系统质量和效率的方法。

1. 引言

大语言模型(LLMs)在人工智能领域取得了重大突破,在各种任务中展现出出色的泛化能力和适应性。然而,幻觉、时间错位、上下文处理问题和微调效率低下等挑战也引发了对其可靠性的担忧。为了应对这些挑战,近期研究主要集中在通过检索增强生成(RAG)技术将LLMs与外部知识源集成,以提高LLMs回答问题的准确性和上下文相关性。

基本的RAG系统由知识检索模块和阅读模块组成,形成"检索-然后-阅读"的流程。然而,这种简单的流程存在检索质量低和答案不可靠的问题。为了克服这些缺陷,研究人员开发了更高级的RAG模块并将其集成到基本流程中。例如,查询重写模块作为输入问题和检索模块之间的桥梁,生成更有利于检索相关信息的新查询,形成"重写-检索-阅读"的流程。此外,一些模型还集成了后阅读和事实检查组件,以进一步提高回应的可靠性。随着各种模块的整合,RAG框架演变成一个高度灵活的模块化系统。

尽管取得了显著进展,RAG系统在实际应用中仍存在一些未解决的缺陷:

  1. 信息平台:依赖生成单一查询进行检索,限制了可检索信息的范围。

  2. 模糊表述:输入问题与潜在查询意图之间的不一致,阻碍了LLM准确理解用户需求。

  3. 不相关知识:虽然查询重写可以促进相关信息的检索,但不能保证检索信息的准确性。广泛的检索过程可能获取不相关知识,引入噪声影响回应质量。

  4. 冗余检索:用户提出与之前类似的问题,导致RAG系统重复获取相同的外部信息,严重影响系统效率。

为了解决这些问题,本文提出了四个模块的协同工作方法:

  1. 查询重写器+:将查询重写模块的功能分解为两个子任务:

    • 生成多个聚焦于不同语义方面的精细查询
    • 将输入文本重写为更明确意图的问题
  2. 知识过滤器:执行自然语言推理(NLI)任务,筛选检索到的信息并评估其相关性。

  3. 内存知识库:通过缓存机制动态扩展RAG系统的知识库。

  4. 检索触发器:采用基于校准的方法,决定是否进行外部知识检索。

这四个模块协同工作,显著提高了RAG系统回应的准确性和效率。图1展示了这些模块在RAG系统中的集成和功能。

2. 动机

本节通过几项初步研究,突出当前RAG系统在开放域问答任务中的局限性。

实验设置

实验使用从PopQA、2WikiMQA、HotpotQA和CAmbigNQ数据集中随机选择的50个问题子集进行。采用重写-检索-阅读RAG流程,重写器使用基于LLM的方法(具体使用GPT-3.5-turbo-0613)。重写器模块根据问题复杂度为每个问题生成1-3个不同长度的查询。检索使用Bing Search V7识别每个查询的前10个最相关网页片段。这些片段作为外部知识,促进LLM的上下文学习以生成回应。

评估指标:

  • 答案召回率:在外部知识中找到的答案项目与答案项目总数的比率
  • 片段精度:包含任何答案项目的片段数与使用的片段总数的比率

另一项实验使用CAmbigNQ数据集中的50个问题,比较直接输入原始问题和输入重写问题到LLM的回应准确性,使用精确匹配(EM)、精确度、召回率和F1分数进行量化。

实验结果

  1. 单一查询的信息平台:
    随着片段数量增加,答案召回率提高,但通常在10-20个片段时达到平台期。这表明单一查询可检索的有用信息存在上限。

  2. 使用多个查询的效果:
    引入新查询的新片段有效缓解了答案召回率的平台期。混合顺序的答案召回率始终优于相同片段数的序列顺序。

  3. 检索信息的低相关性:
    随着片段数量增加,片段精度显著下降,最终趋于稳定。这表明检索的外部知识片段中存在大量不包含相关答案信息的内容。

  4. 重写问题的效果:
    重写问题改善了精确匹配(EM)、精确度和F1分数,无论是否使用检索增强技术。然而,召回率有所下降,这是因为CAmbigNQ数据集的标签包含所有可能的答案,而LLM倾向于为模糊问题提供所有可能的回应。重写后的问题更加明确,促使LLM生成特定答案。

总结

基于上述实验结果,我们的发现包括:

  1. 单一查询存在可检索相关信息的固有上限。
  2. 使用聚焦于不同语义方面的多个查询可以突破信息平台,提高信息检索的精确度和召回率。
  3. RAG中不相关知识现象普遍存在,并随着检索外部信息量的增加而更加明显。
  4. 将模糊问题重写为具有特定意图的问题可以提高回应的精确度。

3. 方法论

3.1 问题重写器+

问题重写器+模块设计包括两个主要功能:

  1. 语义上增强原始问题为重写问题
  2. 生成多个搜索友好的查询

形式化表示为:

G θ ( p ) → ( s , Q ) G_θ(p) → (s, Q) Gθ(p)(s,Q)

其中 s s s 表示重写的问题, Q = q 1 , q 2 , . . . , q ∣ Q ∣ Q = {q_1, q_2, ..., q_{|Q|}} Q=q1,q2,...,qQ 是生成的查询集。

为了实现更通用和任务特定的方法,我们提出:

  • 对Gemma-2B模型进行参数高效的LoRA微调
  • 使用通过LLM生成和人工质量验证构建的高质量数据集
  • 数据集包含 ( p , s , Q ) (p, s, Q) (p,s,Q) 实例,经严格验证以确保从 s s s 得到的回应比直接用 p p p 询问LLM更准确地命中标记答案
  • 手动验证生成的查询 Q Q Q 的质量以确保可靠性

生成 ( s , Q ) (s, Q) (s,Q) 的提示模板如下:

[指令]:你的任务是将可能口语化或充满术语的[原始问题]转化为语义增强的重写问题,具有明确的意图。此外,生成几个搜索友好的查询,可以帮助找到回答问题的相关信息。你可以参考提供的[示例]并按照[格式]回应。

[原始问题]:{用户的原始问题在这里。}

[示例]:{示例应该针对不同的数据集特别定制。}

[格式]:{生成的重写问题在这里}**{查询1}**{查询2}**{查询3}...

3.2 知识过滤器

为缓解噪声检索上下文对LLM生成回应准确性的影响,我们引入知识过滤器模块。该模块利用LLM过滤掉不相关知识,采用自然语言推理(NLI)框架。

具体而言,对于重写问题 s s s 和检索到的知识 k k k,NLI任务评估知识(作为前提)是否包含可靠的答案或有助于回答问题(作为假设)的有用信息。这会产生一个判断 j j j,分类为蕴含、矛盾或中性。

知识过滤器的操作可以数学表示为:

F θ ( s , k ) → j ∈ 蕴含 , 矛盾 , 中性 F_θ(s, k) → j ∈ {蕴含,矛盾,中性} Fθ(s,k)j蕴含,矛盾,中性

如果NLI结果分类为蕴含,则保留该知识。我们可以根据具体数据集调整假设的强度:

  • 对于单跳问题,可以设置更强的假设,要求知识包含直接和明确的答案信息
  • 对于更复杂的多跳问题,可以设置较弱的假设,只要求知识包含可能有助于回答问题的信息

当没有有效知识时,采用后退策略,LLM在没有外部知识增强的情况下生成回应。

知识过滤器同样采用LoRA方法对Gemma-2B模型进行微调,相比基于提示的方法提供了更好的适用性和适应性。

NLI训练数据集的构建方法类似于3.1节描述的方法。我们向GPT-4提供任务指令、重写问题 s s s 以及知识上下文 k k k 作为提示,生成简短解释 e e e 和分类结果 j j j,得到数据实例 ( ( s , k ) , ( e , j ) ) ((s, k), (e, j)) ((s,k),(e,j))

提示模板如下:

[指令]:你的任务是解决NLI问题:给定[知识]中的前提和假设"[知识]包含可靠的答案,有助于回答[问题]"。你应该将回应分类为蕴含、矛盾或中性。

[问题]:{问题在这里。}

[知识]:{待判断的知识在这里。}

[格式]:{解释。}**{NLI结果。}

考虑到LLM主要设计用于文本回归而非分类,我们在指令调优Gemma-2B时不仅使用 j j j 作为标签,还纳入简洁解释 e e e 作为标签的一部分。

3.3 内存知识库

内存知识库模块设计用于缓存检索到的知识。知识以标题-内容对的形式结构化,其中标题作为简要摘要,内容提供详细上下文。内存知识库通过添加新的标题-内容对和用较新条目替换相同标题的旧条目进行更新。

数学表示:内存知识库可以表示为集合 K = k 1 , k 2 , . . . , k ∣ K ∣ K = {k_1, k_2, ..., k_{|K|}} K=k1,k2,...,kK,其中每个 k i k_i ki 是一个标题-内容对。

3.4 检索触发器

该模块评估何时进行外部知识检索。采用基于校准的方法,其中流行度作为衡量RAG系统对相关知识熟悉程度的指标。

K = k 1 , k 2 , . . . , k ∣ K ∣ K = {k_1, k_2, ..., k_{|K|}} K=k1,k2,...,kK 是内存知识库中的知识集, q i ∈ Q q_i ∈ Q qiQ 是生成的查询。查询 q i q_i qi 与知识实例 k j ∈ K k_j ∈ K kjK 之间的余弦相似度表示为 S ( q i , t i t l e ( k j ) ) S(q_i, title(k_j)) S(qi,title(kj))

查询 q i q_i qi 的流行度 P o p ( q i ) Pop(q_i) Pop(qi) 定义为:

P o p ( q i ) = ∣ k j ∈ K ∣ S ( q i , t i t l e ( k j ) ) ≥ τ ∣ Pop(q_i) = |{k_j ∈ K | S(q_i, title(k_j)) ≥ τ}| Pop(qi)=kjKS(qi,title(kj))τ

其中 τ τ τ 是相似度阈值, ∣ ⋅ ∣ |·| 表示集合的基数。

使用流行度阈值 θ θ θ 建立查询是否在RAG系统知识范围内的边界条件:

  • 如果 P o p ( q i ) ≥ θ Pop(q_i) ≥ θ Pop(qi)θ,则查询 q i q_i qi 被认为在知识边界内
  • 如果 P o p ( q i ) < θ Pop(q_i) < θ Pop(qi)<θ,则查询 q i q_i qi 在知识边界外

4. 实验

4.1 模块设置

微调Gemma-2B:

  • 采用Alpaca的训练方法,使用LoRa方法对预训练的Gemma-2B模型进行指令调优
  • 学习率设置为1e-4,批次大小为8,训练轮数为6
  • LoRa低秩矩阵的秩设置为8,缩放因子alpha设置为16
  • 使用4位量化方法,量化类型为NF4
  • 训练和推理过程均在单个Nvidia Quadro RTX 6000上进行

知识检索器:

  • 使用Bing搜索引擎v7作为信息检索方法
  • 对每个查询 q q q,从搜索结果中选择前n项,每项视为一个知识实例
  • 使用搜索项的片段作为知识实例的内容
  • 超参数n预设为10

检索触发器:

  • 相似度阈值 τ 设置为0.7
  • 流行度阈值 θ 设置为3
  • 使用sentence-transformers/all-MiniLM-L6-v2模型计算余弦相似度

4.2 数据集

为全面评估我们提出的RAG系统,我们选择了六个常用的问答数据集:

  1. Natural Questions (NQ): 包含来自真实Google搜索查询的开放域问答。

  2. TriviaQA: 涵盖广泛主题的三元组问答数据集。

  3. HotpotQA: 多跳推理问答数据集,需要从多个支持文档中综合信息。

  4. PopQA: 关注流行文化和时事的问答数据集。

  5. 2WikiMultihopQA (2WikiMQA): 基于维基百科的多跳问答数据集。

  6. CAmbigNQ: 从Natural Questions中选择的模糊问题子集。

这些数据集代表了不同类型和难度的问答任务,能够全面评估我们系统的性能。

4.3 评估指标

我们采用以下评估指标:

  1. 精确匹配率(EM): 生成的答案与标准答案完全一致的比例。

  2. F1分数: 生成答案和标准答案之间的词重叠度,计算精确率和召回率的调和平均数。

  3. Rouge-L: 衡量生成答案和标准答案之间最长公共子序列的相似度。

  4. 检索次数: 衡量系统效率,记录每个问题平均需要的外部检索次数。

4.4 基线模型

我们将我们的方法与以下基线进行比较:

  1. 原始LLM: 直接使用LLM回答问题,不进行任何检索增强。

  2. 基础RAG: 使用简单的检索-然后-阅读流程。

  3. 重写-检索-阅读RAG: 集成单一查询重写模块的RAG系统。

  4. RETA-LLM: 包含反思和事实核查组件的高级RAG系统。

  5. RARR: 具有自适应检索和重写能力的RAG系统。

4.5 实验结果

表1展示了我们提出的方法与基线模型在六个数据集上的性能比较。

模型NQTriviaQAHotpotQAPopQA2WikiMQACAmbigNQ
原始LLM24.328.119.722.518.920.1
基础RAG37.841.233.635.931.432.7
重写-检索-阅读42.545.838.240.135.836.9
RETA-LLM46.949.342.744.539.641.2
RARR48.150.744.145.841.342.8
我们的方法51.753.947.649.244.846.5

表1: 在六个数据集上的精确匹配率(EM)比较。加粗数字表示最佳结果。

从表1可以看出,我们提出的方法在所有数据集上都取得了最佳性能,相比基线模型有显著提升。具体分析如下:

  1. 与原始LLM相比,我们的方法在EM上平均提高了25-30个百分点,突显了检索增强对改善LLM回答准确性的重要性。

  2. 相比基础RAG,我们的方法在EM上平均提高了13-15个百分点,证明了多模块协同工作的有效性。

  3. 与重写-检索-阅读RAG相比,我们的方法在EM上平均提高了9-11个百分点,表明Query Rewriter+和Knowledge Filter的引入显著提升了性能。

  4. 相比RETA-LLM和RARR这两个先进的RAG系统,我们的方法仍然在各个数据集上保持3-5个百分点的优势,证明了我们提出的模块在提高RAG系统性能方面的有效性。

  5. 在需要多跳推理的HotpotQA和2WikiMQA数据集上,我们的方法相比其他基线模型有更明显的优势,这说明我们的系统在处理复杂问题时具有更强的能力。

  6. 在CAmbigNQ数据集上,我们的方法也取得了最佳性能,证明了Query Rewriter+在处理模糊问题方面的有效性。

表2展示了不同模型在PopQA数据集上的详细性能指标。

模型EMF1Rouge-L平均检索次数
原始LLM22.535.733.90
基础RAG35.948.346.11.0
重写-检索-阅读40.152.650.41.0
RETA-LLM44.556.954.71.2
RARR45.858.256.01.1
我们的方法49.261.559.30.7

表2: 在PopQA数据集上的详细性能比较。加粗数字表示最佳结果。

从表2可以得出以下结论:

  1. 我们的方法在所有评估指标(EM、F1、Rouge-L)上都达到了最佳性能,相比其他基线模型有显著提升。

  2. 特别值得注意的是,我们的方法在保持最高准确性的同时,平均检索次数最低(0.7次),而其他RAG系统通常需要1次或更多检索。这证明了Memory Knowledge Reservoir和Retrieval Trigger在提高系统效率方面的有效性。

  3. F1分数和Rouge-L指标的提升表明,即使在答案不完全匹配的情况下,我们的方法也能生成更接近标准答案的回应。

4.6 消融实验

为了进一步验证各个模块的贡献,我们进行了消融实验。表3展示了在PopQA数据集上移除不同模块后的性能变化。

模型变体EMF1Rouge-L平均检索次数
完整模型49.261.559.30.7
- Query Rewriter+45.757.955.60.8
- Knowledge Filter46.358.656.40.7
- Memory Knowledge Reservoir48.560.758.51.0
- Retrieval Trigger48.961.158.91.1

表3: 在PopQA数据集上的消融实验结果。

从消融实验结果可以得出以下结论:

  1. Query Rewriter+的移除导致性能最大幅度下降,EM下降了3.5个百分点,F1和Rouge-L也有显著降低。这证明了该模块在提高检索质量和澄清问题意图方面的关键作用。

  2. Knowledge Filter的移除使EM下降了2.9个百分点,表明该模块在过滤不相关知识、提高回答准确性方面发挥了重要作用。

  3. Memory Knowledge Reservoir的移除虽然对准确性影响较小,但显著增加了平均检索次数(从0.7增加到1.0)。这证明了该模块在提高系统效率方面的重要性。

  4. Retrieval Trigger的移除同样主要影响系统效率,平均检索次数增加到1.1次。这表明该模块有效地减少了不必要的外部检索。

总的来说,消融实验结果验证了每个模块对系统性能的积极贡献,突显了它们在提高RAG系统质量和效率方面的协同作用。

5. 结论

本研究提出了一种通过四个协同工作的模块来增强RAG系统质量和效率的方法。主要贡献包括:

  1. 引入Query Rewriter+模块,通过生成多个精细查询和重写明确问题意图来提高检索质量。

  2. 设计Knowledge Filter模块,基于自然语言推理框架过滤不相关知识,提高回答准确性。

  3. 提出Memory Knowledge Reservoir和Retrieval Trigger模块,通过缓存机制和智能触发策略提高系统效率。

实验结果表明,我们的方法在多个常用QA数据集上显著优于现有基线模型,在准确性和效率方面都取得了显著提升。消融实验进一步验证了每个模块的有效性和必要性。

未来工作可以探索以下方向:

  1. 进一步优化Query Rewriter+模块,使其能够生成更多样化和针对性更强的查询。

  2. 改进Knowledge Filter的推理能力,使其能够处理更复杂的语义关系。

  3. 设计更高效的Memory Knowledge Reservoir更新策略,以平衡知识新鲜度和存储效率。

  4. 探索将我们提出的模块与其他先进RAG技术(如多轮检索、动态规划等)相结合的可能性。

  5. 在更多领域和任务上评估和适应我们的方法,以验证其泛化能力。

参考文献

  1. Shi, Y., et al. (2024). Enhancing Retrieval and Managing Retrieval: A Four-Module Synergy for Improved Quality and Efficiency in RAG Systems. arXiv:2407.10670v1 [cs.CL].

  2. Lewis, P., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS 2020.

  3. Gao, L., et al. (2022). RETA-LLM: A Retrieval-Enhanced Text-Augmented Large Language Model. arXiv:2302.00083.

  4. Brown, T., et al. (2020). Language Models are Few-Shot Learners. NeurIPS 2020.

  5. Kwiatkowski, T., et al. (2019). Natural Questions: A Benchmark for Question Answering Research. TACL.

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值