当前位置:   article > 正文

检索增强生成RAG范式概述

检索增强生成RAG范式概述

RAG是什么

        RAG---Retrieval-Augmented Generation是一种结合了信息检索和生成式模型的方法,旨在提高生成式模型在问答、摘要等任务中的表现。它通过在生成式模型中引入一个信息检索模块,可以在生成文本的过程中动态地检索外部知识/知识库,从而提高生成文本的质量和相关性。这种结合信息检索和生成的方法可以有效地利用外部知识来辅助生成模型,使得生成的文本更加准确和丰富。

        外部知识/知识库指代的范围是广义的,不仅仅是关系型或非关系型数据库,还可以是外部知识图谱,外部应用或者搜索引擎。

        2020 年Lewis等人,在知识密集型 NLP 任务中,提出了一种更灵活的技术,称为检索增强生成(RAG)[参考论文:https://arxiv.org/abs/2005.11401]。在本文中,研究人员将生成模型与检索器模块相结合,以提供来自外部知识源的附加信息,并且这些信息可以很方便的进行更新维护。

        简单来说,RAG 对于LLM来说就像学生的开卷考试一样。在开卷考试中,学生可以携带参考材料,例如课本或笔记,可以用来查找相关信息来回答问题。开卷考试背后的想法是,测试的重点是学生的推理能力,而不是他们记忆特定信息的能力。

        同样,事实知识与LLM的推理能力分离,并存储在外部知识源中,可以轻松访问和更新:

        「参数知识」:在训练期间学习到的知识,隐式存储在神经网络的权重中。

        「非参数知识」:存储在外部知识源中,例如向量数据库。

RAG出现的背景

        大语言模型LLM对于专有、快速更新的数据没有较好的解决方法,RAG可以弥合LLM常识和专有数据之间的差距。

        示例:

        LLM基于海量训练数据,将广泛的常识知识存储在神经网络的权重中。然而,当我们在提示大模型生成训练数据之外的知识时,例如最新知识、特定领域知识等,LLM的输出可能会导致事实不准确,这就是我们常说的模型幻觉。如下图所示:

图片

        传统的解决方法是通过微调神经网络模型来适应特定领域的专有信息。尽管这种技术很有效,但它属于计算密集型的,并且需要技术专业知识,使其难以灵活地适应不断变化的信息。

        LLM主要存在的问题:

        //易产生幻觉

        LLM底层的设计机制决定了它所生成的回答本质是基于概率的而非既定事实的,再加上LLM也缺乏自己校准自己生成内容的能力(这步工作往往是由人类来做),致使只要生成内容是符合它自己的语言逻辑的,就算内容与事实差了十万八千里,它也会毫不犹豫地输出,在人类看来就是一本正经地胡说八道。幻觉的问题不好从根源上去解决,因为这份概率性也是LLM得以展现出创新性的关键所在,但我们可以通过一些方法增加模型回答的准确性。

        //模型训练数据的新鲜度不足

        在使用chatgpt时它总会强调自己知道的知识范围只到2021年,这就使得LLM可以应用的场景大大减少。规模越大的模型,它的训练成本也更高,在成本有限的情况下我们无法无限制地使用最新的语料来更新大模型。

        //数据安全

        目前AI的隐私安全也是一个引起了广泛关注的话题,对于企业来说,是不可能把自己的私人企业数据上传到公网上的大模型的,但这样的话就无法借助大模型解决一些涉及企业数据的问题。

        以上这些问题中,数据安全可以通过私有化部署的方式解决,而解决第一和第二个问题的钥匙便是RAG技术。

RAG范式简易图示

形式(一)

如果说原本与大模型交互的方式是直接对LLM进行QA问答,那加入了RAG技术后我们其实是先在知识库中检索出了与问题相关的内容,然后将这些内容与问题一并提交给LLM,我们需要的是让LLM根据我们给出的内容来对问题做出回答,如下图所示。

形式(二) 

「检索(Retrive)」 根据用户请求从外部知识源检索相关上下文。为此,使用嵌入模型将用户查询嵌入到与向量数据库中的附加上下文相同的向量空间中。这允许执行相似性搜索,并返回矢量数据库中最接近的前 k 个数据对象。

「增强(Augment)」 用户查询和检索到的附加上下文被填充到提示模板中。

「生成(Generate)」 最后,检索增强提示被馈送到 LLM。

RAG详细架构

        RAG的架构如图中所示,简单来讲,RAG就是通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为“检索+生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和Prompt工程,将召回的知识合理利用,生成目标答案。

完整的RAG应用流程主要包含两个阶段:

        数据准备阶段:数据提取——>文本分割——>向量化(embedding)——>数据入库

        应用阶段:用户提问——>数据检索(召回)——>注入Prompt——>LLM生成答案

下面我们详细介绍一下各环节的技术细节和注意事项:

数据准备阶段:
        数据准备一般是一个离线的过程,主要是将私域数据向量化后构建索引并存入数据库的过程。主要包括:数据提取、文本分割、向量化、数据入库等环节。

数据提取:

        数据加载:包括多格式数据加载、不同数据源获取等,根据数据自身情况,将数据处理为同一个范式。

        数据处理:包括数据过滤、压缩、格式化等。

        元数据获取:提取数据中关键信息,例如文件名、Title、时间等 。

文本分割:

        文本分割主要考虑两个因素:1)embedding模型的Tokens限制情况;2)语义完整性对整体的检索效果的影响。一些常见的文本分割方式如下:

        句分割:以”句”的粒度进行切分,保留一个句子的完整语义。常见切分符包括:句号、感叹号、问号、换行符等。

        固定长度分割:根据embedding模型的token长度限制,将文本分割为固定长度(例如256/512个tokens),这种切分方式会损失很多语义信息,一般通过在头尾增加一定冗余量来缓解。

向量化(embedding):

        向量化是一个将文本数据转化为向量矩阵的过程,该过程会直接影响到后续检索的效果。目前常见的embedding模型如表中所示,这些embedding模型基本能满足大部分需求,但对于特殊场景(例如涉及一些罕见专有词或字等)或者想进一步优化效果,则可以选择开源Embedding模型微调或直接训练适合自己场景的Embedding模型。


数据入库:

        数据向量化后构建索引,并写入数据库的过程可以概述为数据入库过程,适用于RAG场景的数据库包括:FAISS、Chromadb、ES、milvus等。一般可以根据业务场景、硬件、性能需求等多因素综合考虑,选择合适的数据库。

应用阶段:
        在应用阶段,我们根据用户的提问,通过高效的检索方法,召回与提问最相关的知识,并融入Prompt;大模型参考当前提问和相关知识,生成相应的答案。关键环节包括:数据检索、注入Prompt等。

数据检索

        常见的数据检索方法包括:相似性检索、全文检索等,根据检索效果,一般可以选择多种检索方式融合,提升召回率。

        Prompt作为大模型的直接输入,是影响模型输出准确率的关键因素之一。在RAG场景中,Prompt一般包括任务描述、背景知识(检索得到)、任务指令(一般是用户提问)等,根据任务场景和大模型性能,也可以在Prompt中适当加入其他指令优化大模型的输出。一个简单知识问答场景的Prompt如下所示:

  1. 【任务描述】

  2. 假如你是一个专业的客服机器人,请参考【背景知识】,回

  3. 【背景知识】

  4. {content} // 数据检索得到的相关文本

  5. 【问题】

  6. 石头扫地机器人P10的续航时间是多久?

        Prompt的设计只有方法、没有语法,比较依赖于个人经验,在实际应用过程中,往往需要根据大模型的实际输出进行针对性的Prompt调优。

RAG中的搜索器

        RAG的一个核心便是搜索器,如果把RAG加成下的LLM问答看作是一场开卷考试,那构建更高效准确的搜索器决定了我们能给LLM的回答提供更优质的参考答案。

(一)主要的检索技术
//1.1 相似度检索

        相似度检索是使用各种不同的相似度算法(如欧氏距离、余弦等)进行数据检索的一种技术。

        在RAG流程中我们通过把问题Embedding为向量,去数据库中匹配与此问题相似度最高的几个内容片段。

//1.2 关键词检索

        传统的一种检索方式,RAG所使用的外挂数据库不只是狭义的数据库,搜索引擎也可以成为真实数据的一种来源,对于部分数据,使用关键词检索会高效快速得多。

//1.3 SQL检索

        对于企业来说,大部分私人数据的存储形式可能都是关系型数据库,因此SQL检索虽然方式比较基础,也是必不可少的一种检索形式。

(二)知识库索引技术
        检索的质量不仅取决于检索技术及其相关优化程序,还取决于数据库本身是否更便于精确检索出我们想要的内容。对于庞大的数据而言,创建索引是提高检索精准度与效率的重要工作。

//2.1 数据分块

        由于提交给LLM的问题是有长度限制的,因此当文本过长,或者检索内容仅有部分相关时,需要对文本进行分块。

//2.2 数据向量化

        数据的向量化是将文本、图片、音频、视频等转化为向量矩阵的过程,也就是对数据库数据进行Embedding,存入向量数据库。

整个RAG流程如下图所示。

RAG目前可能存在的问题

        1、依赖语义搜索。RAG的高效与准确取决于数据库语料的质量与索引方法,如果检索不到位或者没有高质量的知识文档,那RAG的优势是无法发挥出来的。

        2、上下文长度限制。LLM一次性输入的长度限制有时会让我们不得不截断一些语料,致使在一次问答中能为LLM提供的事实资料是有限的,这可能会影响到生成结果的质量。

        3、延迟问题。相比于通常的问答,RAG中存在着检索+组成prompt两个步骤,可能会造成一定的延迟,可能不适合依赖即时响应的场景。

实践案例

一文搞懂大模型RAG应用(附实践案例)

参考文章:

一文搞懂大模型RAG应用(附实践案例)_rag大模型-CSDN博客

一文搞懂大模型RAG应用(附实践案例)

AGI|一篇小白都能看懂的RAG入门介绍!_小白如何了解rag-CSDN博客

一文带你了解大模型的RAG(检索增强生成) | 概念理论介绍+ 代码实操(含源码)_大模型rag-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/830031
推荐阅读
相关标签
  

闽ICP备14008679号