什么是RAG?大模型rag技术原理解析,零基础入门到精通,收藏这篇就够了

87 阅读8分钟

传统的语言模型,比如 GPT-3,虽然在生成文本方面表现出色,但它们有一个显著的局限性:它们依赖于预训练的参数,无法动态访问外部知识。这意味着这些模型在处理实时信息、领域特定知识或罕见实体时表现不佳。举个例子,在问答任务中,模型可能会生成不准确或过时的答案,因为它无法访问最新的数据。就像你问一个朋友“今天天气怎么样?”,但他只能告诉你去年的天气情况,显然这样的信息对你来说毫无用处。这种局限性在需要精确答案的场景中尤为明显。例如,在医疗领域,医生可能需要最新的研究数据来做出诊断,而传统的语言模型无法提供这些信息。

图片

什么是RAG**

什么是RAG: RAG(Retrieval Augmented Generation)检索增强生成,即大模型LLM在回答问题或生成文本时,会先从大量的文档中检索出相关信息,然后基于这些检索出的信息进行回答或生成文本,从而可以提高回答的质量,而不是任由LLM来发挥。RAG技术使得开发者没有必要为每个特定的任务重新训练整个大模型,只需要外挂上相关知识库就可以,即可为模型提供额外的信息输入,提高回答的准确性。

我们为什么需要RAG: 即使在LLM有较强的解决问题的能力,仍然需要RAG技术的配合,因为能够帮助解决LLM存在的以下几个问题。

(1)模型幻觉问题:LLM文本生成的底层原理是基于概率进行生成的,在没有已知事实作为支撑的情况下,不可避免的会出现一本正经的胡说八道的情况。而这种幻觉问题的区分是比较困难的,因为它要求使用者自身具备相应领域的知识。

(2)知识的局限性:模型自身的知识完全源于它的训练数据,而现有的主流大模型(ChatGPT、文心一言、通义千问…)的训练集基本都是构建于网络公开的数据,对于一些实时性的、非公开的或离线的数据是无法获取到的,这部分知识也就无从具备。

(3)数据安全问题:开源的大模型是没有企业内部数据和用户数据的,如果企业想在保证数据安全的前提下使用LLM,一种比较好的解决办法就是把数据放在本地,企业数据的业务计算全部放在本地完成。而在线的LLM只是完成一个归纳总结的作用。

如何实现RAG: 在实际应用时,我们常需要给定一系列文档,并使用RAG方法,让LLM针对这些文档进行检索与交互。RAG的实现主要包含以下几个步骤:

  • 数据准备阶段: 包括数据提取、分块(chunking)、向量化(embedding)、数据入库等环节。数据提取涉及将不同格式的数据(如PDF、Word、数据库等)处理为统一的格式。分块是将大文档分割成较小的、语义完整的单元,以便于后续处理和检索。
  • 检索阶段: 系统根据输入查询检索相关文档或信息。这个阶段依赖于搜索算法和索引方法来快速识别大量集合中最相关的数据。
  • 增强阶段: 将用户查询和检索到的额外上下文放入一个提示模板中,以增强提示。
  • 生成阶段: 使用大型语言模型来针对检索结果,生成对用户的回复。

走向多模态RAG

从RAG的应用可以看出,多数时候,我们需要把一些文档作为RAG的输入,用于检索和生成。而现实应用中,文档通常是以图文交错的形式存在的,比如网页、PDF、PPT文件等等。

通常的做法是,只保留文档中的文本信息。对于PDF文档,则进行OCR文字识别**,读取其中的文本。但这样会导致大量图片中至关重要的信息被丢失,以及很多结构化内容的错乱,比如标题、表格、页眉页脚等格式错乱。

改进的做法是,把所有模态信息都转换为纯文本,再进行RAG。我们可以使用多种计算机视觉模型,比如检测模型对文档结构进行识别,然后对文档中不同的模块,使用不同的“广义OCR模型”进行解析。比如对于文本段落,使用OCR模型进行文本识别;对于表格,可以用表格模型进行识别转换为Markdown或LaTeX文本;对于公式,则套用公式识别转换为LaTeX;对于图片,则可使用多模态大模型如GPT-4o进行文本解读(caption),保存为文本描述。有很多开源的工具可以完成这些事情,比如MinerU等。通过解析算法,多模态数据就被完全转换为纯文本的格式了,也就可以照葫芦画瓢套用纯文本的RAG方法了。

图片

图像来源: 张颖峰 | 所见即所得:多模态RAG正在向我们走来

我们注意到,使用上述的方法,信息不可避免会存在丢失,而且依赖过多的解析模型。而时间来到2024年,多模态大模型实现了爆发式的技术突破,高分辨率的视觉输入已经取得了巨大突破,使用单一的多模态大模型做广义OCR也变得非常容易。比如QWen2-VL以及InternVL-2等开源多模态大模型,在文档的广义OCR上都有非常好的效果。

图片

多模态大模型成功,让端到端(end-to-end)的算法已经成为了主流。原生多模态的RAG算法也成为了可能:既然多模态大模型有能力理解文本,那我们其实即无需再把图像转换为文本,而可以直接使用图像,提取embedding去做RAG。

图片

即从图(a)转变为图(b)的模式

DSE

arxiv.org/abs/2406.11…

图片

DSE,即Document Screenshot Embedding,是一个不使用广义OCR的多模态RAG方法,直接把原始文档的扫描图片,切片后,使用视觉语言模型的编码器编码。其对query和docunment使用了双编码的架构。验证了这一想法的可行性。

ColPali

arxiv.org/abs/2407.01…

图片

ColPali架构也是利用视觉语言模型来从文档页面的图像中产生高质量的上下文化嵌入。ColPali使用了延迟交互(late interaction)技术,大大提高了检索效率,同时在检索性能上超越了现有的文档检索系统,并且具有更快的处理速度和可端到端训练的特点。上图对比了传统的文档RAG与多模态RAG的区别。因为减少了广义OCR的解析过程,使得处理速度也有了质的提升。

图片

CoPali其实从名字上看,就知道灵感来源于两个工作,PaliGemma和CoBERT。PaliGemma 是 Google 开发的一款具有多模态功能的视觉语言模型,它结合了视觉模型 SigLIP** 和大型语言模型 Gemma。“Col” 则来自于ColBERT 的延迟交互编码器。ColPali 算是延迟交互编码器在多模态 RAG 检索的应用,并且极大提高了检索召回的精度。

延迟交互编码结合了双编码器和交叉编码器的优点。在这种架构中,query和文档被分别编码成独立的embedding集合,然后通过一个高效的交互机制来计算它们之间的相似度。

图片

延迟交互编码的核心思想是将查询和文档的编码过程分开,这样文档的编码可以离线完成,而查询的编码则在在线阶段进行。这种方法的优点是可以在查询时仅对查询进行编码,从而大大提高了处理速度。此外,由于文档的编码是预先完成的,可以将其存储在数据库中,这样就可以对更多的文档进行排序,从而提高查询的精度。

在延迟交互编码中,一个关键的计算是最大相似性(MaxSim**)函数,它计算每个查询Token向量与所有文档Token向量之间的相似度,并跟踪每个查询Token的最大得分。查询和文档的总相似度分数是这些最大余弦相似度分数的总和。这种方法允许模型在保持较高排序质量的同时,也具备较高的性能。

随着多模态大语言模型能力的增强,以它为基础的多模态RAG,也早已突破了传统的图像检索的应用方式,而是真正具备大规模非结构化多模态数据深度理解的能力,将会有更多toB的商业应用价值。