RAG(Retrieval-Augmented Generation,检索增强生成)是一种自然语言处理技术,主要用于提高语言模型的效果和准确性。其原理包括以下几个方面:
因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片
RAG是什么?为什么要关注RAG?RAG技术为何如此重要?在看本文之前相信大家都会有这样的疑问,不言而喻对于一个不懂技术或者刚接触大语言模型的肯定都会有点懵的。下面这篇文本就是对RAG的技术原理、历史发展、应用方法、应用场景和未来的发展方向的完整解读。文本内容源自论文:《Retrieval-Augmented Generation for Large Language Models:A Survey》首先让GPT回答下上面的问题:什么是RAG?"RAG"(Retrieval-Augmented Generation)是一个自然语言处理(NLP)技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索(Retrieval)和生成(Generation)。检索(Retrieval):这一部分的工作是从大量的文本数据中检索出与输入问题最相关的信息。它通常使用一个检索系统,比如基于BERT的模型,来在大规模的文档集合(例如维基百科)中寻找与输入相关的文段。生成(Generation):生成部分则使用类似GPT的语言模型,它会根据检索到的信息来生成响应或回答。这个过程涉及理解检索到的内容,并在此基础上生成连贯、相关且信息丰富的文本。
rag,也就是Retrieval-augmented-Generation,检索增强技术,应该也是大家经常看到的一个名词了。那么他到底是个什么东西呢?首先我们先回顾llm的原理,其实就是把一堆互联网文献材料,降维到latentspace中,并通过transformer的方式用学习到了其中的“经验”。但文献资料是死的,如果仅通过固定的资料去回答问题,势必会出现一些无法回答的问题。那么rag的出现就解决了这个问题,rag允许模型可以到搜索引擎上去搜索问题相关的资料,并将获取到的信息,综合自己的知识体系内容,综合进行回复。当然rag不全是这些,rag的r,也就是搜索,其实不是一件简单的事情。所以这个环节还会有些传统的搜索的逻辑在,比如对于输入问题的纠错,补充,拆分,以及对于搜索内容的权重逻辑等等的事情。打个比方,比如问中国界世杯夺冠那年的啤酒销量如何,那就首先会做一次纠错,把“界世”纠错为“世界”,然后把问题拆分为两个问题,然后综合去搜索,把搜索到的资料在给到大模型,让其进行总结性输出