以下是一些与 RAG 相关的信息:
如果检索到的知识是无效的,会严重影响LLM应用的表现,因此将检索过程的精确度和召回率与整个LLM应用程序分开进行研究尤为重要。如下图所示,需要建立一个评估框架,将检索性能与整个LLM应用程序隔离开来。所以这里需要既需要从模型角度出发评估生成结果的质量,也需要从检索的角度出发,用精确度和召回率评估检索,并评估整个系统。模型角度(generation)回答真实性:模型结果真实性多高(少一些模型幻觉)回答相关度:结果和问题有多相关,不能南辕北辙检索角度(retrieval)召回率(recall):相关信息有多少包含在返回的检索内容里,越全越好准确率(precision):返回的检索内容中有用信息占比多少,越多越好RAGAS是一个用于RAG评估的知名开源库,推荐使用:[https://github.com/explodinggradients/ragas](https://github.com/explodinggradients/ragas)
因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片
我们为实验收集了一个非常接近真实环境的数据集,它包含来自各个领域的188份文档。具体而言,该数据集包括100篇学术论文、28份财务报告和60份其他类别的文档,如教科书、课件和立法材料。然后,我们通过众包收集了800个手动生成的问题。经过仔细筛选后,我们删除了低质量的问题,得到了302个可用于评估的问题。这些问题分为两类(如表2所示):表2数据集中的问题被分类为提取信息类和综合分析类,采用不同的评测方法。提取信息类问题(Extractive questions)是指可以直接从文档摘录回答的问题。由于这类问题需要特定的信息,因此通常需要精确的答案。我们发现,在使用大语言模型进行评估时,它可能无法区分答案之间微妙但重要的差异,因此我们采取人工评估。我们使用0-10的量表对结果进行评级。评估人员会同时看到两种方法检索的内容和答案,并同时对两种方法进行评级。我们给出了检索到的内容,因为通常无法在没有文档内容的情况下评估答案,并同时展示了两种方法以便详细对比,特别是在部分正确的结果上。