RAG的作用
大模型虽然具备处理复杂语言任务的强大能力,但在知识更新和依赖外部信息的及时性方面存在局限。大模型在训练时捕获的知识通常是静态的,一旦训练完成,模型便不再更新,无法掌握训练数据集之外的最新信息或事件。RAG可以很好的弥补这方面的不足,通过结合检索和生成的方式,允许模型在回答问题或执行任务时动态地访问和利用最新的外部知识。
RAG历史
检索增强生成(Retrieval-Augmented Generation, RAG)属于自然语言处理技术,结合了大语言模型的生成能力和外部知识库的检索功能,以提升回答问题的准确性和时效性。
最早在2020年的学术论文中提出,探索如何利用检索技术从海量知识中迅速定位与问题相关的信息,进而提升语言模型的回答质量。在RAG框架下,系统首先使用编码模型(如BM25、SentenceBert、ColBERT等)对问题进行编码,然后在知识库中检索最相关的文档。这是RAG区别于传统语言模型的关键,允许模型在回答问题时参考外部的、通常是更具体和最新的信息。系统将检索到的上下文信息与问题合并,作为大语言模型(LLM)的输入,以此为基础生成回答。
RAG的出现标志着自然语言处理领域的一个重要转折点,无需为每个特定任务重新训练整个模型的可能性。通过简单的接入外部知识库,RAG能够显著提升模型在知识密集型任务上的表现,同时降低了模型维护和训练的成本。RAG的透明性和可定制化增强了用户对模型输出的信任,尤其是在涉及安全性和隐私管理的场景中。
最初版本的RAG称为Naive RAG,主要关注索引、检索和生成的基本步骤。逐步进入如何优化检索效果、提高向量表征模型的准确度以及优化检索后处理等关键环节。这些优化不仅提升了检索的精度和召回率,还减少了过时信息的影响,增强了RAG系统的整体效能。
现在进入了高级阶段,出现了Modular RAG,一种高度模块化的RAG系统,将优化策略分解为独立的模块,如搜索模块、记忆模块、额外生成模块等,每个模块负责特定的功能,可以独立进行优化。这种模块化设计使得RAG系统更加灵活,能够针对不同的任务和需求进行定制,同时也促进了RAG系统的持续进化和创新。
参考文献
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
- Retrieval-Augmented Generation for Large Language Models: A Survey
文献详细阐述了RAG技术的理论基础、发展历程以及在实际应用中的效果评估。
RAG工作原理
RAG的工作流程分为两个关键阶段:检索和生成。首先,使用诸如BM25、SentenceBert或ColBERT等编码模型,根据问题找到相关的文档。将检索到的上下文与问题合并,作为大语言模型生成答案的基础。
这种方法最早在2020年的论文《Retrieval-augmented generation for knowledge-intensive NLP tasks》中提出,展示了即使是当时流行的seq2seq模型,通过检索方式也能从海量数据中迅速定位到与问题相关的知识,从而提升生成文本的准确性和相关性。
微调通常用于使模型适应特定的结构、风格或格式,而RAG则更侧重于提供信息检索功能,适用于解答具体问题。RAG提高了答案的准确性,减少了虚假信息的出现,能够识别并提供最新信息,保持回答的时效性和准确性。RAG的透明度高,能够增强用户对模型输出结果的信任,同时支持不同领域的专业知识,对于安全性和隐私管理也有较好的控制。此外,RAG在处理大规模数据集时具有更好的扩展性和经济效率。
RAG的挑战。检索质量是首要问题,包括低精度和低召回率,这可能导致信息错误或遗漏关键信息。同时,回应生成质量也是一个关注点,模型可能因缺乏足够上下文而产生错误或无关的回答。此外,随着模型对召回结果的依赖加深,大模型的“幻觉”问题——即模型在缺乏事实依据的情况下生成虚构信息——也可能加剧。
RAG技术的存在并不取决于大模型的Context Length,而是由知识依赖问题决定的。无论模型大小,都有知识更新的需要,新知识的学习往往需要时间和资源,而RAG通过检索和prompt的方式,能及时将最新信息输入模型,解决知识更新的难题。在实时性要求高的场景下,如商品信息更新、天气预报或新闻报道,RAG的优势尤为明显,能够通过数据库的实时存储和更新,配合prompt机制,让模型迅速获取并应用新知识。
RAG优化策略
原始RAG面临的主要挑战包括检索质量(如低精度和低召回率)以及回应生成质量(如错误信息、不相关性或有害内容)。RAG的优化通常集中在索引、向量模型优化和检索后处理等方面。
高级RAG通过引入更精细的索引策略、向量表征模型的优化以及检索后处理技术,如重排序和prompt压缩,显著提升了系统的性能。此外,混合检索、递归检索和子查询等方案也被提出,以进一步提高检索的准确性和效率。
模块化RAG与self-RAG:模块化RAG通过集成大量优化策略,形成独立的模块来完成特定功能,如搜索模块、记忆模块和任务适配模块。而self-RAG引入了主动判断模块,使系统能够自我反思,判断是否需要进一步检索以及回复的质量,从而做出更智能的决策。
RAG发展趋势
持续的优化:针对检索质量和生成质量的持续优化,以及对整个RAG流程的精进。
集成Agent:利用大模型实现更复杂的对话策略,让大模型自身决策查询和回复策略。
适应性增强:RAG系统将更加灵活,能够适应不同的下游任务和场景,如分类任务的优化。
评估与系统效应:发展更全面的评估方案,考虑到RAG系统内的各模块协同效应,以及如何最大化系统整体性能。
微调侧重于通过广泛学习使模型模仿特定结构、风格或格式,适用于强化已有知识或调整模型输出,但不适合快速引入新知识或适应新场景。
RAG更专注于提供即时的、具体的知识检索,适用于解答具体问题或执行特定的信息检索任务。通过结合RAG和微调,可以在不同层面增强模型的能力,达到最佳的性能状态。
RAG的评估方法
人工评估
邀请专家或人工评估员对RAG生成的结果进行评估。根据预先定义的标准对生成的答案进行质量评估,如准确性、连贯性、相关性等。这种评估方法可以提供高质量的反馈,但可能会消耗大量的时间和人力资源。
自动化评估
LangSmith
准备测试数据集,可以评估RAG效果,对于LangChain的Prompt模板等都可进行测试评估。
Langfuse
LangSmith的平替,也具有自动化评估的功能。
准备测试数据集,可以评估RAG效果,对于LangChain中的Prompt模板等都可进行测试评估。
以上两个平台都可以自定义自己的评估函数,也支持一些内置的评估函数。
TruLens
旨在评估和改进 LLM 应用的软件工具,相对独立,可以集成 LangChain 或 LlamaIndex 等 LLM 开发框架。使用反馈功能来客观地衡量 LLM 应用的质量和效果,包括分析相关性、适用性和有害性等。提供程序化反馈,支持 LLM 应用的快速迭代,比人工反馈更快速、更可扩展。
- 开源链接:GitHub - truera/trulens: Evaluation and Tracking for LLM Experiments
- 使用手册:https://www.trulens.org/trulens_eval/install/
使用的步骤:
(1)创建LLM应用
(2)将LLM应用与TruLens连接,记录日志并上传
(3)添加 feedback functions到日志中,并评估LLM应用的质量
(4)在TruLens的看板中可视化查看日志、评估结果等
(5)迭代和优化LLM应用,选择最优的版本
TruLens 对 RAG 的评估主要有三个指标:
上下文相关性(context relevance):衡量用户提问与查询到的参考上下文之间的相关性
忠实性(groundedness ):衡量大模型生成的回复有多少是来自于参考上下文中的内容
答案相关性(answer relevance):衡量用户提问与大模型回复之间的相关性。
其对RAG的评估不需要有提前收集的测试数据集和相应的答案。
常用评估指标
Trulens 的RAG三元组指标
上下文相关性(context relevance):衡量用户提问与查询到的参考上下文之间的相关性
忠实性(groundedness ):衡量大模型生成的回复有多少是来自于参考上下文中的内容
答案相关性(answer relevance):衡量用户提问与大模型回复之间的相关性
RAGAS的四个指标
评估检索质量:
context_relevancy:上下文相关性, context_precision
context_recall:召回性,越高表示检索出来的内容与正确答案越相关,评估生成质量
faithfulness:忠实性,越高表示答案的生成使用了越多的参考文档
answer_relevancy:答案的相关性
其它指标
参考论文:https://arxiv.org/pdf/2309.01431.pdf
(1)噪声鲁棒性(Noise Robustness)
衡量从噪声文档中提取有用的信息能力。在现实世界中,存在大量的噪声信息,例如假新闻,这给语言模型带来了挑战。
(2)否定拒绝(Negative Rejection)
当检索到的文档不足以支撑回答用户的问题时,模型应拒绝回答问题,发出"信息不足"或其他拒绝信号。
(3)信息整合(information integration)
评估模型能否回答需要整合多个文档信息的复杂问题,即,当一个问题需要查找多个文档,综合信息之后才能回答时,模型的表现。
(4)反事实鲁棒性(CounterfactualRobustness)
模型能否识别检索文档中已知事实错误的能力,即当索引的文档信息原本就是与事实相背时,大模型能否识别出不对。
参考: