RAG(检索增强生成)系统的问题及解决思路

引言

随着大型语言模型(LLM)的出现,人们对更好搜索能力的需求催生了新的搜索方法。虽然基于关键字的传统搜索方法和推荐系统在某种程度上是有效的,但 LLM 的出现将搜索能力提升到了一个新的水平。尽管这个话题相对较新,但已经有很多研究成果发表。在这篇文章中,我将尝试总结一些流行的技术,这些技术被用来提升检索增强生成(RAG)系统的性能和输出的相关性。

尽管我会尽量涵盖许多好的想法,但实际上还有更多方法可以用来提高 RAG 系统的质量,比如利用知识图谱来增强 RAG

RAG 存在的问题

RAG 的概念是由 Lewis 于 2020 年在这篇论文中提出的:https://arxiv.org/abs/2005.11401?trk=article-ssr-frontend-pulse_little-text-block。

他建议在知识密集型任务中,利用 LLM 从源文档中检索相关信息,并结合 LLM 理解这些信息的能力来生成搜索结果,这样做是非常有益的。

简单来说,RAG 系统的基本步骤包括:

  1. 用户查询信息;

  2. 系统搜索可能包含查询答案的文档并进行检索;

  3. 将检索到的文档作为上下文,与搜索查询一起输入 LLM;

  4. LLM 理解提示,吸收文档中的信息,并生成查询的答案。

这个概念解决了一些问题,否则在某些有限数据上训练的 LLM 可能会遇到困难。例如,如果查询中提到的信息是 LLM 从未接触过的,那么提示可能会导致错误的答案。LLM 可能没有查询所需的详细信息。此外,LLM 有时会生成不正确的信息(称为幻觉)。如果使用的 LLM 没有根据企业内部信息进行训练,那么针对企业特定问题的查询也可能导致错误答案。

幻觉和准确性问题

在研究 RAG 系统的初期,为了增强搜索结果,提出了一种解决方案,即使用额外的文档(例如特定于组织、特定于主题或仅使用最新信息)对 LLM 进行微调。这种技术被称为 fine-tuning 。然而,由于多种原因,这一想法很快失去了动力。使用额外文档来训练 LLM 的成本非常高,并不是每个组织都有资源和时间来管理额外的培训。即使组织有能力进行这样的培训,使用最新文档进行重新培训的需求也会变成一个重复的过程,组织将不得不参与不经济的持续 LLM 培训。

RAG 研究的重点是回答以下问题:

  1. 检索什么;

  2. 如何检索;

  3. 检索多少;

  4. 如何在检索之前存储这些数据;

  5. 如何将检索到的数据馈送到 LLM,包括馈送数据的顺序;

  6. 如何生成输出;

  7. 如何在最终选择显示答案之前对答案进行排序(如果答案有多个)。

最基本和最早的 RAG 框架专注于索引、检索和生成。索引涉及在输入 LLM 之前如何收集、清理、存储和准备数据。数据可以是多种格式,包括 doc、pdf、jpg、png、mp4 等。数据首先被转换为明文,然后文本被分成小块,比如几个单词、句子或段落,称为 chunks ,因此称为 process of chunking。这些块使用标准嵌入模型(embedding)转换为向量表示。最后,文本块和相关向量嵌入在向量数据库中作为键值对进行索引。

检索过程则是用户输入查询作为提示,并将查询转换为向量表示。通过相似度索引,系统识别与查询相似的文档的向量表示,并检索前 K 个文档。

查询和前 K 个文档被馈送到 LLM 系统,以生成查询的适当答案。根据模型的训练,RAG 系统将利用模型的参数记忆来生成答案,或者使用提供的文档来同化和生成答案。

然而,上述简单化的方法存在一些弱点。检索过程的精度可能较低,这意味着一些检索到的文档可能是错误的。系统可能无法识别所有相关文档,导致召回率低。 此外,RAG 系统需要访问最新的文档。如果文档数据库不是最新的,系统将无法给出最佳答案。在生成方面,系统可能会面临更多问题。可能会出现幻觉,如果没有足够的护栏,系统可能会生成不相关、有毒、有偏见或令人反感的内容,这可能会破坏目的。此外,在某些情况下,当检索到不相关的信息并将其提供给 LLM 时,系统可能会生成脱节、重复或不相关的答案。检索到的文档中的语气、时态和第一/第三人称写作风格的差异也会混淆 LLM,导致生成次优答案。

在一些简单的 RAG 系统中,输出可能过度依赖于增强的信息,可能只输出输入上下文的提取,而不是合成以获得更好的输出。此外,选择的前 K 个文档应该不超过上下文窗口的大小,否则可能会引入噪音并失去对相关信息的关注。在一篇论文中(https://arxiv.org/pdf/2310.05029),作者提出了一种减少上下文窗口但保持高生成有效性的方法。

在一种称为 MemWalker 的方法中,上下文窗口被转换为文档连接摘要节点的树。当 LLM 收到查询时,模型遍历树以识别对回答查询有用的相关摘要。一旦获得相关摘要,模型就会执行查询以生成答案。

最佳实践

为了设计最佳的 RAG 系统并获得最佳结果,以下实践将有所帮助。

改进索引:更好的文档分块可以提高索引的质量。将文档分解为合适大小的块将有助于识别正确的嵌入和索引。存在许多合适大小的分块策略。例如:

  1. 所有块都具有相同的大小,例如 100 个标记;

  2. 每个页面、段落或句子将是一个块;

  3. 混合和匹配,即包括各种大小。

尽管较小的块大小可能会提高检索的准确性,但转换为嵌入和存储的成本会迅速上升。优化分块以匹配 LLM 的功能也很重要。一些 LLM 有更长或更短的接触长度限制。RAG 任务的模式也会影响分块策略。如果 RAG 的目标是回答问题与搜索文档,则分块大小会有所不同。将元数据添加到数据中,比如日期、目的、作者、文档风格(报告、书籍、博客等)、原始语言等,将有助于提高查询的准确性。

搜索和检索:除了检索相似的向量之外,我们还可以使用关键字和其他元数据来检索文档,从而丰富馈送到 LLM 的文档上下文。传统的搜索方法也可以用来检索文档。语义搜索也可以用来增强搜索的有效性。当检索到多个文档时,需要使用一些排名机制,以便在生成之前只向系统提供前 K 个文档。此外,在某些情况下,从业者会使用搜索引擎(或其他类似的)系统来检索最新信息,以提供给 RAG 系统。

图数据库:为了检索正确的文档,并非所有从业者都喜欢使用向量搜索。一些从业者使用图数据库来查找与相关文档的关系。在图数据库中,文档及其关系被转换为节点和边。这种方法可以更快地检索并提高检索到的文档的相关性。

微调 LLM:在某些情况下,从业者通过微调相关信息的 LLM 来提高检索的有效性。例如,在医疗保健应用中,如果 LLM 被微调以理解医疗保健信息,然后用于生成答案,LLM 可以更好地理解提供的上下文,因为它已经针对相关信息进行了微调。

prompt 优化:许多用户输入的提示可能包含很多噪音,导致模型理解效率低下。可以使用一个小型 LLM 来清理和重写提示,以增强有效性。这种清理突出了查询的要点,消除了冗余,并压缩了提示的大小。一些从业者也通过使用提示摘要来完成提示清理。

RAG 融合:在一篇优秀的博客中,作者谈到了 RAG 融合(https://towardsdatascience.com/forget-rag-the-future-is-rag-fusion-1147298d8ad1),其中从原始提示生成多个提示。这些多个提示突出了焦点的不同视角,也增强了主查询的焦点区域,以丰富提示以获得更好的答案。对于多个查询,可以应用重新排名器来选择更好的查询。

查询路由:组织将其数据存储在多个数据库中。例如,向量数据库将包含向量化的数据。类似地,还有图形数据库和关系数据库,后者将包含结构化数据。最新和流数据可以收集在高质量的数据湖中。不同类型的数据,如文档、PDF、JPEG、MP4 等,存储在不同的数据库中。当 RAG 融合创建多个查询时,将查询路由到正确的数据源集以进行高效检索是从业者需要做的另一个步骤。

查询重写:用户通常不擅长编写好的、优化的查询。为什么不借助 LLM 重写查询以提高其质量,从而提升检索质量呢?

RAG 和 GAR(检索增强生成和生成增强检索):在一篇论文中(https://arxiv.org/pdf/2305.15294),作者提出了一种创新的方法,迭代增强查询并将其输入 RAG 系统以生成更好的答案,这反过来又用于创建更好的查询,增强查询用于生成更好的答案。

微调嵌入模型:使用基于相关数据进行微调的嵌入模型来生成提示和存储数据的嵌入,可以提高检索系统的有效性。例如,在单独根据维基百科数据训练的准系统 LLM 和根据医疗保健信息进行微调的相同模型之间,后者会创建更好的嵌入。

检索-读取 vs 检索-生成-再读取:在另一篇论文中(https://arxiv.org/pdf/2209.10063),作者建议对传统的 LLM 检索和阅读以生成答案的顺序进行改进。在他们的 GenRead 方法中,作者建议首先从检索到的文档中创建上下文,并提供清理后的上下文版本以生成答案。这减少了冗余和噪音。

假设文档嵌入:在论文中的另一种引人注目的方法中,作者主张创建一个假设文档,声称包含查询的答案。这个假设文档可能包含答案附近的信息,有时甚至可能有错误。然后这个文档被编码到嵌入向量中。在向量化文档数据库中搜索这个假设文档向量的邻域向量。检索到的向量被输入 LLM 以获得准确的答案。这种方法被称为假设文档检索。作者发现这种方法在各种任务和语言中显示出惊人的准确结果。

父文档检索器:在一个博客中,作者主张创建子文档(较大文档的较小块)并对其进行向量化。当子向量被检索时,相关的父文档被访问并馈送到 LLM 中以获得更好的查询响应。

摘要:一些从业者还建议在将文档输入系统之前使用摘要。例如,如果检索结果是多个文档,为了节省成本,可以将检索到的文档的摘要版本输入系统,以提供更好的上下文并减少幻觉的可能性。

“中间迷失”(Lost in the Middle)综合症:当 LLM 被输入更大的上下文窗口时,它们会表现出一种称为“迷失在中间”的行为,LLM 会更多地关注开始和结束时可用的信息,而中间部分则可能被忽视。为了避免 LIM 综合症,从业者可以在输入系统之前在几次迭代中重新排列数据。

多样性排名:文档将按照其内容多样性的顺序提供。文档越多样化,它们就越相互靠近,让 LLM 得到信息的分布。这种方法希望 LLM 生成一个更加平衡和多样化的答案,更接近查询的要求。这里有“中间迷失”(LIM)排名器和多样性排名器的实现。请查看 Cohere Re-ranker 的相关内容。此外,请查看关于检索器和重新排名器的精彩博客。

如何学习大模型 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 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值