引言
随着大型语言模型(LLM)的出现,人们对更好搜索能力的需求催生了新的搜索方法。虽然基于关键字的传统搜索方法和推荐系统在某种程度上是有效的,但 LLM 的出现将搜索能力提升到了一个新的水平。尽管这个话题相对较新,但已经有很多研究成果发表。在这篇文章中,我将尝试总结一些流行的技术,这些技术被用来提升检索增强生成(RAG)系统的性能和输出的相关性。
尽管我会尽量涵盖许多好的想法,但实际上还有更多方法可以用来提高 RAG 系统的质量,比如利用知识图谱来增强 RAG
RAG 存在的问题
RAG 的概念是由 Lewis 于 2020 年在这篇论文中提出的:arxiv.org/abs/2005.11…
他建议在知识密集型任务中,利用 LLM 从源文档中检索相关信息,并结合 LLM 理解这些信息的能力来生成搜索结果,这样做是非常有益的。
简单来说,RAG 系统的基本步骤包括:
- 用户查询信息;
- 系统搜索可能包含查询答案的文档并进行检索;
- 将检索到的文档作为上下文,与搜索查询一起输入 LLM;
- LLM 理解提示,吸收文档中的信息,并生成查询的答案。
这个概念解决了一些问题,否则在某些有限数据上训练的 LLM 可能会遇到困难。例如,如果查询中提到的信息是 LLM 从未接触过的,那么提示可能会导致错误的答案。LLM 可能没有查询所需的详细信息。此外,LLM 有时会生成不正确的信息(称为幻觉)。如果使用的 LLM 没有根据企业内部信息进行训练,那么针对企业特定问题的查询也可能导致错误答案。
幻觉和准确性问题
在研究 RAG 系统的初期,为了增强搜索结果,提出了一种解决方案,即使用额外的文档(例如特定于组织、特定于主题或仅使用最新信息)对 LLM 进行微调。这种技术被称为 fine-tuning 。然而,由于多种原因,这一想法很快失去了动力。使用额外文档来训练 LLM 的成本非常高,并不是每个组织都有资源和时间来管理额外的培训。即使组织有能力进行这样的培训,使用最新文档进行重新培训的需求也会变成一个重复的过程,组织将不得不参与不经济的持续 LLM 培训。
RAG 研究的重点是回答以下问题:
- 检索什么;
- 如何检索;
- 检索多少;
- 如何在检索之前存储这些数据;
- 如何将检索到的数据馈送到 LLM,包括馈送数据的顺序;
- 如何生成输出;
- 如何在最终选择显示答案之前对答案进行排序(如果答案有多个)。
最基本和最早的 RAG 框架专注于索引、检索和生成。索引涉及在输入 LLM 之前如何收集、清理、存储和准备数据。数据可以是多种格式,包括 doc、pdf、jpg、png、mp4 等。数据首先被转换为明文,然后文本被分成小块,比如几个单词、句子或段落,称为 chunks ,因此称为 process of chunking。这些块使用标准嵌入模型(embedding)转换为向量表示。最后,文本块和相关向量嵌入在向量数据库中作为键值对进行索引。
检索过程则是用户输入查询作为提示,并将查询转换为向量表示。通过相似度索引,系统识别与查询相似的文档的向量表示,并检索前 K 个文档。
查询和前 K 个文档被馈送到 LLM 系统,以生成查询的适当答案。根据模型的训练,RAG 系统将利用模型的参数记忆来生成答案,或者使用提供的文档来同化和生成答案。
然而,上述简单化的方法存在一些弱点。检索过程的精度可能较低,这意味着一些检索到的文档可能是错误的。系统可能无法识别所有相关文档,导致召回率低。 此外,RAG 系统需要访问最新的文档。如果文档数据库不是最新的,系统将无法给出最佳答案。在生成方面,系统可能会面临更多问题。可能会出现幻觉,如果没有足够的护栏,系统可能会生成不相关、有毒、有偏见或令人反感的内容,这可能会破坏目的。此外,在某些情况下,当检索到不相关的信息并将其提供给 LLM 时,系统可能会生成脱节、重复或不相关的答案。检索到的文档中的语气、时态和第一/第三人称写作风格的差异也会混淆 LLM,导致生成次优答案。
在一些简单的 RAG 系统中,输出可能过度依赖于增强的信息,可能只输出输入上下文的提取,而不是合成以获得更好的输出。此外,选择的前 K 个文档应该不超过上下文窗口的大小,否则可能会引入噪音并失去对相关信息的关注。
在一种称为 MemWalker 的方法中,上下文窗口被转换为文档连接摘要节点的树。当 LLM 收到查询时,模型遍历树以识别对回答查询有用的相关摘要。一旦获得相关摘要,模型就会执行查询以生成答案。
最佳实践
为了设计最佳的 RAG 系统并获得最佳结果,以下实践将有所帮助。
改进索引:更好的文档分块可以提高索引的质量。将文档分解为合适大小的块将有助于识别正确的嵌入和索引。存在许多合适大小的分块策略。例如:
- 所有块都具有相同的大小,例如 100 个标记;
- 每个页面、段落或句子将是一个块;
- 混合和匹配,即包括各种大小。
尽管较小的块大小可能会提高检索的准确性,但转换为嵌入和存储的成本会迅速上升。优化分块以匹配 LLM 的功能也很重要。一些 LLM 有更长或更短的接触长度限制。RAG 任务的模式也会影响分块策略。如果 RAG 的目标是回答问题与搜索文档,则分块大小会有所不同。将元数据添加到数据中,比如日期、目的、作者、文档风格(报告、书籍、博客等)、原始语言等,将有助于提高查询的准确性。
搜索和检索:除了检索相似的向量之外,我们还可以使用关键字和其他元数据来检索文档,从而丰富馈送到 LLM 的文档上下文。传统的搜索方法也可以用来检索文档。语义搜索也可以用来增强搜索的有效性。当检索到多个文档时,需要使用一些排名机制,以便在生成之前只向系统提供前 K 个文档。此外,在某些情况下,从业者会使用搜索引擎(或其他类似的)系统来检索最新信息,以提供给 RAG 系统。
图数据库:为了检索正确的文档,并非所有从业者都喜欢使用向量搜索。一些从业者使用图数据库来查找与相关文档的关系。在图数据库中,文档及其关系被转换为节点和边。这种方法可以更快地检索并提高检索到的文档的相关性。
微调 LLM:在某些情况下,从业者通过微调相关信息的 LLM 来提高检索的有效性。例如,在医疗保健应用中,如果 LLM 被微调以理解医疗保健信息,然后用于生成答案,LLM 可以更好地理解提供的上下文,因为它已经针对相关信息进行了微调。
prompt 优化:许多用户输入的提示可能包含很多噪音,导致模型理解效率低下。可以使用一个小型 LLM 来清理和重写提示,以增强有效性。这种清理突出了查询的要点,消除了冗余,并压缩了提示的大小。一些从业者也通过使用提示摘要来完成提示清理。
查询路由:组织将其数据存储在多个数据库中。例如,向量数据库将包含向量化的数据。类似地,还有图形数据库和关系数据库,后者将包含结构化数据。最新和流数据可以收集在高质量的数据湖中。不同类型的数据,如文档、PDF、JPEG、MP4 等,存储在不同的数据库中。当 RAG 融合创建多个查询时,将查询路由到正确的数据源集以进行高效检索是从业者需要做的另一个步骤。
查询重写:用户通常不擅长编写好的、优化的查询。为什么不借助 LLM 重写查询以提高其质量,从而提升检索质量呢?
RAG 和 GAR(检索增强生成和生成增强检索):RAG 系统以生成更好的答案,这反过来又用于创建更好的查询,增强查询用于生成更好的答案。
微调嵌入模型:使用基于相关数据进行微调的嵌入模型来生成提示和存储数据的嵌入,可以提高检索系统的有效性。例如,在单独根据维基百科数据训练的准系统 LLM 和根据医疗保健信息进行微调的相同模型之间,后者会创建更好的嵌入。
检索-读取 vs 检索-生成-再读取:LLM 检索和阅读以生成答案的顺序进行改进。在他们的 GenRead 方法中,作者建议首先从检索到的文档中创建上下文,并提供清理后的上下文版本以生成答案。这减少了冗余和噪音。
假设文档嵌入:在论文中的另一种引人注目的方法中,作者主张创建一个假设文档,声称包含查询的答案。这个假设文档可能包含答案附近的信息,有时甚至可能有错误。然后这个文档被编码到嵌入向量中。在向量化文档数据库中搜索这个假设文档向量的邻域向量。检索到的向量被输入 LLM 以获得准确的答案。这种方法被称为假设文档检索。作者发现这种方法在各种任务和语言中显示出惊人的准确结果。
父文档检索器:在一个博客中,作者主张创建子文档(较大文档的较小块)并对其进行向量化。当子向量被检索时,相关的父文档被访问并馈送到 LLM 中以获得更好的查询响应。
摘要:一些从业者还建议在将文档输入系统之前使用摘要。例如,如果检索结果是多个文档,为了节省成本,可以将检索到的文档的摘要版本输入系统,以提供更好的上下文并减少幻觉的可能性。
“中间迷失”(Lost in the Middle)综合症:当 LLM 被输入更大的上下文窗口时,它们会表现出一种称为“迷失在中间”的行为,LLM 会更多地关注开始和结束时可用的信息,而中间部分则可能被忽视。为了避免 LIM 综合症,从业者可以在输入系统之前在几次迭代中重新排列数据。
多样性排名:文档将按照其内容多样性的顺序提供。文档越多样化,它们就越相互靠近,让 LLM 得到信息的分布。这种方法希望 LLM 生成一个更加平衡和多样化的答案,更接近查询的要求。这里有“中间迷失”(LIM)排名器和多样性排名器的实现。请查看 Cohere Re-ranker 的相关内容。此外,请查看关于检索器和重新排名器的精彩博客。
如何系统的去学习AI大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
全套 《LLM大模型入门+进阶学习资源包》↓↓↓ 获取~