检索增强生成 (RAG)是一个含义丰富的术语。它向世界许诺,但在开发出 RAG
管道后,我们中的许多人仍然在疑惑,为什么它的效果不如我们预期的那样好。
与大多数工具一样,RAG 易于使用但难以掌握。事实是,RAG
不仅仅是将文档放入矢量数据库并在上面添加 LLM
。
这可以奏效,但并不总是如此。
本文中将介绍通常最简单、最快速地实施次优 RAG
管道的解决方案 — 我们将学习重新排序器。
回忆与上下文窗口
在开始讨论解决方案之前,我们先来谈谈这个问题。使用 RAG
,我们可以对许多文本文档执行语义搜索— 这些文档可能有数万个,甚至数百亿个。
为了确保大规模搜索时间短,我们通常使用向量搜索 - 也就是说,我们将文本转换为向量,将它们全部放入向量空间,然后使用相似度度量(如余弦相似度)比较它们与查询向量的接近度。
要使向量搜索发挥作用,我们需要向量。这些向量本质上是将一些文本背后的“含义”压缩为(通常)768 或 1536 维向量。由于我们将这些信息压缩为单个向量,因此会有一些信息丢失。
由于这种信息丢失,我们经常看到前三个(例如)向量搜索文档会丢失相关信息。不幸的是,检索可能会返回低于我们的top_k截止值的相关信息。
如果较低位置的相关信息可以帮助我们的 LLM
制定更好的响应,我们该怎么办?最简单的方法是增加我们返回的文档数量(增加top_k)并将它们全部传递给 LLM
。
我们在这里要衡量的指标是召回率— 即“我们检索了多少相关文档”。召回率不考虑检索到的文档总数 — 因此我们可以破解该指标,通过返回*所有内容来获得完美的召回率。
image-20240819180232398
不幸的是,我们无法返回所有内容。LLM 对我们可以传递给它们的文本量有限制——我们称此限制为上下文窗口。一些 LLM 具有巨大的上下文窗口,例如 Anthropic 的 Claude,其上下文窗口有 100K 个标记 [1]。这样,我们可以容纳数十页的文本——那么我们是否可以返回许多文档(不是全部)并“填充”上下文窗口以提高召回率?
再次强调,不行。我们不能使用上下文填充,因为这会降低 LLM 的召回性能——请注意,这是 LLM 召回,与我们迄今为止讨论的检索召回不同。
当将信息存储在上下文窗口的中间时,法学硕士回忆该信息的能力会变得比一开始没有提供该信息时更差
LLM 回忆能力是指 LLM 从其上下文窗口内的文本中查找信息的能力。研究表明,随着我们在上下文窗口中放入更多标记,LLM 回忆能力会下降 [2]。当我们填充上下文窗口时,LLM 也不太可能遵循指令 — 因此上下文填充不是一个好主意。
我们可以增加向量数据库返回的文档数量以提高检索召回率,但如果不损害 LLM 召回率,我们就无法将这些文档传递给我们的 LLM。
解决此问题的方法是通过检索大量文档来最大化检索召回率,然后通过最小化进入 LLM 的文档数量来最大化 LLM 召回率。为此,我们对检索到的文档进行重新排序,只保留与我们的 LLM 最相关的文档 — 为此,我们使用重新排序。
强大的重排器
Rerank
模型(也称为交叉编码器)是一种模型,给定查询和文档对,它将输出相似度分数。我们使用此分数根据与查询的相关性对文档进行重新排序。
两阶段检索系统。向量 DB 步骤通常包括双编码器或稀疏嵌入模型。
搜索引擎工程师早已在两阶段检索系统中使用重新排序器。在这些两阶段系统中,第一阶段模型(嵌入模型/检索器)从较大的数据集中检索一组相关文档。然后,使用第二阶段模型(重新排序器)对第一阶段模型检索到的文档进行重新排序。
我们使用两个阶段,因为从大型数据集中检索一小组文档比对大型文档进行重新排序要快得多 - 我们将很快讨论为什么会出现这种情况 - 但 TL;DR,重新排序器很慢,而检索器很快。
为什么要使用 Rerankers?
如果重新排序器的速度如此之慢,为什么还要使用它们呢?答案是重新排序器比嵌入模型准确得多。
双编码器准确率低的原因在于,双编码器必须将文档的所有可能含义压缩为一个向量,这意味着我们会丢失信息。此外,双编码器没有查询上下文,因为我们在收到查询之前并不知道查询内容(我们在用户查询之前创建嵌入)。
另一方面,重新排序器可以将原始信息直接接收到大型转换器计算中,这意味着信息损失更少。由于我们在用户查询时运行重新排序器,因此我们还有一个额外的好处,那就是分析文档针对用户查询的含义 — 而不是试图产生一个通用的平均含义。
重新排序器避免了双编码器的信息丢失——但它们有不同的惩罚——时间。
双编码器模型将文档或查询含义压缩为单个向量。请注意,双编码器处理我们的查询的方式与处理文档的方式相同,但在用户查询时进行。
双编码器模型将文档或查询含义压缩为单个向量。请注意,双编码器处理我们的查询的方式与处理文档的方式相同,但在用户查询时进行。
当使用带有向量搜索的双编码器模型时,我们会将所有繁重的变压器计算预先加载到创建初始向量时 - 这意味着当用户查询我们的系统时,我们已经创建了向量,因此我们需要做的就是:
- \1. 运行单个transformer计算以创建查询向量。
- \2. 用余弦相似度(或其他轻量级指标)将查询向量与文档向量进行比较。
使用重新排序器时,我们不会预先计算任何东西。相反,我们将查询和单个其他文档输入到转换器中,运行整个转换器推理步骤,并输出单个相似度分数。
重新排序器会考虑查询和文档,以在整个转换器推理步骤中产生单个相似度分数。请注意,此处的文档 A 相当于我们的查询。
重新排序器会考虑查询和文档,以在整个转换器推理步骤中产生单个相似度分数。请注意,此处的文档 A 相当于我们的查询。
给定 4000 万条记录,如果我们在 V100 GPU 上使用像 BERT 这样的小型重新排序模型,我们将等待 50 多个小时才能返回单个查询结果 [3]。使用编码器模型和向量搜索,我们可以在不到 100 毫秒的时间内完成相同的操作。
重新排序后,我们拥有了更多相关信息。这自然会显著提高 RAG 的性能。这意味着我们可以最大化相关信息,同时最大限度地减少 LLM 中的噪音输入。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。