检索增强生成RAG最佳实践

云的事情不好说 2024-04-19 03:37:23

虽然RAG(Retrieval Augmented Generation)的潜力显而易见,但最佳实践仍在发展之中。部署一个有效的RAG系统需要大量的实验来优化每个组件,包括数据集合(data collections)、模型嵌入(model embeddings)、分块策略(chunking strategies)等。

一、数据 Data

与监督学习类似,检索增强生成(RAG)系统的性能在很大程度上取决于它们所训练的数据质量。RAG系统通过从知识库中检索相关信息,然后使用这些信息生成响应来工作。如果知识库中的数据质量差,RAG将无法生成准确或有信息量的结果。

以下是几个影响RAG系统数据影响力的关键因素:

数据质量(Data quality):如果数据不准确、不完整或存在偏见,RAG系统更有可能生成不准确或具有误导性的响应。

数据准备(Data preparation:包括清洗数据、移除重复条目以及将数据转换为与RAG系统兼容的格式。

数据来源(Data sources):如果知识库仅包含来自有限数量来源的数据,RAG系统可能无法生成像它能够访问更广泛数据来源时那样全面或有信息量的响应。

元数据(Metadata):通过提供传递上下文中的数据块的元数据,大型语言模型(LLM)将能够更好地理解上下文,可能导致更好的输出。

附加上下文和知识(Additional Context and Knowledge):如果可用,知识图谱通过在查询时提供额外的上下文,增强了RAG应用,使系统能够生成更准确、更有信息量的响应。

二、数据块 Chunking

在检索增强生成(RAG)中,“分块”是指将输入文本划分为简洁、有意义的单元,这有助于检索系统精确地定位到与生成响应相关的上下文段落。这些分块的质量和结构对系统的效率至关重要,确保检索到的文本紧密地适应用户的查询。

Anyscale的调查强调了分块相对于嵌入优化的重要性。他们对开发者的建议是优先尝试各种分块策略。如果执行得当,并考虑到文档的结构等方面,分块可以显著提高RAG的性能。

Anyscale的实验概述了几种分块方法。他们试验的关键发现包括:

分块显著影响生成内容的质量。他们测试了包括100、300、500和700在内的各种大小。研究表明较大的分块尺寸可能有益,但在某个点后收益递减,这表明过多的上下文可能会引入噪声。同样值得注意的是,许多开源嵌入模型的上限是512个子词元(sub-word tokens)。虽然较大的分块尺寸可以提高性能,但过多的上下文可能会引入噪声。变化分块数量可以增强检索和质量评分,但在超过某个阈值后收益减少。由于大型语言模型(LLM)的上下文长度限制,实验最多使用了七个分块。值得注意的策略包括使用较小的分块,并检索相邻分块的内容,或为文档维护多个嵌入。

那么重叠(overlap)分块呢?

Anyscale的帖子没有直接讨论这个话题(尽管他们在实验中使用了一个chunk_overlap变量)。分块中的重叠是指在相邻分块的边界处有意复制tokens。这确保了当一个分块传递给LLM进行生成时,它包含了一些来自邻近分块的上下文,从而提高了输出的质量。

例如,如果数据被划分成100个tokens的分块,50个tokens的重叠意味着一个分块的最后50个tokens与下一个分块的前50个tokens相同,从而保留了周围的上下文。

三、嵌入模型 Embedding Models

“嵌入模型”指的是一个预训练模型,负责将数据表示为数值形式,以便于在信息检索中进行语义搜索。许多团队使用各种流行的嵌入模型进行实验。根据你的语料库大小,这些模型可能在计算上非常昂贵,并且最好使用像Ray这样的分布式计算框架来生成。

Anyscale的实验显示,嵌入模型的选择显著影响检索和质量评分,较小的模型甚至在特定任务上胜过排名靠前的模型。结果表明,简单地从排行榜上选择性能最好的嵌入模型并不总是最佳决策!

嵌入模型和分块策略都可以显著影响RAG系统的性能。

然而,分块策略似乎有稍微更大的影响。嵌入的价值在很大程度上取决于你的使用案例。现成的嵌入模型可以为数据块生成嵌入,这对于大多数用例来说效果很好。然而,如果你在特定领域工作,这些模型可能无法在向量空间中充分代表该领域,导致检索质量差。在这种情况下,你可以对领域数据进行微调嵌入模型(fine-tune an embedding model ),以改善检索质量。

四、数据管理和信息检索 Data Management and Information Retrieval

向量搜索不再仅限于向量数据库。包括Postgres在内的许多数据管理系统现在都支持向量搜索。

根据具体应用,能够找到满足特定需求的系统。

在RAG应用中,高效且精确的检索算法发挥着不可或缺的作用。RAG从广泛的数据源中集成检索到的上下文来生成答案。

有两种主要的检索方法:基于词项的匹配(Term-based matching),如BM25,它从问题中识别关键词,并基于词项统计数据将它们与相关文档匹配;以及依赖嵌入的向量相似性搜索(Vector similarity search)。这些嵌入随后被索引,允许快速相似性查找。虽然词项匹配更简单,需要的预处理较少,但向量相似性提供了更深层次的上下文相关性。

许多向量数据库允许使用混合(基于词项和向量搜索)检索方法。鉴于语言模型的限制和领域专业知识在排名结果中的关键作用,根据特定需求定制检索方法变得至关重要。为了在RAG中获得最佳结果,我们将不得不使用自己的数据进行实验,以确定最适合的检索策略。

五、大语言模型LLM

大型语言模型(LLM)通过利用来自相关文档片段的信息生成精炼的答案。LLM通过外部数据增强,提高了其响应质量。正确的LLM取决于应用程序的目标,因此选择正确的模型至关重要。虽然有些情况只需要简洁的总结,但其他情况则需要高级推理,这强调了LLM的相关性。现代LLM不仅仅是关于数据记忆;它们的能力在于推理,很像咨询专家。它们可以批判性地评估和推理获取的知识,使得更大的模型更受欢迎。

对于那些开发RAG应用程序的人来说,尝试各种LLM至关重要。选择应该与应用程序的独特需求保持一致,考虑诸如准确性、延迟和成本等因素。为了优化这一点,已经出现了早期的设计模式:

专家混合(Mixture of Experts):采用混合路由涉及使用多个LLM。一个监督模型指导输入查询到最合适的LLM。通过融合来自几个LLM的输出,不同的应用程序可以受益。意图分类器(Intent Classifiers):将RAG与意图分类器相结合,提供了一种在简单的RAG应用程序和繁琐的会话代理之间的优化方法。意图分类器识别用户查询何时与预定义的规范形式匹配,从而实现更快速和精确的响应。

六、调优之旅

检索增强生成(RAG)是一种有前途的新技术,它正在改变我们生成AI驱动文本的方式。

通过将语言模型基于外部知识源,RAG能够产生更准确、更可靠的输出。我鼓励AI团队和从业者尝试不同的RAG参数,以找到最适合他们特定需求的设置。

RAG已经成为一种长期存在的技术,系统化的探索将是其成功的关键。



0 阅读:8

云的事情不好说

简介:感谢大家的关注