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:根据问题与语块之间的相似性找到相关语块。
Generation:LLM 根据检索到的上下文生成答案。
在检索之前,可以使用查询重写、路由和扩展等方法来调整问题和文档块之间的语义差异。 检索后,对检索到的文档语料进行重新排序可以避免 "迷失在中间 "现象,也可以对上下文进行过滤和压缩,以缩短窗口长度。
此外,还引入了模块化 RAG。在结构上,它更加自由灵活,引入了更多具体的功能模块,如查询搜索引擎和多答案融合。在技术上,它将检索与微调、强化学习和其他技术相结合。在流程上,RAG 模块经过设计和协调,形成了各种 RAG 模式。
下图显示了 RAG 相关术语及其参考文献。
04
RAG功能应用
05
RAG评估
06
RAG的未来
07
RAG实战
基本的 RAG 管道利用现有数据库增强了大型语言模型。在生成答案之前,查询首先会从数据库中检索相关上下文。
我们可以将文档分块成 64 个 token 的较小段落,每个段落有 2 个 token 重合。这些段落被编码成向量,并在向量数据库中编入索引。给定查询后,我们会搜索最相似的段落,将其打包成带问题的提示,并将其发送给语言模型以生成答案。
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 应用到自己的文档和用例中。欢迎大家试用!
点击上方小卡片关注我
添加个人微信,进专属粉丝群!