这里分享同济大学 Haofen Wang
的关于检索增强生成的报告:《Retrieval-Augmented Generation (RAG): Paradigms, Technologies, and Trends》 ,RAG 范式、技术和趋势。
为什么会有RAG
, 主要是缘于LLM的一些不足:
对在企业里的真实的应用,需要综合考虑:
因此有了RAG(Retrieval-Augmented Generation 检索增强生成),RAG的基本流程是,当回答问题时,首先从大量文档中检索到相关信息,然后基于这些信息,让LLMs生成答案。这样通过附加一个外部知识库,无需为每个特定任务重新训练整个大型模型。
因此RAG模型特别适合于知识密集型任务。
要优化大模型,可以通过提示词优化(Prompt Engineering),RAG 和 Fine-tuning方法。 RAG 和 FT有什么区别?根据对外部知识的依赖程度和模型调整的需求,他们都有适合自己的应用场景。
RAG就像是为模型提供了一本定制的带有信息检索的教科书,非常适合特定领域的查询。另一方面,FT就像是随着时间的积累将知识内化的学生,因此更适合模仿特定的结构、风格或格式。FT可以通过增强基础模型的知识、调整输出和教授复杂指令来提高模型的性能和效率。然而,它不擅长整合新知识或快速迭代新的使用案例。RAG和FT并不是相互排斥的,它们是互补的,结合起来使用会产生更佳的效果。
RAG 非常适合下面的场景:
作者将RAG分为Naive RAG
,Advanced RAG
,和Modular RAG
三种范式。
Naive RAG
就是传统的RAG 流程,先Indexing,然后Retrieval,最后Generation。Naive RAG
在检索、生成和增强方面面临着许多挑战,因此随后提出了Advanced RAG
范式,增加了预检索
和检索后处理
中的额外处理。在检索之前,可以使用query改写
、routing路由
和query扩展
等方法来对齐问题和文档块之间的语义差异。检索后,对检索到的doc进行一个rerank
,可以避免“中间丢失”现象,也可以对上下文进行过滤压缩,缩短窗口长度。
随着RAG技术的进一步发展和进化,产生了模块化RAG
的概念。在结构上,它更自由、更灵活,引入了更具体的功能模块,如查询搜索引擎和多个答案的融合。在技术上,它将检索与微调、强化学习和其他技术相结合。在流程方面,RAG模块经过设计和编排,形成了各种RAG模式。
然而,模块化RAG也不是突然出现的,三种方式存在继承与发展的关系。可以这么理解Advanced RAG
是模块化RAG的一个特例,而Naive RAG
是Advanced RAG
的特例。
关于检索什么层级的内容,我们可以从检索粒度的粗细,以及数据结构化的高低来看业界研究结果。
X轴结构化从低到高,Y轴从精细到粗粒度。 三个代表:
如何使用检索到的内容
在推理过程中,将检索到的信息集成到生成模型的不同层中
检索的时机
按照检索的频率从低到高,有:
RAG 技术发展树
Small 2 Big方法:
Abstract方法
伪metadata方法,也就是HyDE
,y将用户的原始查询转换为一个或多个假设性文档。这些文档是针对查询构建的文本片段,它们包含了可能回答查询所需的信息,然后用这些文档计算embedding,从真实文档库检索真实的文档,识别出与原始查询最相关的文档,检索到的真实文档被用作生成响应的上下文信息,可以辅助语言模型生成更准确、更相关的回答。
meta过滤方法:
核心就是数据很多,通过meta过滤,可以减少范围,提高精度。
可以分层组织检索文档库
GraphRAG 从用户的输入查询中提取实体,然后构建子图以形成上下文,并最终将其输入到大模型中进行生成
下面是一个具体的案例:
问题和答案并不总是具有很高的语义相似性,所以我们可以适当的调整query,以便获得更佳的检索效果,可以通过Query Rewriting
改写技术和Query Clarification
澄清技术。
profession
职业,那么可以先分别查询各自的,然后让大模型去解决。在检索流程方面,可以有Iterative
迭代式检索,也可以Adaptive自适应检索
既可以检索FT,也可以生成FT,还可以进行检索,生成联合FT
下面补充一些信息:
具体来说,评估方法主要围绕其两个关键组件:检索(Retrieval)和生成(Generation)。评估这些组件的性能涉及到多个质量分数和能力,这些分数和能力共同反映了 RAG 模型在信息检索和生成过程中的效率。
当前有LangChain、LlamaIndex、AutoGen等流行的开发框架,可以方便开发RAG应用。
工业界也有很多RAG应用。
将RAG从文本扩展到多模态
扩展RAG下游任务,改善生态建设