检索增强生成RAG技术入门介绍

文摘   科技   2024-08-07 06:46   江苏  
点击蓝字
 
关注我们










01


引言



今天,我将介绍检索增强生成(RAG),并演示一些应用。稍后,我们将进行一些应用 RAG 的动手实验。所有代码和数据都可以在文末GitHub 软件仓库中找到,您可以随时查看。

闲话少说,我们直接开始吧!








02


什么是RAG?


让我们先来了解一下 RAG。RAG 是一种增强大型语言模型的强大技术。在我看来,我们应该关注如何更好地应用大型语言模型,而 RAG 是最有效的方法之一,尤其是对开发人员而言。


大型语言模型有一些固有的局限性。由于缺乏外部知识,它们可能提供误导或幻觉信息。由于训练数据有截止日期,它们依赖的可能是过时的信息。例如,GPT-3 是在 2021 年之前训练的。在训练数据之外,他们对细分主题缺乏深度和针对性。训练和微调 LLM 的计算成本很高,对许多组织来说是不可行的。这些模型无法显示其知识来源,也无法在提供敏感数据时确保隐私合规。


RAG 可以大大提高生成内容的准确性和相关性。在生成文本之前,它首先会从外部数据库或文档中检索相关信息。


举个例子:假设有网友问:"OpenAI 的首席执行官山姆-奥特曼(Sam Altman)在短短三天内经历了董事会的突然解聘,又被公司重新聘用,在权力动态方面类似于现实版的《权力的游戏》,你如何评价?"


ChatGPT 无法准确回答这个问题,因为事件发生在 2021 年之后。有了 RAG,我们将首先检索相关文档,提取关键片段,如 "山姆-奥特曼重返 OpenAI 担任首席执行官,硅谷戏剧类似喜剧"、"戏剧结束了?山姆-奥特曼将重返 OpenAI 担任首席执行官,董事会将进行重组"、"OpenAI 的人事动荡告一段落,谁胜谁负?这三个片段将合并到提示词中,为问题提供上下文。然后,大语言模型可以根据检索到的信息生成一个连贯的答案。





03


 RAG时间轴和技术


和RAG相关的时间轴和技术可归纳总结如下:

回顾历史,RAG 起源于学术界,主要有三种方法:预训练、微调和推理检索。最近,更多实用技术侧重于推理时检索。此外,在 2022 年之前,几乎没有人提出 RAG 技术。然而,在 2023 年之后,我们可以看到各种 RAG 技术的蓬勃发展。


RAG 在生成响应之前,会首先从外部知识源检索相关信息,从而提高 LLM 输出的精确度和相关性。经典的基本 RAG 流程(也称为 Naive RAG)主要包括三个基本步骤。

  • Indexing文件被分割成较短的文本块,并使用编码器模型在矢量数据库中制作索引。

  • Retrieval根据问题与语块之间的相似性找到相关语块。

  • GenerationLLM 根据检索到的上下文生成答案。

高级 RAG 范式涉及检索前和检索后的额外处理优化:
  • 在检索之前,可以使用查询重写、路由和扩展等方法来调整问题和文档块之间的语义差异。
  • 检索后,对检索到的文档语料进行重新排序可以避免 "迷失在中间 "现象,也可以对上下文进行过滤和压缩,以缩短窗口长度。

此外,还引入了模块化 RAG。在结构上,它更加自由灵活,引入了更多具体的功能模块,如查询搜索引擎和多答案融合。在技术上,它将检索与微调、强化学习和其他技术相结合。在流程上,RAG 模块经过设计和协调,形成了各种 RAG 模式。

下图显示了 RAG 分流的详细信息,包括增强阶段(预训练、微调、推理)、增强来源(非结构化数据、结构化数据、LLM 生成的内容)、增强过程(一次检索、迭代检索、自适应检索、递归检索)。

下图显示了 RAG 相关术语及其参考文献。






04


  RAG功能应用


通过比较可以更好地了解 RAG。RAG 就像是给模型提供了一本定制化信息检索的教科书,非常适合特定的查询。让我打个比方来解释一下。RAG 给模型提供了一个外部知识源,就像给学生提供了一本开卷考试的教科书。然而,微调就像学生逐渐掌握适合特定任务的知识一样,随着时间的推移,学生正在将知识内化,更适合模仿特定的结构、风格或格式。
根据外部知识和模型定制的需要,RAG 和微调各有其适当的应用。同时使用这两种方法可以实现最佳性能。RAG 需要对模型进行少量调整,但需要大量外部知识;而微调则需要对模型进行大量调整,但需要的外部数据较少。在大多数情况下,将 RAG、微调和 Prompt Engineering 结合在一起可以获得最佳结果。





05


 RAG评估


在实施 RAG 后,全面的评估至关重要,它使用三个质量分数,如上下文相关性、答案保真度和答案相关性。评估涉及四个关键能力,即抗噪声能力、拒绝能力、信息整合能力和反事实分析能力。RGB 和 RECALL 等标准化基准以及 RAGAS、ARES 和 TruLens 等自动评估工具可用于评估 RAG 系统。





06


 RAG的未来


RAG 功能强大,但也面临一些挑战。如果上下文窗口较大,性能可能无法提高。很难保证检索的稳健性并过滤低质量内容。检索到的不正确内容可能会毒害最终答案。平衡 RAG 和微调可能会很棘手。目前还不清楚较大的模型是否总能提高 RAG。需要进一步探讨 LLM 的作用。大规模生产 RAG 和保护敏感数据也是值得关注的问题。将 RAG 扩展到处理图像、音频和视频仍然是一个有待解决的问题。
但是,RAG 在问题解答、推荐系统、信息提取和报告生成方面大有可为。成熟的 RAG 技术堆栈正在蓬勃发展,如 Langchain 和 LlamaIndex,市场上还出现了更多有针对性的 RAG 工具,如定制工具和简化工具。因此,生态系统将继续扩大,为 RAG 量身定制新的工具。





07


 RAG实战


到目前为止,我已经提供了 RAG 的高级概述。接下来,我将演示一些实际操作的 RAG 实验,以便您在自己的项目中应用这些技术。我有三个 Python 脚本,通过使用 LlamaIndex 来展示不同的 RAG 管道。


基本的 RAG 管道利用现有数据库增强了大型语言模型。在生成答案之前,查询首先会从数据库中检索相关上下文。

我们可以将文档分块成 64 个 token 的较小段落,每个段落有 2 个 token 重合。这些段落被编码成向量,并在向量数据库中编入索引。给定查询后,我们会搜索最相似的段落,将其打包成带问题的提示,并将其发送给语言模型以生成答案。



句子窗口检索管道在我们需要更多上下文时非常有用。我们将文档分割成句子,而不是标记块。我们检索最相似的句子以及上一个和下一个句子,形成一个上下文窗口。上下文窗口会重新排序并提供给语言模型。

自动生成的检索管道为检索创建了一个层次结构。16 个小标记段落链接成 64 个标记段落,64 个标记段落又链接成 256 个标记段落。如果有足够多的小段落链接到父段落,它们就会被合并到父段落中。最后的语块将被重新排序和检索。这样就可以动态调整上下文的大小。



08


 代码链接


上一小节实战的代码链接如下:

GitHub: https://github.com/HenryHengLUO/Retrieval-Augmented-Generation-Intro-Project

要使用该代码,首先要根据 python_env 文件夹下 NLP.yml 文件中提供的 yaml 文件创建 Python 虚拟环境。在 common 文件夹下的 openAI.env 文件中添加 OpenAI API 密钥。示例数据位于 data 文件夹下的 Henry.txt 文件中,但您也可以提供自己的文件。

基本管道将文档分块,在矢量数据库中建立索引,接受查询,检索类似段落,将它们打包成提示语,然后发送给语言模型。我们可以看到检索到的段落的原始出处。

句子-窗口管道在句子层面进行检索,用前两个句子和后一个句子扩展句子。通过重新排序来选择最相关的窗口。

自动生成管道建立了从 16 到 256 个词组的段落层次结构,并根据需要将段落合并为更大的片段。在保持精确度的同时,还能提供更长的语境。

代码设计为即插即用。配置好 API 密钥和虚拟环境后,您就可以将 RAG 应用到自己的文档和用例中。欢迎大家试用!





点击上方小卡片关注我




添加个人微信,进专属粉丝群!


AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章