检索增强生成(RAG)[1]最初于2020年提出,作为一种端到端方法,结合了预训练的检索器和生成器。当时,其主要目标是通过模型微调来提高性能。
2022年12月ChatGPT的发布标志着RAG的一个重要转折。从那时起,RAG更多地侧重于利用大语言模型(LLM)的推理能力,通过整合外部知识来实现更好的生成结果。
RAG技术消除了开发人员需要为每个特定任务重新训练整个大规模模型的需求。相反,他们只需连接相关的知识库,为模型提供额外的输入,增强答案的准确性。
本文简要介绍了RAG的概念、目的和特点。
检索增强生成(RAG) 是通过整合外部知识源进一步增强大语言模型(LLMs)的过程。这使得LLMs能够生成更准确和上下文感知的答案,同时减少虚构内容的产生。
在回答问题或生成文本时,首先从现有的知识库或大量文档中检索相关信息。然后,使用LLM生成答案,通过整合这些检索到的信息来提高响应的质量,而不仅仅依赖LLM本身的生成能力。
RAG的典型工作流程如图1所示。
如图1所示,RAG主要包括以下步骤:
索引化:索引化过程是一项关键的离线初始步骤。它从清理和提取原始数据开始,将各种文件格式(如PDF、HTML和Word)转换为标准化的纯文本。为了适应语言模型的上下文约束,这些文本被分割成更小更易管理的块,即所谓的分块过程。这些块然后使用嵌入模型转换为向量表示。最后,创建索引将这些文本块及其向量嵌入作为键值对存储,从而实现高效可扩展的搜索能力。
检索:用户查询用于从外部知识源检索相关上下文。为实现这一目标,用户查询由编码模型处理,生成语义相关的嵌入。然后,在向量数据库上进行相似性搜索,以检索出前k个最接近的数据对象。
生成:用户查询和检索到的额外上下文填充到提示模板中。最后,从检索步骤得到的增强提示输入到LLM中。
当我们已经拥有LLM时,为什么仍然需要RAG呢?答案很简单:LLM无法解决RAG可以解决的问题。这些问题包括:
模型虚构问题:LLM中的文本生成基于概率。如果没有足够的事实支持,它可能生成看似严肃但缺乏连贯性的内容。
时效性问题:LLM的参数大小越大,训练成本越高,所需时间越长。因此,时效性数据可能无法及时包含在训练中,导致模型无法直接回答时效性问题。
数据安全问题:通用LLM无法访问企业内部或用户私密数据。为确保数据安全,使用LLM时的一个好的解决方案是将数据存储在本地,并在本地执行所有数据计算。云LLM仅用于总结信息的目的。
答案约束问题:RAG在LLM生成过程中提供了更多的控制。例如,在涉及多个知识点的问题时,通过RAG检索到的线索可以用来限制LLM生成的边界。
RAG具有以下特点,使其能够有效解决上述问题:
可扩展性:RAG减少了模型大小和训练成本,并促进了快速知识扩展。
准确性:该模型基于事实提供答案,最大程度地减少幻觉的发生。
可控性:RAG允许进行知识更新和定制化。
可解释性:检索到的相关信息作为模型预测的参考。
多功能性:RAG可针对问答、摘要、对话等多种任务进行微调和定制。
在形象化方面,RAG可以类比为LLM的开卷考试。类似于开卷考试,学生被允许携带参考资料,以便在回答问题时查找相关信息。
本文仅介绍了RAG基础知识的概述。未来还将介绍许多高级RAG技术。
最后,如果本文中有任何错误或遗漏,请您指正。
Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, 等. 检索增强生成用于知识密集型自然语言处理任务. arXiv预印本 arXiv:2005.11401, 2023.
https://ai.plainenglish.io/a-brief-introduction-to-retrieval-augmented-generation-rag-b7eb70982891