检索增强生成(RAG)技术旨在通过引入外部知识来提升 LLMs 的性能,尤其是在知识密集型任务中。本文将深入探讨 RAG 技术,包括其基本原理、发展现状、面临的挑战,重点介绍一种名为 Corrective Retrieval Augmented Generation(CRAG)的创新方案。
一、RAG 技术概述
RAG 技术的核心思想是将信息检索与语言模型相结合。在传统的语言模型中,生成文本主要依赖于模型参数中存储的知识,但这些知识可能有限且过时。RAG 通过从外部知识语料库(如 Wikipedia 等)中检索与输入问题相关的文档,并将这些文档作为额外的输入提供给语言模型,从而增强模型的生成能力。
从框架结构来看,RAG 系统通常由两个主要组件构成:检索器(Retriever)和生成器(Generator)。检索器负责从庞大的知识语料库中查找与输入问题最相关的文档,而生成器则基于输入问题和检索到的文档生成最终的回答。这种架构使得语言模型能够利用外部知识,有效提高生成文本的准确性和信息量。在回答关于特定历史事件的问题时,检索器可以从历史文献数据库中检索相关资料,生成器根据这些资料生成详细且准确的回答,避免模型单纯基于自身参数生成可能不准确的内容。
RAG 技术在多种任务中都展现出了良好的效果,特别是在知识密集型任务方面。研究表明,通过引入 RAG,语言模型在问答任务、文档生成任务中的表现得到显著提升。在一些基准测试中,采用 RAG 技术的模型在准确率、事实性等指标上优于传统的语言模型。这使得 RAG 成为解决 LLMs 幻觉问题、提升其性能的重要手段,受到了学术界和工业界的广泛关注。
二、RAG 技术的发展现状
随着对 RAG 技术研究的不断深入,许多先进的方法在原始 RAG 的基础上得以发展。这些方法旨在进一步优化检索过程、提高知识利用效率以及增强模型的性能。
Self-RAG 是其中的一种代表性方法,它引入了一种选择机制,能够根据输入问题的特点决定是否进行检索,并通过引入批评模型来判断检索结果的质量,从而决定是否使用检索到的知识进行生成。这种方法在一定程度上提高了检索的针对性和有效性,减少了不必要的检索操作,提升了模型的整体性能。
SAIL 则通过在指令调整过程中,将检索到的文档插入到指令之前,使得模型在训练过程中更好地融合外部知识,从而在生成任务中能够更准确地利用这些知识。Toolformer 则通过预训练的方式,使模型学会调用如 Wikipedia 等 API,直接获取外部知识,进一步拓展了模型获取知识的途径。
在一些长文本生成任务中,为了更有效地利用外部知识,研究人员提出了主动检索增强生成的方法。这种方法能够根据生成内容的需求,主动预测何时以及需要检索何种知识,从而更灵活地利用外部知识,提高长文本生成的质量。这些先进的 RAG 方法在不同的任务和场景中都取得了一定的成果,推动了 RAG 技术的发展。
三、RAG 技术面临的挑战
尽管 RAG 技术取得了显著进展,但仍然面临着诸多挑战。其中最主要的问题是对检索结果的高度依赖。RAG 系统的性能在很大程度上取决于检索器返回的文档的相关性和准确性。如果检索到的文档与问题不相关或包含错误信息,生成器可能会生成不准确甚至错误的回答,这不仅无法解决 LLMs 的幻觉问题,反而可能加剧这些问题。在一些实际应用场景中,低质量的检索结果会导致模型生成的回答误导用户,降低了系统的可靠性。
此外,当前的 RAG 方法在处理检索结果时,往往将完整的文档作为参考知识,忽略了文档中可能存在的大量无关信息。这些无关信息不仅增加了模型处理的负担,还可能干扰模型对关键信息的提取,影响生成结果的质量。检索器从大规模语料库中检索到的文档可能包含许多与问题无关的背景信息、冗余内容等,这些信息在生成过程中可能会分散模型的注意力,导致生成的回答不够精准。
在实际应用中,RAG 系统还需要面对知识更新不及时的问题。由于知识语料库的更新速度往往跟不上现实世界的变化,检索到的知识可能已经过时,无法满足用户对最新信息的需求。在科技、金融等快速发展的领域,过时的知识可能导致模型生成的回答失去价值,甚至产生误导。
四、CRAG:纠正检索增强生成方案
为了解决 RAG 技术面临的挑战,研究人员提出了 Corrective Retrieval Augmented Generation(CRAG)方案。CRAG 的核心目标是提高生成过程的稳健性,通过设计一系列的纠正策略,优化检索结果的利用,从而提升模型生成高质量文本的能力。
(一)模型推理概述
CRAG 在推理过程中,首先通过一个轻量级的检索评估器对检索到的文档进行评估。这个评估器会根据文档与输入问题的相关性,为每个文档计算一个相关性分数,并将这个分数量化为三个置信度等级:正确(Correct)、错误(Incorrect)和模糊(Ambiguous)。根据不同的置信度等级,系统会触发相应的操作。
如果置信度等级为 “正确”,说明检索到的文档中包含与问题相关的可靠知识。此时,系统会对这些文档进行知识精炼操作,通过分解 – 过滤 – 重组的过程,提取出最关键的知识片段,去除噪声信息,提高知识的利用效率。如果评估器判断某个文档与问题高度相关,但文档中包含一些无关的背景介绍,知识精炼操作会将这些无关部分过滤掉,只保留与问题直接相关的核心内容。
当置信度等级为 “错误” 时,意味着检索到的文档与问题无关,不能为生成提供有用的信息。在这种情况下,CRAG 会放弃这些文档,转而通过大规模的网络搜索获取新的知识作为补充。利用 Google Search API 等工具,根据问题生成相应的搜索关键词,从互联网上获取相关的信息,并对这些信息进行筛选和处理,以确保获取到的知识能够准确回答问题。
对于 “模糊” 的情况,即评估器难以明确判断文档的相关性时,CRAG 会采取一种折中的策略,将经过精炼的内部知识和通过网络搜索获取的外部知识结合起来,共同为生成提供支持。这种策略能够在一定程度上平衡信息的准确性和完整性,增强系统的稳健性。
(二)检索评估器
检索评估器是 CRAG 的关键组件之一,它的准确性直接影响整个系统的性能。CRAG 采用 T5-large 预训练模型进行初始化,并在现有数据集上进行微调。以 PopQA 数据集为例,该数据集为每个问题提供了来自 Wikipedia 的黄金主题维基标题,CRAG 利用这些信息作为微调检索评估器的相关性信号。同时,从检索结果中随机采样与输入问题相似但不相关的样本作为负样本,用于训练评估器识别无关信息。
与其他方法相比,CRAG 的检索评估器具有显著的优势。与 Self-RAG 中使用的基于指令调整的 LLaMA-2(7B)批评模型相比,CRAG 的评估器参数规模更小(0.77B),计算成本更低,但在判断检索结果相关性方面却表现出色。实验表明,在 PopQA 数据集上,基于 T5 的检索评估器在判断检索结果质量的准确性上显著优于商业 LLM ChatGPT,这为 CRAG 能够准确评估检索结果奠定了坚实的基础。
(三)知识精炼
在知识精炼阶段,CRAG 采用了一种分解 – 然后 – 重组的算法。对于检索到的相关文档,首先将其分割成多个内部知识片段。如果文档较短,只有一两个句子,则将其视为一个单独的片段;对于较长的文档,则根据其长度将其分割成由几个句子组成的较小单元,每个单元被认为包含独立的信息。
之后,利用之前微调好的检索评估器对每个知识片段进行相关性评分,根据评分过滤掉不相关的知识片段,最后将相关的知识片段按顺序连接起来,形成精炼后的内部知识。这种方法能够有效地去除文档中的冗余信息,提高知识的质量和利用效率,使得生成器能够专注于关键信息,生成更准确、更有针对性的回答。
(四)网络搜索
当检索评估器判断检索结果为 “错误” 或存在不确定性时,CRAG 会借助大规模的网络搜索来获取补充知识。具体来说,CRAG 会使用 ChatGPT 将输入问题改写为包含关键词的搜索查询,模仿用户在搜索引擎中的日常使用方式。利用公共可访问的商业网络搜索 API(如 Google Search API)生成一系列 URL 链接,优先选择像 Wikipedia 这样权威、规范的网页,以减少搜索结果中可能存在的偏差和不可靠信息。
获取到网页内容后,CRAG 会采用与知识精炼阶段类似的方法,对网页内容进行处理,提取相关的知识段落作为外部知识。这种通过网络搜索获取补充知识的方式,充分利用了互联网知识的广泛性和动态性,弥补了静态有限语料库检索的不足,为模型提供了更丰富、更准确的知识来源。
五、CRAG 的实验验证
为了验证 CRAG 的有效性,研究人员进行了广泛的实验,涵盖了多个数据集和任务类型,旨在全面评估 CRAG 在不同场景下的性能表现。
(一)实验设置
实验选用了四个具有代表性的数据集:PopQA、Biography、PubHealth 和 Arc-Challenge。PopQA 是一个短文本生成任务数据集,主要测试模型对单个事实性知识实体的回答能力;Biography 用于长文本生成任务,要求模型生成关于特定实体的详细传记;PubHealth 是医疗保健领域的真假问题判断任务;Arc-Challenge 则是关于日常科学常识现象的选择题任务。
在评估指标方面,针对不同的数据集采用了相应的指标。对于 PopQA、PubHealth 和 Arc-Challenge 数据集,使用准确率(Accuracy)来衡量模型的性能;对于 Biography 数据集,采用 FactScore 来评估生成传记的质量,该指标能够更细致地评估长文本生成中的事实准确性。
实验设置了丰富的基线方法进行对比,包括无检索的方法,如多种公共 LLMs(LLaMA2-7B、13B,Alpaca-7B、13B 等)以及经过指令调整的模型;标准 RAG 方法,采用与 CRAG 相同检索器的公共指令调整 LLMs 进行评估;还有先进的 RAG 方法,如 SAIL、Self-RAG 等,以及使用私有数据训练的检索增强基线方法。
(二)实验结果与分析
实验结果显示,CRAG 在多个数据集上均取得了显著的性能提升。在基于 SelfRAG-LLaMA27b 的 PopQA 任务中,CRAG 的准确率比 RAG 提高了 7.0%;在 Biography 任务中,FactScore 提升了 14.9%;在 PubHealth 任务中,准确率提高了 36.6%;在 Arc-Challenge 任务中,准确率提高了 15.4%。与当前最先进的 Self-RAG 相比,基于 LLaMA2-hf-7b 的 Self-CRAG 在 PopQA 任务中准确率提升了 20.0%,在 Biography 任务中 FactScore 提升了 36.9% ,在 Arc-Challenge 任务中准确率提升了 4.0%。
这些结果充分证明了 CRAG 的有效性和适应性。CRAG 不仅能够显著提升标准 RAG 和 Self-RAG 的性能,而且在不同类型的生成任务中表现出了良好的通用性,无论是短文本生成还是长文本生成,以及封闭集任务,CRAG 都能发挥积极作用,提高模型的性能。
通过消融实验,研究人员进一步探究了 CRAG 中各个组件的作用。去除任何一个触发动作(Correct、Incorrect、Ambiguous)都会导致模型性能下降,这表明每个动作都对提高生成的稳健性有重要贡献。去除知识精炼、搜索查询改写和外部知识选择等关键知识利用操作中的任何一个,也会使系统性能降低,说明这些操作对于提高知识利用效率至关重要。
在检索评估器准确性的对比实验中,基于 T5 的检索评估器在所有设置下都显著优于 ChatGPT,这验证了 CRAG 中检索评估器的有效性,能够准确判断检索结果的质量。在对检索性能的鲁棒性实验中,当模拟低质量检索器时,Self-CRAG 的生成性能下降幅度比 Self-RAG 更小,表明 Self-CRAG 在增强对检索性能的鲁棒性方面具有优势。通过将 RAG 和 Self-RAG 补充相同的网络搜索知识进行对比,发现 CRAG 的自我纠正机制带来的性能提升显著优于单纯补充网络搜索知识,证明了 CRAG 自我纠正机制的重要性。
CRAG 作为一种创新的检索增强生成方案,针对 RAG 技术面临的挑战提出了有效的解决方案。通过引入轻量级的检索评估器、优化知识利用策略以及结合网络搜索拓展知识来源,CRAG 显著提高了生成的稳健性和知识利用效率,在多个实验任务中展现出了优异的性能。然而,CRAG 也存在一定的局限性,如在微调外部检索评估器时仍存在不可避免的依赖。未来的研究可以朝着消除这种外部依赖的方向进行,探索如何让 LLMs 自身具备更好的检索评估能力。