本文正文字数约 4600 字,阅读时间 12 分钟。
什么是 RAG?
在以前的文章中,我对 RAG 技术的基础知识进行了详细的介绍,欢迎翻阅:一文读懂 RAG:它是如何重新定义 AI 的未来?
当然,本文依然会讲解一部分 RAG 的基础知识,让你能够对文章的上下文有个初步了解。
“检索增强生成” (Retrieval Augmented Generation),简称 RAG,这一概念首次出现在 2020 年 Meta 发布的一项学术研究中。
RAG 通过将大量外部数据与基础模型相结合,增强了 LLM 的能力,使 AI 的回应更加真实、个性化和可靠。
可以说 RAG 是一个旨在提高 LLM 性能的框架。短短三年内,RAG 在企业领域的 LLM 应用中取得了显著的增长。
本文将对 RAG 技术进行进一步的探索,同时会介绍几种更进阶的 RAG 技术。
RAG 的工作原理
查询
通过虚拟助手或者界面(也就是我们日常与 AI 对话的界面),将文本格式的问题发送到 RAG 流程中。
文档搜索 (即 Retrieval)
LLM 开始从外部资源中搜集相关信息。
这些资源可能包括数据库、文档,甚至是搜索引擎结果。
搜索过程是为了找到与输入相关的文本片段或文档。
增强 (Augmentation)
在搜索阶段获取到的信息会与原始的输入或者提示语结合,并通过提示工程技术将其转换为 LLM 可以理解和处理的格式,这样 LLM 可以生成更好的回答。
生成 (Generation)
LLM 会将接收到的信息和原始的输入(即提示语)一起评估来生成准确的输出文本。
具体来说就是,RAG 系统会结合用户的问题初始形式、从向量数据库获取的文档以及其他相关参数,确保 LLM 能够生成最准确和相关的答案。
回答
LLM 将生成的最终回答发送给用户。
RAG 在各种自然语言处理任务中都很有用,比如问答、对话生成、总结摘要等。
通过整合外部信息,RAG 可以提供比传统的模型更准确和信息丰富的回答,而传统模型仅依赖于其预训练数据。
RAG 与传统方法的区别
基于分类的传统模型
传统的自然语言模型通过输入查询,从预定义的响应集中选择一个适当的响应。
这些模型通过将输入文本(比如问题)与一组预定义的答案进行比较然后返回最合适的答案。
系统通过使用监督学习算法或其他语义匹配方法,测量输入和标记响应之间的相似性来确定最适合的响应。
对于问答这样的任务,使用这样的模型是没问题的,因为答案通常基于固定的回答类型,并且可以轻松地以结构化形式找到。
基于 RAG 的模型
与传统的模型不同,生成式 AI 是从头开始创建答案或内容,而不是匹配现有内容。
这些模型使用更复杂的算法,通常基于神经网络,来生成更接近真人表达的的文本或响应。
与我们习惯的方法不同,它们不需要将其与任何现有类关联,因为它们创建了新的内容。
这带来了无监督学习的所有优势和强项。
这些模型可以预测下一个单词或一系列单词来学习并生成新的并且是上下文相关的回答。
无监督学习是一种机器学习方法,与监督学习不同,它不依赖于标注数据(即带有明确标签的数据)。相反,无监督学习算法通过分析和寻找数据中的模式、结构或关系,自动从未标注的数据中学习。
RAG 的优势
RAG 在许多需要访问外部信息和当前数据的场景中具有显著优势。
上下文相关性
RAG 系统能够生成更具有上下文相关性和信息更加丰富的回答。
通过结合外部来源的信息创建的文本更能反映当前的实际情况,从而提供更准确的回答。
事实核查与验证
由于 RAG 系统从可靠的外部来源获取信息,它们可以在生成过程中进行事实核查与验证。这有助于减少错误或误导性信息的产生,并确保内容的准确性。
优化知识整合
RAG 系统能够有效利用外部知识库或文档来优化其回答。这在问答任务中特别有用,模型可以从广泛的资源中搜索相关信息,从而提供见多识广且准确的回答。
灵活性和适应性
通过从各种资源或者渠道获取信息,RAG 系统更具灵活性和适应性。
只要搜索机制设计得当,它们无需针对每个特定场景进行明确的微调,就能处理广泛的主题和任务。
处理分布外输入
分布外输入(Out-of-Distribution Input, OOD Input)通常是指在训练过程中未见过的、与训练数据分布不一致的数据。
传统文本生成模型在面对训练数据中不存在的分布外或不常见输入时可能会遇到困难。
RAG 系统则可以利用向量数据库中的文档堆栈,即使对于未见过或不常见的输入,也能找到相关信息。
控制内容生成
RAG 系统还可以用于控制内容的生成。通过引导文档搜索过程并指定来源,开发人员可以控制模型用来生成响应的信息类型和质量。
减少偏见
文档搜索机制可以帮助减少内容中的偏见。
通过结合多种信息来源,模型可以提供比传统模型更为平衡的回答,而传统模型可能会受到训练数据中存在的偏见影响。
尽管 RAG 具有显著优势,但也需要注意潜在的挑战和考虑因素,如处理不同来源的复杂信息以及平衡文档搜索结果的准确性和效率。
RAG 与其他生成式 AI 的不同之处
主要区别在于数据的存储和使用方式。
以使用公司数据为例。
当对模型进行微调时,是使用公司数据重新训练一个已知的 LLM,并更改模型配置来满足需求。
而 RAG 则是从外部存储的公司文档中检索数据,并将其提供给 LLM 来指导生成回答。
微调是一个耗时且昂贵的过程,并不适合处理频繁变更的公司文档。
RAG 实施挑战
尽管 RAG 非常强大,但在实施和管理方面也带来了一些挑战:
多渠道/来源整合
当有多个不同格式的外部数据源时,复杂性会增加。
为了克服这个问题,重要的是要对这些数据进行预处理或检查,以避免数据集之间的重复。
数据质量
数据应保持一致并能良好地传达信息。
如果数据本身的质量就不高,那么生成的回答也肯定是不准确的。因此,在整合数据源之前,需要确保高质量的数据。
可扩展性
随着数据量的增加,管理 RAG 系统的性能变得困难。为更容易地管理这一问题,应使用如向量数据库等解决方案。
向量数据库是一种专门存储和处理向量(高维数据)的数据库。它可以快速找到与某个向量最相似的其他向量,广泛用于人工智能、图像搜索、推荐系统等需要高效相似度搜索的场景。简单来说,它帮助我们快速找到“最相像的”数据。
搜索优化
为了使模型生成准确的输出,从向量数据库进行相似性搜索这一步必须具有高性能,而这也是第一步。
如果向量搜索的结果选择了缺失或者不正确的内容,那么,在下一步增强的时候,就无法将其转换为合适的、并且可以让 LLM 理解和处理的格式。
更复杂的 RAG 系统
文档分块 Document Chunking
在自然语言处理中,“分块”是指将文本分割成小的、简明的、有意义的部分。
RAG 系统可以在较小的文本片段中更快、更准确地找到相关上下文。
那么,如何确保选择正确的部分呢?分块策略的有效性在很大程度上取决于这些片段的质量和结构。
为了确定最佳块的大小,需要在捕获所有重要信息和保证处理速度之间取得平衡。
虽然较大的块可以捕获更多的上下文,但它们也会引入更多的噪音,并需要更多的时间和计算成本来处理。
较小的块噪音较少,但可能无法完全捕获所需的上下文。重叠部分是一种平衡这两种约束的方法。
噪音通常指那些与当前任务无关或不重要的信息,这些信息可能会干扰模型的理解和处理,导致生成的结果不准确或不相关。
通过重叠部分,一个查询很可能通过多个向量集检索到足够相关的数据来创建一个正确关联的答案。
其中的一个限制就是:这种策略假设所有需要的信息都可以在单一文档中找到。
如果所需的上下文分散在多个不同的文档中,可能需要考虑如文档层次结构和知识图谱等解决方案。
CRAG
CRAG,C 代表的是 “Check” 或 “Cross-Check”。
我们可以将 CRAG 视为验证或改进搜索结果,这是 RAG 工作流程中的第一步。
RAG 过程中的普遍问题是,在搜索阶段无法从文档堆栈中获得预期结果。
如果没有能够获得所需的最准确文档会导致发送给 LLM 的表达不完整,并在最后一步,即在 LLM 中误导语言模型。
如果一开始的搜索就有问题,那么在随后的步骤中,产生的结果的区别和偏差会更加明显。在这种情况下,检查搜索结果是否实际生成了正确的文档至关重要。
CRAG 就可以作为这类问题的解决方案。
通过为所有搜索结果定义阈值的上限和下限,将结果分类为“正确”、“错误”或者“不确定”。
如果至少一个文档与查询的接近度超过阈值,搜索过程被视为正确。
如果找到的所有文档的得分都低于下限阈值,则认为搜索过程不正确。
不确定状态涵盖介于上限阈值和下限阈值之间的其他情况。
对于假设搜索结果正确的文档,应用另一个分块,并通过清理包含噪音的文本和丰富内容来强化文档。
在结果不正确的情况下,使用内容和查询进行网络搜索,并从在线环境中获取更多详细信息,对分类错误的文档进行修正。
在不确定的情况下,同时重复并进行正确和错误的处理过程。
CRAG 确保只使用相关和可靠的信息,并将错误或误导性结果的风险降至最低,从而产生更准确和可靠的回答。
RAG 融合 RAG Fusion
在传统的搜索系统中,用户通常输入单个查询来查找信息。
尽管这种方法简单,但它存在一些限制。单个查询可能无法涵盖用户兴趣主题的全部范围,或者可能过于狭窄,无法产生全面的结果。
在这种情况下,从不同角度创建多个查询就显得尤为重要。
RAG Fusion 通过创建多个查询并重新排序结果来解决 RAG 的固有局限性。它可以弥补用户提出的问题与他们真正想问的问题之间的差距。
它通过大量的多样化的问题来提供对问题的最佳理解。简而言之,可以将 RAG Fusion 比作在做决定前坚持听取每个人意见的人。
RAG Fusion 利用互惠序列融合技术(RRF)来提供强大的支持。
互惠排名融合(Reciprocal Rank Fusion,RRF)是一种用于组合多个搜索结果列表的技术。它通过将不同搜索系统或算法产生的排名列表融合在一起,创建一个综合的排名列表,从而提供更可靠和优质的搜索结果。
可以想想那些我们不知道自己确实需要的信息,直到遇到它们。
通过使用更广泛的查询,系统可以发现那些尽管不是明确寻找的但却是很关键的信息。这使得 RAG Fusion 区别于其他传统的搜索模型。
不过,RAG Fusion 的深度有时会导致信息泛滥。
输出可能非常详细,以至于令人不知所措。可以将 RAG Fusion 比作一个过度解释事情的信息伴侣,可能会分散用户对于原始意图的注意力。
为了减轻这一问题,可以通过在请求工程中指示模型给予原始查询更多的权重来加以控制。
HyDE
HyDE 是一种在自然语言处理领域中使用的技术,其核心思想是通过生成临时的虚拟答案或文档来帮助理解和处理输入问题。
这个方法特别适用于那些问题描述不清晰、细节不足或缺乏明显可识别元素的情况。
比如,假设用户问了一个模糊的问题:“能拍出好照片的手机价格是多少?”
这句话虽然是在问价格,但是主体肯定是手机,HyDE 系统会生成一个虚拟文档,其中可能包含对于能够拍出好照片的手机的描述。
然后,系统利用这个虚拟文档在数据库中查找相关信息,最终返回一个更相关的回答。
然而,这种方法也有一个缺点:因为它并不总能给出好的结果。
如果讨论的话题完全超出语言模型的知识范围,这种方法就无效,甚至还有可能导致错误信息的增加。
层次索引 Hierarchical Indexing
层次索引(Hierarchical Indexing)是一种用于组织和管理文档或数据的结构化方法,通过将信息分层次进行分类来提高数据检索的效率和准确性。
这种方法特别适用于需要处理大量文档或复杂数据集的场景。
可以将文档层次结构视为 RAG 系统的目录。它以一种结构化的方式组织各个部分的内容,使 RAG 系统能够有效地检索和处理相关数据。
那么,如果 LLM 能够理解文档中的内容,我们为什么还需要文档层次结构?
上文提到:将文档层次结构视为目录或文件目录。尽管 LLM 可以从向量数据库中提取相关的文本片段,但使用文档层次结构作为预处理步骤来找到最相关的文本片段,可以提高搜索过程的速度和可靠性。
这种策略可以减少由于片段提取问题引起的幻觉。
LLM 的“幻觉”是指 LLM 在生成文本时,提供了看似合理但实际上错误、不准确或完全虚构的信息。这是当前自然语言处理技术中一个已知的问题。
总结
本文介绍了更高级的 RAG 架构,也详细介绍了更多的 RAG 技术,希望对你有所帮助。
RAG 技术依然还在快速发展中,也还存在诸多挑战。
前段时间微软发布了 GraphRAG 让 RAG 的应用延伸到了图领域。我相信,在今后 RAG 的应用将会越来越广泛,与 LLM 的结合越来越紧密,我们所使用的 AI 功能也肯定会更加强大。
来源:黄家润研究院