一、RAG是什么?
Retrieval Augmented Generation(增强检索生成), 首先让我们忘记Retrieval Augmented, 先只谈一下Generation的部分,在RAG中,通常指的是Large Language Model(LLM),它生成文字以回复用户的问题,最有名的LLM是ChatGPT。而这些LLM 都是生成式AI的一种形式。
1、GPT能满足所有场景需求吗?
在我们使用chatGPT或者其他大模型的过程中 我相信很多朋友都会遇到类似的问题,比如:
a.有些回答它会凭空捏造
b.有些特定问题不符合基本逻辑
c.回答的依据,来源 根本不存在
d.对于近期的知识或者新闻完全不了解,导致回答的答案时过时的或者完全错误的
2、是什么造成了以上问题呢?
对于没有持续学习能力的LLM来说,模型在训练后,它的知识就冻结了,但是输入的问题的知识来源时序确实不断变化的,如果模型不能够适应这种变化,就会不断的出现问题,对于专业的人员能够很好的理解这种问题, 但是对于小白用户,可能就会带来很多误导,会觉得LLM非常不靠谱。
3、所以,在使用LLM的过程当中有两个关键的问题还需要去解决:
- a.回答的答案没有来源,如果我们对LLM的每个回答都要自己去验证正确性,那就完全没有必要使用LLM了,纯靠自己的检索能力了。
- b.训练数据过时, 大模型的知识都是来源于它的训练集, 对于还没有发生的或者它从来没有见过的数据它是完全无法回答的,但是很多情况下大模型会凭空捏造答案,问题又回到了a.
4、回到最初的问题, 什么是RAG呢? 查询资料再使用大模型生成就是RAG吗?
增强检索生成(RAG)是一种使用后处理的架构解决方案,目的就是为了解决LLM遇到的问题。如果用户想LLM提出问题,LLM能够直接给出准确以及有依据的回答,让用户可以100%相信它的回答的话,完全不需要RAG这种后处理的解决方案。
但是目前LLM还远远达不到我们想要的效果,所以现在有了RAG这种方式:我们会首先创建一个知识库,里面会以embedding的形式存储我们希望LLM回答的依据知识,让LLM在回答问题以前,先去搜索知识库,从中检索到相关性比较高的文档及知识,然后把用户的问题结合起来,给出有证据支持的答案;如果没有找到证据支持可以回答不知道,以免给用户造成误导。
二、RAG基础组件
首先需要了解一些基础概念:
1、Embedding
Embedding 是一种将原始数据转换成的模型可以运算的数据格式。 通常是将类别或者文本数据,转换为一个密集的浮点数向量,并且加入距离的概念。
对于LLM或者机器学习算法来说,原始的数据例如文本、视频、图像等,这些数据通常没有距离的概念。例如"手机"和"苹果",对我们来说,会知道"苹果"在语义上是会联想到"手机",Embedding在这个过程中就会加上距离的概念,距离越近,相关性越高。这使得知识库的维度大幅减少,从而节省了存储空间和计算复杂度。
另外,如果不加上距离的概念,仅仅是将文本转为数值,方法就比较多了比如 one-hot encoding,n-gram,tf-idf都可以。
Embedding 和 One-hot Encoding 其实都是原始数据表示的解決方案。One-Hot Encoding可以对任何分类特征进行向量化的通用方法,建立和更新向量化既简单又快速。然而,这种速度和简单性随着类别的增加也会造成维度魔咒; Embedding则需要大量的资料,无论是资料总量或单一样本的重复出现次数,以及训练时长。结果是一个固定、任意维度的稠密向量。如果有足够的训练数据、足夠的训练时间,并且能够应用更复杂的算法(例如,word2vec 或 GloVe),Embedding 一定是更优的。
2、Embedding Model
Embedding Model就是把原始数据转换成 Embedding 的过程,这些模型通过学习如何将原始数据映射到一个紧凑的信息丰富的空间中,从而使得数据之间的关系更加明确,更容易被后续的机器学习或者深度学习模型使用。这个过程不仅提高了数据处理的效率,也增强了模型对复杂数据的理解能力。
三、RAG架构详述
RAG主要分为2个部分,检索和生成,而大致步骤分为4个:
1、知识库构建
首先从各种格式的数据中获取构建知识库(如文本文件、数据库或 API)获取文档。这些文档包含了LLM可能回答的知识。这个步骤涉及将大量文档数据转换为模型可处理的格式,并且可能包括将文档内容透过Embedding Model预先转换成Embeddings,然后将embeddings存储到向量库当中,至此知识库构建完成。
2、问题处理
当用户提出一个查询时, 该查询通过Embedding Model转换成向量。这个过程类似于上面提到的将知识库的原始数据转换为Embedding的步骤。
3、相关文件检索(Retrieval )
然后, 使用这个问题的Embedding到预先建立好的知识库中进行检索, 也就是寻找与这个问题的embedding相似度最高的文档片段。这个知识库就是步骤1当中构建的向量数据库。
4、答案生成
找到一个或者多个相关的文档之后,将这些文档内容给到LLM中。这个模型结合了原始查询和从知识库检索到的文档内容来生成回答。在这一个步骤中,模型不仅考虑了用户的原始问题, 也利用了检索到的文档作为生成回答的背景知识。
三、RAG的挑战与风险
在大规模知识库检索的场景,随着知识库数据的量的增加,快速准确地从大型文件库中检索相关资料成为一种挑战。 需要高效的检索算法(如ANN)来确保响应快速,提高准确性可以使用二次排序模型(如BGE-ranking),特別是在实际业务场景当中;
另一方面,也带来安全和隐私信息外泄的风险,例如在处理私密或者私人资料时,需要确保你的RAG框架在检索和生产过程中不会外泄资料。