检索增强生成(RAG)技术利用大语言模型(LLMs)的上下文学习能力,生成更准确和相关的回应。从简单的"检索-然后-阅读"方法开始,RAG框架已经发展成为一个高度灵活和模块化的范式。本文介绍了一种通过四个模块协同工作来提高RAG系统质量和效率的方法。
1. 引言
大语言模型(LLMs)在人工智能领域取得了重大突破,在各种任务中展现出出色的泛化能力和适应性。然而,幻觉、时间错位、上下文处理问题和微调效率低下等挑战也引发了对其可靠性的担忧。为了应对这些挑战,近期研究主要集中在通过检索增强生成(RAG)技术将LLMs与外部知识源集成,以提高LLMs回答问题的准确性和上下文相关性。
基本的RAG系统由知识检索模块和阅读模块组成,形成"检索-然后-阅读"的流程。然而,这种简单的流程存在检索质量低和答案不可靠的问题。为了克服这些缺陷,研究人员开发了更高级的RAG模块并将其集成到基本流程中。例如,查询重写模块作为输入问题和检索模块之间的桥梁,生成更有利于检索相关信息的新查询,形成"重写-检索-阅读"的流程。此外,一些模型还集成了后阅读和事实检查组件,以进一步提高回应的可靠性。随着各种模块的整合,RAG框架演变成一个高度灵活的模块化系统。
尽管取得了显著进展,RAG系统在实际应用中仍存在一些未解决的缺陷:
-
信息平台:依赖生成单一查询进行检索,限制了可检索信息的范围。
-
模糊表述:输入问题与潜在查询意图之间的不一致,阻碍了LLM准确理解用户需求。
-
不相关知识:虽然查询重写可以促进相关信息的检索,但不能保证检索信息的准确性。广泛的检索过程可能获取不相关知识,引入噪声影响回应质量。
-
冗余检索:用户提出与之前类似的问题,导致RAG系统重复获取相同的外部信息,严重影响系统效率。
为了解决这些问题,本文提出了四个模块的协同工作方法:
-
查询重写器+:将查询重写模块的功能分解为两个子任务:
- 生成多个聚焦于不同语义方面的精细查询
- 将输入文本重写为更明确意图的问题
-
知识过滤器:执行自然语言推理(NLI)任务,筛选检索到的信息并评估其相关性。
-
内存知识库:通过缓存机制动态扩展RAG系统的知识库。
-
检索触发器:采用基于校准的方法,决定是否进行外部知识检索。
这四个模块协同工作,显著提高了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分数进行量化。
实验结果
-
单一查询的信息平台:
随着片段数量增加,答案召回率提高,但通常在10-20个片段时达到平台期。这表明单一查询可检索的有用信息存在上限。 -
使用多个查询的效果:
引入新查询的新片段有效缓解了答案召回率的平台期。混合顺序的答案召回率始终优于相同片段数的序列顺序。 -
检索信息的低相关性:
随着片段数量增加,片段精度显著下降,最终趋于稳定。这表明检索的外部知识片段中存在大量不包含相关答案信息的内容。 -
重写问题的效果:
重写问题改善了精确匹配(EM)、精确度和F1分数,无论是否使用检索增强技术。然而,召回率有所下降,这是因为CAmbigNQ数据集的标签包含所有可能的答案,而LLM倾向于为模糊问题提供所有可能的回应。重写后的问题更加明确,促使LLM生成特定答案。
总结
基于上述实验结果,我们的发现包括:
- 单一查询存在可检索相关信息的固有上限。
- 使用聚焦于不同语义方面的多个查询可以突破信息平台,提高信息检索的精确度和召回率。
- RAG中不相关知识现象普遍存在,并随着检索外部信息量的增加而更加明显。
- 将模糊问题重写为具有特定意图的问题可以提高回应的精确度。
3. 方法论
3.1 问题重写器+
问题重写器+模块设计包括两个主要功能:
- 语义上增强原始问题为重写问题
- 生成多个搜索友好的查询
形式化表示为:
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,...,q∣Q∣ 是生成的查询集。
为了实现更通用和任务特定的方法,我们提出:
- 对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,...,k∣K∣,其中每个 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,...,k∣K∣ 是内存知识库中的知识集, q i ∈ Q q_i ∈ Q qi∈Q 是生成的查询。查询 q i q_i qi 与知识实例 k j ∈ K k_j ∈ K kj∈K 之间的余弦相似度表示为 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)=∣kj∈K∣S(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系统,我们选择了六个常用的问答数据集:
-
Natural Questions (NQ): 包含来自真实Google搜索查询的开放域问答。
-
TriviaQA: 涵盖广泛主题的三元组问答数据集。
-
HotpotQA: 多跳推理问答数据集,需要从多个支持文档中综合信息。
-
PopQA: 关注流行文化和时事的问答数据集。
-
2WikiMultihopQA (2WikiMQA): 基于维基百科的多跳问答数据集。
-
CAmbigNQ: 从Natural Questions中选择的模糊问题子集。
这些数据集代表了不同类型和难度的问答任务,能够全面评估我们系统的性能。
4.3 评估指标
我们采用以下评估指标:
-
精确匹配率(EM): 生成的答案与标准答案完全一致的比例。
-
F1分数: 生成答案和标准答案之间的词重叠度,计算精确率和召回率的调和平均数。
-
Rouge-L: 衡量生成答案和标准答案之间最长公共子序列的相似度。
-
检索次数: 衡量系统效率,记录每个问题平均需要的外部检索次数。
4.4 基线模型
我们将我们的方法与以下基线进行比较:
-
原始LLM: 直接使用LLM回答问题,不进行任何检索增强。
-
基础RAG: 使用简单的检索-然后-阅读流程。
-
重写-检索-阅读RAG: 集成单一查询重写模块的RAG系统。
-
RETA-LLM: 包含反思和事实核查组件的高级RAG系统。
-
RARR: 具有自适应检索和重写能力的RAG系统。
4.5 实验结果
表1展示了我们提出的方法与基线模型在六个数据集上的性能比较。
模型 | NQ | TriviaQA | HotpotQA | PopQA | 2WikiMQA | CAmbigNQ |
---|---|---|---|---|---|---|
原始LLM | 24.3 | 28.1 | 19.7 | 22.5 | 18.9 | 20.1 |
基础RAG | 37.8 | 41.2 | 33.6 | 35.9 | 31.4 | 32.7 |
重写-检索-阅读 | 42.5 | 45.8 | 38.2 | 40.1 | 35.8 | 36.9 |
RETA-LLM | 46.9 | 49.3 | 42.7 | 44.5 | 39.6 | 41.2 |
RARR | 48.1 | 50.7 | 44.1 | 45.8 | 41.3 | 42.8 |
我们的方法 | 51.7 | 53.9 | 47.6 | 49.2 | 44.8 | 46.5 |
表1: 在六个数据集上的精确匹配率(EM)比较。加粗数字表示最佳结果。
从表1可以看出,我们提出的方法在所有数据集上都取得了最佳性能,相比基线模型有显著提升。具体分析如下:
-
与原始LLM相比,我们的方法在EM上平均提高了25-30个百分点,突显了检索增强对改善LLM回答准确性的重要性。
-
相比基础RAG,我们的方法在EM上平均提高了13-15个百分点,证明了多模块协同工作的有效性。
-
与重写-检索-阅读RAG相比,我们的方法在EM上平均提高了9-11个百分点,表明Query Rewriter+和Knowledge Filter的引入显著提升了性能。
-
相比RETA-LLM和RARR这两个先进的RAG系统,我们的方法仍然在各个数据集上保持3-5个百分点的优势,证明了我们提出的模块在提高RAG系统性能方面的有效性。
-
在需要多跳推理的HotpotQA和2WikiMQA数据集上,我们的方法相比其他基线模型有更明显的优势,这说明我们的系统在处理复杂问题时具有更强的能力。
-
在CAmbigNQ数据集上,我们的方法也取得了最佳性能,证明了Query Rewriter+在处理模糊问题方面的有效性。
表2展示了不同模型在PopQA数据集上的详细性能指标。
模型 | EM | F1 | Rouge-L | 平均检索次数 |
---|---|---|---|---|
原始LLM | 22.5 | 35.7 | 33.9 | 0 |
基础RAG | 35.9 | 48.3 | 46.1 | 1.0 |
重写-检索-阅读 | 40.1 | 52.6 | 50.4 | 1.0 |
RETA-LLM | 44.5 | 56.9 | 54.7 | 1.2 |
RARR | 45.8 | 58.2 | 56.0 | 1.1 |
我们的方法 | 49.2 | 61.5 | 59.3 | 0.7 |
表2: 在PopQA数据集上的详细性能比较。加粗数字表示最佳结果。
从表2可以得出以下结论:
-
我们的方法在所有评估指标(EM、F1、Rouge-L)上都达到了最佳性能,相比其他基线模型有显著提升。
-
特别值得注意的是,我们的方法在保持最高准确性的同时,平均检索次数最低(0.7次),而其他RAG系统通常需要1次或更多检索。这证明了Memory Knowledge Reservoir和Retrieval Trigger在提高系统效率方面的有效性。
-
F1分数和Rouge-L指标的提升表明,即使在答案不完全匹配的情况下,我们的方法也能生成更接近标准答案的回应。
4.6 消融实验
为了进一步验证各个模块的贡献,我们进行了消融实验。表3展示了在PopQA数据集上移除不同模块后的性能变化。
模型变体 | EM | F1 | Rouge-L | 平均检索次数 |
---|---|---|---|---|
完整模型 | 49.2 | 61.5 | 59.3 | 0.7 |
- Query Rewriter+ | 45.7 | 57.9 | 55.6 | 0.8 |
- Knowledge Filter | 46.3 | 58.6 | 56.4 | 0.7 |
- Memory Knowledge Reservoir | 48.5 | 60.7 | 58.5 | 1.0 |
- Retrieval Trigger | 48.9 | 61.1 | 58.9 | 1.1 |
表3: 在PopQA数据集上的消融实验结果。
从消融实验结果可以得出以下结论:
-
Query Rewriter+的移除导致性能最大幅度下降,EM下降了3.5个百分点,F1和Rouge-L也有显著降低。这证明了该模块在提高检索质量和澄清问题意图方面的关键作用。
-
Knowledge Filter的移除使EM下降了2.9个百分点,表明该模块在过滤不相关知识、提高回答准确性方面发挥了重要作用。
-
Memory Knowledge Reservoir的移除虽然对准确性影响较小,但显著增加了平均检索次数(从0.7增加到1.0)。这证明了该模块在提高系统效率方面的重要性。
-
Retrieval Trigger的移除同样主要影响系统效率,平均检索次数增加到1.1次。这表明该模块有效地减少了不必要的外部检索。
总的来说,消融实验结果验证了每个模块对系统性能的积极贡献,突显了它们在提高RAG系统质量和效率方面的协同作用。
5. 结论
本研究提出了一种通过四个协同工作的模块来增强RAG系统质量和效率的方法。主要贡献包括:
-
引入Query Rewriter+模块,通过生成多个精细查询和重写明确问题意图来提高检索质量。
-
设计Knowledge Filter模块,基于自然语言推理框架过滤不相关知识,提高回答准确性。
-
提出Memory Knowledge Reservoir和Retrieval Trigger模块,通过缓存机制和智能触发策略提高系统效率。
实验结果表明,我们的方法在多个常用QA数据集上显著优于现有基线模型,在准确性和效率方面都取得了显著提升。消融实验进一步验证了每个模块的有效性和必要性。
未来工作可以探索以下方向:
-
进一步优化Query Rewriter+模块,使其能够生成更多样化和针对性更强的查询。
-
改进Knowledge Filter的推理能力,使其能够处理更复杂的语义关系。
-
设计更高效的Memory Knowledge Reservoir更新策略,以平衡知识新鲜度和存储效率。
-
探索将我们提出的模块与其他先进RAG技术(如多轮检索、动态规划等)相结合的可能性。
-
在更多领域和任务上评估和适应我们的方法,以验证其泛化能力。
参考文献
-
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].
-
Lewis, P., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS 2020.
-
Gao, L., et al. (2022). RETA-LLM: A Retrieval-Enhanced Text-Augmented Large Language Model. arXiv:2302.00083.
-
Brown, T., et al. (2020). Language Models are Few-Shot Learners. NeurIPS 2020.
-
Kwiatkowski, T., et al. (2019). Natural Questions: A Benchmark for Question Answering Research. TACL.