一、RAG概念(/s/1VGNwvehUTCnYlVSTThOL1A 提取码: 3gec)
检索增强生成(Retrieval Augmented Generation),简称 RAG,已经成为当前最火热的LLM应用方案。
理解不难,就是通过自有垂域数据库检索相关信息,然后合并成为提示模板,给大模型生成漂亮的回答。
经历23年年初那一波大模型潮,想必大家对大模型的能力有了一定的了解,但是当我们将大模型应用于实际业务场景时会发现,通用的基础大模型基本无法满足我们的实际业务需求。
二、基础的 RAG 技术
RAG 系统的起点一般是一个文本文档的语料库,简单看起来是这样的: 把文本分割成块,然后把这些分块嵌入到向量与transformer编码器模型,把所有这些向量建立索引,最后创建一个 LLM 提示语,告诉模型回答用户的查询,给出在搜索步骤中找到的上下文。在运行时,我们用相同的编码器模型完成用户查询的向量化,然后执行这个查询向量的索引搜索,找到top-k 的结果,从数据库中检索到相应的文本块,并提供给 LLM 提示语Prompt作为上下文。
三、解RAG的检索、增强和生成
检索:检索是RAG流程的第一步,从预先建立的知识库中检索与问题相关的信息。这一步的目的是为后续的生成过程提供有用的上下文信息和知识支撑。
增强:RAG中增强是将检索到的信息用作生成模型(即大语言模型)的上下文输入,以增强模型对特定问题的理解和回答能力。这一步的目的是将外部知识融入生成过程中,使生成的文本内容更加丰富、准确和符合用户需求。通过增强步骤,LLM模型能够充分利用外部知识库中的信息。
生成:生成是RAG流程的最后一步。这一步的目的是结合LLM生成符合用户需求的回答。生成器会利用检索到的信息作为上下文输入,并结合大语言模型来生成文本内容。
四、在 RAG 常用的排序模型中,主要有 3 类架构:
双编码器(Dual Encoder)。以 BERT 模型为例,它针对查询和文档分别编码,最后再经过一个 Pooling 层,使得输出仅包含一个向量。在排序阶段,只需要计算两个向量相似度即可。由于双编码器针对查询和文档分别编码,因此无法捕获查询和文档的 Token 之间的复杂交互关系,在语义上会有很多损耗。
交叉编码器(Cross Encoder)。Cross-Encoder 使用单编码器模型来同时编码查询和文档,它能够捕捉查询和文档之间的复杂交互关系,因此能够提供更精准的搜索排序结果。Cross-Encoder 并不输出查询和文档的 Token 所对应的向量,而是再添加一个分类器直接输出查询和文档的相似度得分。它的缺点在于,由于需要在查询时对每个文档和查询共同编码,这使得排序的速度非常慢,因此 Cross-Encoder 只能用于最终结果的重排序。例如针对初筛结果的 Top 10 做重排序,仍然需要耗时秒级才可以完成。
延迟交互编码器(Late Interaction Encoder)。以 ColBERT 为例,相比于交叉编码器,ColBERT 仍采用双编码器策略,将查询和文档分别采用独立的编码器编码,因此查询的 Token 和文档的 Token 在编码时互不影响,这种分离使得文档编码可以离线处理,查询时仅针对 Query 编码,因此处理的速度大大高于交叉编码器,这样带来的好处就是延迟交互编码,可以放到数据库内部执行,不仅可以大大降低成本,更重要在于它可以针对更多的文档排序(例如 Top 100 甚至 Top 1000),从而大大提升最终的查询精度;相比于双编码器,ColBERT 输出的是多向量而非单向量,这是从 Transformer 的最后输出层直接获得的,而双编码器则通过一个 Pooling 层把多个向量转成一个向量输出,因此丢失了部分语义。
五、RAG的难点
1、数据难点:文档种类多
有doc、ppt、excel、pdf,pdf也有扫描版和文字版。
真正难处理的是ppt和pdf,ppt中包含大量架构图、流程图等图示,以及展示图片。pdf基本上也是这种情况。
抽取出来的文字信息,呈现碎片化、不完整的特点。
PPT的难点在于,如何对PPT中大量的流程图,架构图进行提取。因为这些图多以形状元素在PPT中呈现,如果光提取文字,大量潜藏的信息就完全丢失了。于是这里只能先将PPT转换成PDF形式,然后用上述处理PDF的方式来进行解析。
2、数据难点:不同文档结构影响,需要不同的切片方式
这个可是老大难问题了,不好的切片方式会造成:
如果切片太大,查询精准度会低
一段完整的话可能被切成好几块,每一段文本包含的语义信息实际上也是不够完整的
一些鸡肋切片,其实可以删掉
3、户提问的随意性 + 大众对RAG的定位混乱
大部分用户在提问时,写下的query是较为模糊笼统的,其实际的意图埋藏在了心里,而没有完整体现在query中。使得检索出来的文本段落并不能完全命中用户想要的内容,大模型根据这些文本段落也不能输出合适的答案。
同时,企业员工在使用RAG时,所发起的查询需求都是哪些,企业对RAG的定义也许是【信息抽取问答+数值计算问答+逻辑推理类问答+...】的一个“全家桶”,“狭义RAG方案”在“广义RAG需求”上往往是不匹配的,查询效果也达不到预期。
六、完整的RAG应用流程主要包含两个阶段
数据准备阶段:数据提取——>文本分割——>向量化(embedding)/分词处理——>数据入库(ES/Milvus)
应用阶段:用户提问——>数据检索(召回)——>注入Prompt——>LLM生成答案
LLAMA Index 给出的RAG应用流程
七、RAG 技术范式发展
RAG 的概念首次于 2020 年被提出,随后进入高速发展。RAG 技术的演进历程如图所示,相关研究进展可以明确地划分为数个关键阶段。
在早期的预训练阶段,研究的焦点集中在如何通过预训练模型注入额外的知识,以此增强语言模型的能力。
随着 ChatGPT 的面世,对于运用大型模型进行深层次上下文学习的兴趣激增,这推动了 RAG 技术在研究领域的快速发展。
随着 LLMs 的潜力被进一步开发,旨在提升模型的可控性并满足不断演变的需求,RAG 的研究逐渐聚焦于增强推理能力,并且也探索了在微调过程中的各种改进方法。
特别是随着 GPT-4 的发布,RAG 技术经历了一次深刻的变革。研究重点开始转移至一种新的融合 RAG 和微调策略的方法,并且持续关注对预训练方法的优化。
有疑问加站长微信联系(非本文作者)