RAG pipeline优化策略概述
编者按:随着GPT-4等大模型的出现,检索增强生成(RAG)技术备受关注。然而,我们是否已经找到了最佳的RAG策略呢?
我们今天为大家带来的这篇文章,作者认为目前还没有单一的RAG流程或策略是最优的。文章详细归纳了当前开发者们正在尝试的多种RAG性能优化策略。
文章首先指出RAG可以解决LLM的一些关键问题,如利用私有数据、扩展上下文窗口等。接着,作者列出了如何优化RAG流程的多种策略:将文档分块以提高搜索精确度、建立多个索引进行查询路由、微调嵌入模型适应特定文档集、混合使用多种检索方式、使用重排序算法、扩展或压缩提示语等。
每种策略都有其适用场景,开发者们还需要不断尝试探索,才能找到最佳RAG方案。但文章提供了当前改进RAG性能的多种切入点,让我们对RAG技术发展方向有了更清晰的认识。期待后续更多优秀成果的诞生!
原文链接:Improving RAG: Strategies
作者:Matt Rickard
译者:丘山子
检索增强生成(Retrieval Augmented Generation,RAG)解决了大语言模型(LLM)的几个问题:
- 不需要进行微调,即可实现将私有数据放入上下文。
- 能够有效地扩展 LLM 的信息上下文窗口(the context window of information)。
- 通过学习真实的文档(ground truth documents)来对抗大模型的“幻觉”问题。
- 此外,通过RAG技术,还可以在输出中“引用”这些文档,使模型更具可解释性(explainable)。
但是,并没有单一的RAG流程或策略(RAG pipeline or strategy)。大多数 RAG pipeline or strategy 都涉及到使用向量数据库(目前来看是这样)。不过,目前开发者们正在采用大量策略来改进RAG流程的性能。(在下文列举这些策略~)
- 将文档分割成较小的片段(Chunking data)。将文档分块可以使语义搜索(semantic search)更加精确。如果文档本身将要被添加到提示语(prompt)中,并且其大小需要在上下文窗口的限制之内,这也是一种自然的限制。您可能需要匹配的是某个页面、章节或段落,而不是与用户查询匹配的整个文档。由于不同的文档类型在逻辑上可以以不同的方式进行分块,因此可能没有一种适用于所有情况的方法。
- 建立多个索引(Multiple indices)。将文档语料库分割成多个索引,然后根据某些标准进行路由查询(routing queries)。这样做的话,搜索范围只会是一组较小的文档,而不是整个数据集。同样,这种方法并不总是有用,但对于某些数据集来说可能是有帮助的。相同的方法也适用于 LLM 本身。
- 微调嵌入模型(Custom embedding model)。微调嵌入模型可以帮助检索。如果您的文档集合的相似性概念与其他集合有明显的差异,那么这种方法将是有用的。(译者注:不同的文档集合可能具有不同的相似性概念。例如,对于某些特定领域的文档集合,相似性可能基于特定的主题、关键词或上下文。在这种情况下,通过微调嵌入模型或自定义相似性度量方法,可以更好地适应您的文档集合的特定相似性概念,从而提高检索的准确性和效果。)
- 混合多种检索方式(Hybrid search)。向量检索往往(或通常情况下)并不足够。通常需要将其与传统关系数据库和其他文档过滤方式相结合。
- 重排序算法(Re-rank)。首先,使用初始检索方法获得了一个近似的候选检索结果列表。然后,使用重排序算法按相关性对结果进行排序。
- 扩展或压缩提示语(Upscaling or downscaling prompts)。需要优化用户查询,使其能够在检索系统中发挥更好的作用。可以通过在进行语义搜索之前添加更多上下文信息来扩展用户查询,也可以通过删除可能分散模型注意力和不必要的部分来压缩查询语句。