检索增强生成(Retrieval Augmented Generation,简称RAG)
已成为一种流行的范式,它使大型语言模型(LLMs)能够访问外部数据,并作为一种机制来减轻幻觉现象。
实现RAG时,可能会面临有效集成检索模型、高效表示学习、数据多样性、计算效率优化、评估和文本生成质量等挑战。鉴于这些挑战,每天都会出现新的技术来改进RAG,使得为特定问题尝试所有组合变得不可行。
在这种情况下,本文提出了实现、优化和评估RAG的最佳实践,特别是针对巴西葡萄牙语,重点在于建立一个简单的推理和实验流程。
https://arxiv.org/pdf/2401.07883
步骤1:数据集准备
作者们选择了巴西葡萄牙语版本的《哈利·波特》第一本书作为数据集。选择这本书的原因是它广为人知,并且Gemini Pro
和OpenAI
模型都能够回答有关这本书的一般性问题。
-
数据集大小:使用标准的
ChatGPT
分词器cl100k_base,作者们观察到整本书大约有140,000个token,这使得可以创建包含整本书内容的提示。 -
数据集构建:基于上述数据集,作者们开发了一个包含问题和对应答案的数据集。问题和答案都是由gpt-4模型生成的,并且基于一个参考块(chunk)。
数据准备过程:如图1所示,数据准备过程包括以下步骤:
-
首先,将数据集分割成每个包含1000个token的块,没有重叠,总共得到140个块。
-
然后,使用附录A中描述的提示,为每个块创建了一个问题和答案对,风格类似于SQuAD数据集,这意味着问题的答案存在于参考文本(块)中。
步骤2:定义评价指标
传统评估指标如BLEU和ROUGE可能无法准确捕捉句子之间的相似性。例如,尽管两个句子在翻译成英文后表达相同的意思,但它们的BLEU和ROUGE得分可能很低。
为了解决这个问题,作者们采用了一种在文献中广泛使用的方法,即利用gpt-4根据给定的提示为文本提供评分。作者们设计了一个分为5个类别的评分系统,用于比较两段文本,每个类别都有相应的分数定义。
评分类别:
-
分数1:答案与参考无关。
-
分数3:答案有很少的相关性,但与参考不一致。
-
分数5:答案有中等相关性,但包含不准确之处。
-
分数7:答案与参考一致,但有小遗漏。
-
分数10:答案完全准确,与参考完全一致。
步骤3:初步实验(无背景信息)
作者们首先定义了一个基线,即在没有任何上下文的情况下,使用大型语言模型(LLMs)回答关于《哈利·波特》的问题。由于LLMs训练于包含几乎整个网络内容的大型数据集上,加之《哈利·波特》宇宙的普及,这为在OpenAI模型上测试独立问题提供了一个强有力的假设。
作者们观察到,对于基本问题,如“哈利·波特是谁?”、“谁杀了邓布利多?”以及“哈利·波特的主要朋友是谁?”,ChatGPT能够准确回答。然而,对于更详细的问题,性能仅是合理的。文中提供了两个详细问题的例子及其答案。
表2显示了不同模型的平均得分和与相对最大得分相比的退化百分比。所有模型的得分都低于相对最大得分,表明在没有检索到的上下文的情况下,模型的性能有所下降。
步骤4:长文本问答实验
与GPT 1和2模型相比,gpt-4-1106-preview模型能够处理高达128k的输入token,这在模型发展的四年内代表了大约128倍的输入容量增加。
作者们进行了类似于"Lost in The Middle"的分析,探索了在提示中改变答案位置时模型的输出。实验通过改变包含问题答案的块的深度(以上下文提示中token总数的百分比增量)来进行。
步骤5:朴素RAG
朴素的RAG方法使用llama-index,采用所有默认的超参数,并使用ADA-002嵌入通过余弦相似度进行块检索。图4展示了问题处理的基本流程:
-
步骤1:将查询传递给嵌入模型,将其语义表示为嵌入查询向量。
-
步骤2:将嵌入的查询向量传输到向量数据库或稀疏索引(BM25)。
-
步骤3:根据检索器算法获取前k个相关块。
-
步骤4:将查询文本和检索到的块转发到大型语言模型(LLM)。
-
步骤5:使用LLM根据检索内容填充的提示生成响应。
性能比较:
-
gpt-4模型的平均得分为6.04,与相对最大得分相比退化了20%。
-
gpt-4-1106-preview模型的平均得分为5.74,退化了21.6%。
-
gpt-3.5-turbo-1106模型的平均得分为5.80,退化了21.0%。
从表3可以看出,尽管朴素的RAG方法在没有检索上下文的情况下相比基线有所提高,但与相对最大得分相比仍有性能退化。这表明还有改进空间,尤其是在检索策略和模型集成方面。
实验中,答案深度的变化以10%的增量表示,从0%到100%,共11个变化。输入上下文的token数量在x轴上以每1,000个token为间隔变化,如图2所示。
从图2可以看出,随着输入长度的增加,得分显著下降。此外,图3显示,位于(40%, 80%)区间内的答案表现最差,这与"Lost In The Middle"文章中的记录一致。
步骤6:对比检索器
本节探索了RAG的多种检索方法,认识到检索器的质量是提高这类问题性能的关键因素。
在部署检索系统时,需要在“有效性”(返回的结果有多好?)和“效率”(返回结果需要多长时间?或在磁盘/RAM/GPU方面使用了多少资源?)之间取得平衡。
评估指标:召回率和倒数排名在特定截止点进行评估,表示为R@k和MRR@k。
检索器类别:
-
稀疏检索器:强调BM25,这是一种基于统计权重评估搜索词和文档之间相关性的技术。
-
密集检索器:通常基于双编码器(bi-encoder)设计,独立编码查询和文档,然后计算相似度。
-
混合搜索技术:利用稀疏和密集搜索方法的优势,生成两个候选文档列表,然后以最佳方式组合这两个结果。
-
多阶段搜索架构:基于检索和重排管道,第一阶段使用具有良好召回率的检索器进行初步筛选,然后在第二阶段使用更高计算复杂度的方法重新排序这些候选文档。
-
稀疏检索方法
表4展示了使用不同BM25包的比较,包括使用Pyserini和rank-bm25的结果,以及使用这些实现的增益百分比。这表明Pyserini的实现在召回率方面优于rank-bm25,尤其是在较低的召回率k值下。
- 定义化嵌入模型
嵌入定制对于提高表示的整体性能至关重要,且不仅适用于OpenAI的嵌入,也适用于其他同类嵌入。通过自定义ADA-002方法,作者们展示了如何通过微调过程来改善检索器的性能,特别是在准确性和表示质量方面。
- 多路召回
RRF是一个广泛使用的算法,用于解决结合不同方法搜索结果的问题。对于文档集D和来自不同方法r的搜索结果R,对于D中的每个文档d,可以按照公式(2)计算RRF得分。从表5可以看出,混合使用BM25和自定义ADA-002的组合在所有召回率指标上都优于单独使用BM25或ADA-002的组合。
- 重排序
多阶段排名将文档排名分为多个阶段。初始检索通常涉及稀疏检索器或密集检索器,每个后续阶段重新评估并重新排列从前一阶段转发的候选集。
- 检索结果
表6展示了不同检索器的性能比较,包括ADA-002、自定义ADA-002、混合BM25-ADA-002、混合BM25-自定义ADA-002、BM25以及BM25加重排器。
步骤7:输入大小与性能
尽管在表6中对9个块实现了完美的召回率,并且使用了9000个token的输入,比最佳情况(3个块)多6000个token,但并未达到最佳性能。这与第4.2节中讨论的RAG质量直接与输入大小和答案所在位置有关的观点一致。
如何学习大模型 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 的正确特征了。