通俗地说说RAG及其与大模型的结合

2024-12-02 07:24   中国香港  

RAG 全称 Retrieval-Augmented Generation,翻译成中文是检索增强生成。这一年多,在大模型应用领域,RAG频繁地出现。为什么它这么热?需要怎么理解看待RAG?

01

为什么需要RAG


虽然大模型有丰富的知识和理解生成能力,但它的信息量并不够,比如企业的私域信息,它并不知道,有些最新的信息出现在训练完成之后,它也不掌握。如果要针对这些信息提问,就需要把相关的信息也一并交给它,让它结合内容回答。有点命题作文的意思。

这里边有些场景比较简单,比如针对论文,可以把问题和论文一起送给大模型,然后大模型根据论文的内容,把问题的答案输出出来,比较完整。

但实际上,私域的信息量非常大,远超过一次能够提交给模型的内容,这时候,就需要一种技术,把跟问题相关的内容准确的提取出来,送给模型。可以说,内容提取的质量,直接决定大模型的回答质量。

02

向量搜索


向量搜索(Vector Search)也叫矢量搜索。它是用机器学习的方法来捕获非结构化数据(包括文本和图像)的含义和上下文,并将其转换为数字化表示形式向量搜索常用于语义搜索,通过利用相似最近邻 (ANN) 算法来找到相似数据。与传统的关键字搜索相比,向量搜索产生的结果相关度更高,执行速度也更快。

简单地说,向量搜索有两个关键动作,一个是向量化,就是把一段文本,或图形音频等,通过某种编码格式,变成一个矩阵,这个编码动作,叫Embedding(嵌入)。第二个是搜索,一般用相似最近邻(ANN)算法,来找到距离最近的结果。这个距离最近的结果,就是含义最相近的结果。向量搜索也叫语义搜索。

以上动作,理解过程并记住名字就可以了。为什么距离最近含义就相似,让数学家和算法专家去搞吧,一般人整不明白这个,知道怎么回事就行了。

注:Embedding非常复杂,它不是一个简单的算法,而是用专门的Embedding模型。

下图就是一个比较简单的过程。


03

基于向量搜索的RAG架构


以下是一个最简单的向量搜索RAG架构示意图:

该架构关键有两个:

  1. 预处理文档。将文档的文本抽取出来(最初的大模型只能处理文本,所以只抽文本),分段,然后针对每一段作embedding存入向量数据库。

  2. 查询时,先把问题作Embedding,然后在向量数据库里把和问题最相关的内容(一般取Top K)取出来,将这些内容和原始问题结合,生成新的Prompt送给大模型,由大模型生成答案。

下面这个图更详细,包括了搜索的结果和重新生成prompt的例子

RAG方案,解决了大模型数据不足的问题,而处理数据是个核心需求,所以,备受重视。

实际发展中,针对文档的处理一直在进化。最初的分段(chunks)简单粗暴,就是把文本按长度截取,有些带格式的文档,比如word,pdf,分栏的时候,直接物理抽取,有时候内容就不伦不类,当然,基于这样的分段,大模型的回答也会比较乱。后来,针对各种文档抽取,图形结合的能力不断进步,效果也进步迅速。

04

图搜索RAG


向量搜索的方法一直在进步,但问题也一直在。虽然向量搜索技术能找到相似度很好的,但它无法进一步地理解私有数据中各个有效信息的关系,从而构成自己的知识网络,因此难以提供综合性的见解,也无法全面理解多个私有文献甚至单个文档的全部内容,因此往往无法回答抽象或总结性问题,自然也无法给大模型提供足够好的信息。

当前解决这些问题的办法,是知识图谱。

知识图谱:是结构化的语义知识库,用于描述物理世界中的概念及其相互关系。

知识图谱通过对错综复杂的文档的数据进行有效的加工、处理、整合,转化为简单、清晰的“实体,关系,实体”的三元组,最后聚合大量知识,从而实现知识的快速响应和推理。

原理表达是这样的:

一个具体的例子:


知识图谱已经发展了一些年,如何用于RAG?
微软最近开源了一个新的基于知识图谱构建的 RAG 系统——GraphRAG。Graphrag 框架旨在利用大型语言模型从非结构化文本中提取结构化数据,进而构建具有标签的知识图谱,以支持数据集问题生成、摘要问答等多种应用场景。GraphRAG 的一大特色是利用图机器学习算法针对数据集进行语义聚合和层次化分析。(详见论文1)
它的主要过程是这样的:

相对向量搜索,它在分段后,加入了元素和关系的一系列处理,形成答案,这个答案,已经不是原始内容,而是经过图搜索以后总结内容。
基于图搜索的RAG架构与向量搜索非常相似,只是搜索过程变了一下。

目前看,基于图搜索的RAG有点火,但后续进展,还需要观察。

05

更复杂一点的RAG


上边是一些RAG的简单的原理性的图,比较简单直接。这种简单架构,称之为Naive RAG(朴素RAG,天真RAG?)。实际上,RAG针对不同问题,有不同的解决方案,有一些是复杂一些的,一般叫高级RAG(Advanced RAG),比如下边这个:

它把查询做了更复杂的路由处理,以期取得更好的效果。

下边这个,把向量搜索和图搜索结合在一起:

下图中间的Advaned RAG,进行了检索后处理。检索到相关上下文后,将其与查询有效集成至关重要。后检索过程中的主要方法包括 rerank chunks 和 context compressing。重新对检索到的信息进行排名,将最相关的内容重新定位到提示的边缘是一项关键策略。

RAG 的三种范式之间的比较。(左)Naive RAG 主要由三个部分组成:索引、检索和生成。(中)Advanced RAG 围绕 pre-retrieval 和 post-retrieval 提出了多种优化策略,其过程类似于 Naive RAG,仍然遵循链状结构。(右)模块化 RAG 继承并发展自以前的范式,总体上表现出更大的灵活性。(详见论文2)

07

总结


RAG解决了一个大模型无法实时获取外部数据的问题,是一个非常大的进步。

但RAG方案真的很好吗?我觉得不够好。
打个比方,这个外部查询数据再送给大模型的方法,有点类似于一个教授在写论文,但它依靠的输入是一个小学生查的资料,并且这个资料它还必须用。你说教授能写出好论文?

但当前也没有更好的方案来解决这个问题。所以,在没有更好的方案之前,它仍然是最好的。

END


参考:

论文1:https://arxiv.org/html/2404.16130v1

论文2:https://arxiv.org/html/2312.10997v5

AI与安全
理清逻辑,找到规律,看清趋势。作者前华为云高级安全专家,现为独立顾问。
 最新文章