RAG入门系列一:RAG基本介绍
RAG入门系列一:RAG基本介绍
随着大语言模型的广泛应用,其幻觉问题也日益凸显。为了解决这一问题,检索增强生成(RAG)技术应运而生。本文将带你深入了解RAG的基本概念、发展历程及其关键技术,帮助你全面掌握这一重要技术。
RAG介绍
对于RAG的最初了解,是在去年无聊刷b站的时候,某个学习区up主说:RAG就是让大模型开卷考试。Emm...说实话没太懂,所以作者去查了很多资料,最终得到了自己的理解:
大模型在训练的时候虽然使用了很多语料,但绝大部分是通用知识,总会有涉及不到的内容,比如自身电脑上的文件,或者是过于专业的领域知识。关于这些语料的知识,LLM是不知道的,所以就这些问题询问的话,可能它就会胡说八道...嗷嗷叫大模型幻觉(hallucination)。因此,为了解决这类问题,我们需要外部接入知识库以弥补这部分内容,让LLM从这些知识中查询,最终才能生成出正确的答案。
这部分是作者基于这段时间的学习得出的浅显理解,目的是让大家对检索增强生成这项技术能有一个最基本的了解。当然,还是需要看看官方维基百科给出的定义:
检索增强生成(Retrieval Augmented Generation, RAG)是一种赋予生成型人工智能模型信息检索能力的技术。它通过修改与大型语言模型(LLM)的交互方式,使模型在响应用户查询时参考指定的一组文档,利用这些信息来增强从其自身庞大且静态的训练数据中提取的信息,这使得LLM能够使用特定领域和/或最新的信息。
OK,那我们继续往下走^^
RAG分类
基于RAG技术的快速发展,其研究范式也在不断变化,大体可以分为基础RAG(Naive RAG), 高级RAG(Advanced RAG)和模块化RAG(Modular RAG)。先给出不同范式的流程图供大家参考:
随后针对每一个范式进行分析:
Naive RAG
基础RAG(Retrieval-Augmented Generation)随着GPT等大型语言模型的广泛应用而兴起,代表了早期的RAG方法体系。它遵循典型的技术流程:索引、检索和生成,因此也被称为“检索-读取”框架。
索引
首先,系统对各种格式(如PDF、HTML、Word和Markdown)的原始数据进行清理和提取,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成更小的、易于处理的块(chunk)。接着,使用嵌入模型将这些块编码为向量表示,并将其存储在向量数据库中,以便后续高效检索。
检索
在接收到用户查询后,RAG系统利用与索引阶段相同的编码模型将查询转换为向量表示。然后,系统计算查询向量与索引语料库中各块向量之间的相似性得分,并对与查询最相似的前K个块进行优先级排序和检索。这些相关块将作为后续生成阶段的上下文信息。
生成
将用户的查询与检索到的相关文档整合成一个连贯的提示(prompt),大型语言模型(LLM)根据该提示生成相应的答案。在对话场景中,任何现有的对话历史都可以被整合到提示中,使模型能够有效地进行多轮对话交互。
在检索阶段,RAG始终面临召回率与精确度之间的权衡难题:提高召回率会引入更多无关内容,降低精确度;而提升精确度又可能导致遗漏重要信息,降低召回率。因此,这种折中使得RAG的表现难以达到理想效果。
即使有外部知识库,生成模型仍会出现幻觉、无关性、有害内容和偏见的问题,这主要是因为模型的自由生成特性会导致推测性补充,检索内容不完全对齐或信息不足,上下文长度限制导致信息筛选不精确,以及训练数据中的偏见或不当内容影响了输出质量。
整合检索信息时,模型可能面临输出不连贯、内容冗余、信息重要性判断困难和风格不一致等问题,尤其在复杂任务中,单次检索难以提供足够的背景信息,增加了生成高质量回答的难度。
此外,另一个常见问题是模型对检索增强信息的过度依赖。这可能导致生成的内容仅仅是对检索到的信息的重复,而缺乏深入的分析或综合上下文的见解,限制了生成内容的深度和创新性。
Advanced RAG
鉴于基础RAG的种种局限性,高级RAG被设定为引入了特定改进以克服这类问题的新一代RAG方法范式。主要以提高检索质量为重点,引入了预检索策略和后检索策略。除此之外,还对索引技术以及检索过程进行了改良与简化。
预检索策略
预检索策略阶段的核心在于优化索引结构和原始查询,以提高整体检索效果。具体策略包括:
增强数据粒度:通过细化数据的粒度,例如将长文档拆分为更小的段落或句子,从而提高检索的精确度,使模型能够更准确地匹配相关信息。
优化索引结构:采用更高效的索引方法,如倒排索引、稠密向量索引(如FAISS、HNSW)等,以提升检索速度和准确性。
添加元数据:为索引内容添加丰富的元数据(如时间戳、作者信息、主题分类等),以便在检索过程中能够更好地过滤和排序,提高结果的相关性。
对齐优化:确保索引内容与模型理解的语义对齐,通过语义嵌入等技术,使索引和查询在同一语义空间内,提高检索的一致性和准确性。
混合检索:结合关键词检索与语义检索的优势,利用两者的互补性,提升整体检索效果。例如,首先进行关键词过滤,再通过语义匹配细化结果
在查询优化方面,目标是使用户的原始问题更加清晰、具体,适合检索任务。常用的方法包括:
查询重写:对用户输入的查询进行改写,使其更符合检索系统的要求,例如消除歧义、纠正拼写错误等。
查询转换:将用户的自然语言查询转换为结构化的查询语句,以便于更精确的检索。
查询扩展:通过添加同义词、相关词或上下位词,扩展原始查询的范围,增加检索到相关信息的可能性。
后检索策略
在成功检索到相关上下文后,后检索策略阶段的任务是将这些信息有效地整合到生成过程,确保输出的高质量和高相关性。主要方法包括:
重排序:对检索到的信息进行重新排序,将最相关或最重要的内容优先呈现,确保生成模型能够优先利用最有价值的信息。例如,使用学习排序模型(如BERT-based rankers)对检索结果进行评分和排序。
上下文压缩:在大量检索到的信息中,筛选出关键部分,去除冗余或不相关的内容,缩短上下文长度,以便生成模型能够高效处理。例如,使用摘要生成技术或信息抽取方法提取关键信息。
内容融合:将多源信息进行整合,避免信息碎片化,通过一致性的逻辑结构呈现,以增强生成内容的连贯性和完整性。
动态权重调整:根据生成任务的需求,动态调整不同检索结果的权重,确保生成模型能够更好地利用最相关的信息。例如,在特定领域的问答任务中,给予专业文献更高的权重。
上下文增强:利用外部知识库或上下文关联技术,进一步丰富检索到的信息内容,为生成模型提供更全面的背景支持。
通过预检索策略和后检索策略的协同优化,高级RAG不仅在检索效率和准确性上有显著提升,还在生成内容的质量和相关性上表现出更强的能力,适应更为复杂和多样的应用场景。
Modular RAG
模块化的RAG(检索增强生成)架构在保持基础和高级RAG基本原则的同时,提供了更高的灵活性和效率。其核心创新在于采用多种策略优化内部组件,例如为相似性搜索引入专门的搜索模块,并通过微调提升检索器的性能。此外,模块化RAG通过重组各个模块和重新排列RAG流程,针对具体任务进行了优化。最为关键的是,该架构支持跨模块的顺序处理和集成的端到端训练,进一步增强了系统的整体性能和适应能力。
新增模块
模块化RAG框架引入了多个专用组件,以提升检索和处理能力:
Search模块适应特定的场景,使用LLM生成的代码和查询语言,支持跨各种数据源(如搜索引擎、数据库和知识图谱)的直接搜索
RAGFusion通过采用多查询策略,将用户查询扩展到不同的角度,利用并行向量搜索和智能重新排序来发现显性和变革性知识
Memory模块利用LLM的记忆能力,创建一个无界记忆池,通过迭代的自我增强使文本与数据分布更紧密地对齐
...
新增模式
模块化RAG通过允许模块替换或重新配置来解决遇到的特定问题,这超越了基础与高级RAG的固定结构--简单的“检索”与“读取”机制,提供了显著的适应性。此外,模块化RAG通过集成新模块或调整现有模块之间的交互流来扩展这种灵活性,增强其跨不同任务的适用性。
Rewrite-Retrieve-Read模型利用LLM的重写功能,通过重写模块和LLM反馈机制优化用户查询,从而提升检索效果和生成内容的相关性
Generate-Read方法用llm生成的内容取代了传统的检索,而ReciteRead强调从模型权重中检索,增强了模型对知识的内在处理能力
Demonstrate-Search-Predict (DSP)框架结合ITERRETGEN的迭代检索-读取-检索-读取流程,动态利用一个模块的输出支持另一个模块的功能,实现更为复杂和智能的处理流程
FLARE和Self-RAG框架实现了自适应检索,能够根据不同场景自动调整检索策略,适用于多种评估和检索需求,提升系统在多样化任务中的表现
总而言之,模块化RAG的创新方法为RAG技术的发展提供了新的方向,进一步推动了检索增强生成系统在实际应用中的广泛应用和深入发展。
这次就介绍一下RAG的相关概念和基本范式,下次再深入聊聊其中的关键技术吧~