Rag的发展史
1.初始阶段(2017年前后):
RAG的研究主要集中在如何通过预训练模型(Pre-Training Models, PTM)来增强语言模型的知识。这一时期的工作主要是探索如何将额外的知识融入到语言模型中,以提高其性能。这个阶段的研究为RAG奠定了基础,主要集中在优化预训练方法上。
2.相对休眠期(2017年至2022年):
在这个阶段,RAG的研究进展相对缓慢,主要是因为ChatGPT等大型语言模型尚未出现,研究者们对RAG的兴趣有限。在这段时间里,RAG的相关研究主要集中在如何提高检索的质量和效率。
3.ChatGPT时代(2022年至2023年):
随着ChatGPT的出现,RAG研究迎来了一个转折点。研究者们开始关注如何利用RAG来提高LLMs(Large Language Models)的可控性和适应性。在这个阶段,RAG的研究主要集中在推理过程上,尤其是如何通过检索来增强模型的生成能力。
4.GPT-4及以后(2023年至今):
随着GPT-4等更先进的语言模型的推出,RAG技术经历了显著的变革。研究的重点转向了结合RAG和微调(fine-tuning)的混合方法,同时仍有一部分人继续专注于优化预训练方法。这个阶段的RAG技术更加注重实用性和高效性,研究者们开始探索如何将RAG应用于实际问题,以及如何通过RAG来解决LLMs在特定任务上的性能瓶颈。
Naive RAG
朴素RAG(naive RAG)研究范式代表了最早的方法论,它在ChatGPT广泛采用后不久就获得了显著地位。朴素RAG遵循一个传统的过程,包括索引、检索和生成。它也被描述为一个“检索-阅读”框架。
索引 索引过程是数据准备中的一个关键初始步骤,它在离线状态下进行,并涉及多个阶段。它从数据索引开始,原始数据被清洗和提取,各种文件格式如PDF、HTML、Word和Markdown被转换成标准化的纯文本。为了适应语言模型的上下文限制,这些文本随后被分割成更小、更易于管理的块,这个过程被称为分块。这些块随后通过一个嵌入模型转换为向量表示,模型因其在推理效率和模型大小之间的平衡而被选择。这有助于在检索阶段进行相似性比较。最后,创建一个索引来存储这些文本块及其向量嵌入作为键值对,这允许高效和可扩展的搜索能力。
检索 在收到用户查询后,系统使用与索引阶段相同的编码模型将输入转换为向量表示。然后计算查询向量与索引语料库中向量化块之间的相似度分数。系统优先检索与查询最相似的前K个块。这些块随后被用作扩展的上下文基础,以解决用户的请求。
生成 提出的查询和选定的文档被渲染成一个提示(Prompt),大型语言模型生成回答。模型的回答方法可能因任务特定标准而异,允许它要么利用其内在的参数知识,要么将其回应限制在提供的文档内包含的信息。在持续对话的情况下,任何现有的对话历史可以被整合到提示中,使模型能够有效地参与多轮对话互动。
朴素RAG的缺陷 朴素RAG在三个关键领域面临重大挑战:“检索”、“生成”和“增强”。 检索质量提出了多种挑战,包括低精度,导致检索到的块与查询不一致,可能出现幻觉或空中掉物等问题。低召回率也会出现,导致无法检索到所有相关块,从而阻碍了LLMs构建全面回应的能力。过时的信息进一步加剧了问题,可能导致检索结果不准确。
回答生成质量呈现幻觉挑战,模型生成的答案没有基于提供的上下文,以及模型输出中可能出现的无关上下文和潜在的有害或偏见问题。
增强过程在有效地将检索到的段落的上下文与当前生成任务整合方面也面临挑战,可能导致输出不连贯或不连贯。冗余和重复也是问题,特别是当多个检索到的段落包含相似信息时,会导致生成的回应内容重复。
辨别多个检索到的段落对生成任务的重要性和相关性是另一个挑战,需要适当平衡每个段落的价值。此外,调和写作风格和语调的差异以确保输出的一致性至关重要。
最后,生成模型过度依赖增强信息的风险,可能导致输出仅重复检索到的内容,而没有提供新的价值或综合信息。