我们的知识库和检索主要基于以下原理和流程搭建:
在知识库检索阶段:
1.文本预处理:2.这包括去除无关字符、标准化文本(例如将所有字符转换为小写)、分词等,以清洁和准备文本数据。3.嵌入表示:4.将预处理后的文本(词或短语)转换为向量。这通常通过使用预训练的嵌入模型来完成,如Word2Vec、GloVe、BERT等。这些模型将每个词或短语映射到一个高维空间中的一个点(即向量)。5.特征提取:6.对于整个问题句子,可能会应用进一步的特征提取技术,比如句子级别的嵌入,或使用深度学习模型(如BERT)直接提取整个句子的表示。这个表示能够捕捉句子的上下文信息,不仅仅是单个词。7.向量优化:8.在某些情况下,问题的向量表示可能会根据具体任务进行优化,例如通过调整模型参数来更好地与检索系统的其他部分协同工作。②、知识库检索阶段:此阶段,首先需要有一个知识库,那么知识库是如何完成制作,并被检索的呢?我们需要先了解一个概念,在大模型的检索中,并不是依靠传统的关键字去搜索。而是依靠问题在空间中的向量位置,去寻找距离这个向量最近的其他词句,然后完成检索。所以,要在向量中进行检索,我们的知识库其实也是被转化成了了一个巨大的向量库。1、文档向量化:
旁白:一路千辛万苦,终于要真正了解RAG的全貌了,好激动前面的开胃菜已经完毕,这里我们进入正餐,先上一张图注:这张图引用自:https://mp.weixin.qq.com/s/37tKVQbxenVVBAeMZ334aQ公众号:AI花果山一位RAG大佬,正在编写一系列教程《RAG高效应用指南》这张图将会是我们本章的知识地图,看到这么多的概念,不要慌,我们先整体理解下RAG。自顶向下,RAG的流程分为离线数据处理和在线检索两个过程。我们前面讲到,知识库是RAG的“活字典”,可以让AI随时进行查阅。而离线数据处理的目的就是为了构建出这本“活字典”。经过离线数据后,知识则会按照某种格式以及排列方式存储在知识库中,等待被使用。而在线检索则是我们使用利用知识库+大模型进行查询的过程。在学习一门新知识的时候,是什么与为什么同等重要是什么让你知其然为什么让你知其所以然接下来我们就以RAG最经典的应用场景《构建智能问答客服》来了解RAG所有流程中的What与Why
因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading2]文本加载器(Document Loaders)[content]文本加载器就是将用户提供的文本加载到内存中,便于进行后续的处理