检索增强生成技术,简称RAG(Retrieval-Augmented Generation),广泛用于LLM的定制化,尤其是知识密集型的NLP任务。可以帮助模型在不改变权重的情况下掌握「长尾知识」和最新信息,并适应到特定的领域。
RAG的工作流程:对于给定问题,由一个基于文本编码的稠密模型从外部数据库中检索到top-k个文本段,然后输入给LLM进行读取,以此为基础进行生成。
问题:
· 如果k值较大(如:100),即使是支持长上下文的窗口的LLM也很难快速读取这么多文本块,随着k值的增大,性能会很快饱和。
· 同时研究表明,k值在5或10这个量级时,生成结果的准确性更高。因为过多上下文会引入不相关内容,妨碍LLM生成准确答案,
· 检索器的表达能力有限(如稀疏检索模型如BM25,或中等大小的编码模型如BERT-based),无法捕获所有相关信息。可再加上一个交叉编码(cross-encoding)的排名模型,排名模型从数据库中检索到top-N个候选 (N ≫ k),再经过一次排名得到最终top-k结果。
· 与通用的LLM本身相比,专家排名模型的零样本泛化能力相对有限,上游检索结果的质量很可能造成下游LLM生成任务的瓶颈。
RankRAG
论文:[2407.02485] RankRAG: Unifying Context Ranking with Retrieval-Augmented Generation in LLMs
使用LLM同时完成上下文检索和内容生成任务,通过设计RAG的指令调优来实现。
OpenAI的GPT-4报告中就发现,检索、排名过程中发展出的「确定文本块与问题是否相关」的能力对答案的生成同样有用,可被视为「双重能力」。
RankRAG在训练过程中引入了一项带指令的问答任务,让模型能够识别出与问题相关的上下文或段落,便于在推理时对检索结果进行排名。如果将一部分排名数据集成到指令微调中,还能增强LLM在RAG排名任务中的性能,甚至超过了单独用LLM和排名数据进行微调的结果。
在推理阶段,RankRAG流程没有变化,首先检索出带有相关性分数的top-N结果,然后进行重新排名并保留top-k段落,将其与问题连接到一起进行生成。主要的不同点在于模型训练过程,使用了两个阶段的指令微调直接增强LLM的相关能力,而不是在模型外部添加额外操作。
第一阶段首先进行监督微调(SFT),提高LLM的指令跟随能力,虽然与RAG关系不大,但可以为接下来的指令微调过程做好铺垫。
-
上下文丰富的QA数据:涵盖了DROP、NarrativeQA、Quoref、ROPES、NewsQA、TAT-QA等数据集,每条数据包含问题、黄金上下文(golden context)和答案
-
会话QA数据集:如Synthetic Conversation和HumanAnnotatedConvQA,同时包括对话内容以及一份背景文档
-
检索增强的QA数据:不仅包括SQuAD和WebQuestions中的问题和答案,还用BM25将黄金上下文和检索到的top结果组合起来,确保每条数据都有5个上下文,其中有些上下文可能不包括问题答案,甚至是hard-negative,这是为了重点提高LLM对不相关上下文的鲁棒性
-
上下文排名数据:使用流行的MS Marco语义相关性数据集,将其中的黄金样本视为相关的查询-段落对 (𝑞,𝑐+),BM25挖掘的hard negtive (𝑞,𝑐−)则被视为不相关,让LLM对这些样本的相关性进行二元分类(True或False)
-
检索增强的排名数据:同样使用QA数据集SQuAD和WebQuestions,以及BM25检索到的上下文,训练LLM的对相关性进行排名的能力
问题:这种方法微调的模型也只是针对特定方向的问答?
SODA
https://github.com/Liuziyu77/Soda?tab=readme-ov-file
FastRAG
针对半结构化数据的RAG方法。用模式学习和脚本学习提取结构化数据,无需将整个数据源提交给LLM。将文本搜索与知识图谱(KG)查询结合,提高在问答任务中检索上下文信息的准确性。
针对的问题:
1. 网络数据处理的复杂性和挑战
随着网络规模的扩大,网络数据的多样性和复杂性显著增加。网络管理任务需要高效处理和理解半结构化数据,如日志和配置文件。传统的网络数据处理工具在全面提取和利用嵌入在半结构化数据中的信息方面存在不足。从不同供应商关联这些数据由于网络服务的分散实现而变得更加复杂。
2. 现有RAG方法的局限性
现有的RAG方法如VectorRAG和GraphRAG在处理半结构化技术数据时存在一些局限性:
VectorRAG:基于语义相似性从文本文档中提供上下文检索,但在处理网络数据的领域特定关键词时表现不佳,因为这些关键词在不同上下文中可能具有不同含义。
GraphRAG:通过利用知识图谱(KG)组织从源文档中提取的信息,但在提供有用答案方面存在不足,特别是在查询需要精确匹配的特定值(如名称或类型)。
HybridRAG:结合了VectorRAG和GraphRAG的优势,提高了响应的准确性和上下文相关性,但仍继承了其基础方法的局限性。
3. 处理时间和成本的挑战
现有的RAG系统依赖LLM来提取结构化信息,通常需要将源文档分成小块并逐块处理,导致处理时间和成本的增加。特别是在处理大规模和频繁变化的网络数据时,这种逐块处理的方法效率低下且成本高昂。
4. 信息检索的准确性和效率
在网络管理中,准确和高效的信息检索至关重要。现有的RAG方法在处理半结构化技术数据时,无法充分利用数据的隐含信息,导致检索效率低下和准确性不足。
方法:
FastRAG引入模式学习和脚本学习技术。通过模式学习,系统能够自动识别和结构化源数据中的实体类型及其属性,而无需将整个数据源提交给LLM。脚本学习则进一步生成解析函数,以高效提取和处理数据。
FastRAG将文本搜索与知识图谱(KG)查询相结合,提高在问答任务中检索上下文丰富信息的准确性。文本搜索基于精确的措辞或结构进行匹配,而KG查询则利用图数据库的结构化信息,两者结合可以更全面地回答复杂查询。
FastRAG通过生成JSON模式和Python代码进行数据结构化和解析,避免了通过LLM处理所有源数据的过程,显著减少了处理时间和成本,特别是在处理大规模和频繁变化的网络数据时。
AutoRAG
论文:https://arxiv.org/abs/2411.19443
Git代码:https://github.com/ictnlp/Auto-RAG
- 迭代检索自动化:Auto-RAG利用大型语言模型(LLMs)的决策能力,自动化地进行迭代检索,减少人为干预和计算成本。
- 处理复杂查询和噪声问题: 在处理复杂问题时,现有RAG难以通过单次检索获取足够的知识,并且检索内容可能包含噪声,影响了RAG整体性能。Auto-RAG通过系统地规划检索和提炼查询来获取有价值的知识,直到收集到足够的外部信息,从而提高了性能。
- 提高LLMs的推理和决策能力: 以往的方法忽视了LLMs在推理和决策方面的能力,而Auto-RAG则充分发挥了LLMs在确定何时以及检索什么内容方面的潜力。
- 增强模型的解释性和用户体验: Auto-RAG以自然语言形式表达迭代检索过程,提高了模型的可解释性,并为用户提供了更直观的体验。
Auto-RAG试图通过自动化的迭代检索和利用LLMs的内在推理能力,来解决现有RAG系统在处理复杂查询和噪声问题时的性能瓶颈,同时提高模型的解释性和用户体验。
参考: