混合RAG系统,提升复杂推理任务表现 原创

发布于 2024-11-28 16:46
浏览
0收藏

前言

检索增强生成(RAG)系统在处理复杂推理任务方面展现出显著的潜力。然而,现有的RAG系统在面对需要复杂推理、多领域知识集成及数值计算的任务时,仍存在性能瓶颈。为了进一步提升系统的表现,本文提出了一种混合RAG系统,通过整合多种优化方法,显著增强了系统的推理能力和处理复杂任务的能力。本文介绍的RAG系统设计并实现了一个包括网页处理、属性预测、数值计算、LLM知识提取、知识图谱及推理模块在内的综合架构。该系统能够有效地从多种来源提取信息,并通过高级推理模块结合这些信息,生成高质量的答案。

一、方法

混合RAG系统,提升复杂推理任务表现-AI.x社区

混合RAG系统整体架构

混合RAG系统包括六个关键模块:网页处理、属性预测器、数值计算器、LLM知识提取器、知识图谱模块和推理模块。

  1. 网页处理:使用trafilatura和BeautifulSoup库从网页中提取文本和表格,然后使用Blingfire库将文本分割成句子,并根据关键词将句子组织成文本块。
  2. 属性预测器:通过LLMs和SVM分类器评估问题的领域、类型和时效性,以优化模型在不同问题类型上的性能。
  3. 数值计算器:利用外部Python解释器进行数值计算,通过LLMs生成数学表达式,并使用eval函数处理这些表达式。
  4. LLM知识提取器:利用LLMs内部的知识进行推理,减少对外部参考文档的依赖。
  5. 知识图谱模块:通过模拟API查询知识图谱,使用LLMs生成查询语句。
  6. 推理模块:结合文本块、表格、知识图谱三元组和LLM知识进行最终答案的推理,通过设计良好的提示模板和控制推理路径来实现。

1.1 网页处理

混合RAG系统,提升复杂推理任务表现-AI.x社区

网页处理

  1. 文本块处理

使用trafilatura库从网页中提取纯文本,该库能有效去除噪声,如页眉、页脚和链接。

对于trafilatura无法处理的网页,使用BeautifulSoup作为备选方案。

利用Blingfire库将提取的文本分割成句子。

根据关键词将句子组织成文本块,例如,将问题和其后的文本连接起来,直到达到预设的长度阈值。

  1. 表格处理
  • 使用BeautifulSoup提取网页中的表格,并将其转换为Markdown格式。
  • 清理空表格以减少噪声。
  1. 文本嵌入和rank指标

混合RAG系统,提升复杂推理任务表现-AI.x社区

rank指标

  • 使用sentence-t5-large模型生成文本块和查询的向量嵌入。
  • 采用余弦相似度作为排名指标,计算用户查询嵌入和文本块嵌入之间的相似度。

1.2 属性预测

  1. In-Context Learning(ICL):利用大型语言模型(LLMs)的自然语言理解和多任务泛化能力。通过向模型提供分类指令和5个类别的示例,指导其对后续问题进行分类。采用自我一致性策略,多次采样模型的输出,选择出现频率最高的类别作为问题的分类结果。
  2. 支持向量机(SVM):使用CRAG公开数据集训练一个SVM分类器。利用MiniLM-L6-v2模型获取句子嵌入,用于训练SVM。SVM模型在预测属性方面表现出较高的准确性,并且计算开销较小。

混合RAG系统,提升复杂推理任务表现-AI.x社区

属性预测提示词

1.3 数值计算

  1. 生成数学表达式:鼓励大型语言模型(LLMs)将推理过程表述为数学表达式。将可能包含数值信息的检索到的文本块和表格整合到模型的提示中。使用提示技术促使模型直接生成有效的Python表达式。
  2. 计算表达式:使用多次采样生成Python表达式,并通过eval函数处理这些表达式以得到计算结果。

混合RAG系统,提升复杂推理任务表现-AI.x社区

数值计算提示词

  1. 安全性和终止执行:LLMs生成的程序代码可能包含恶意代码,直接执行这些代码可能对系统稳定性构成威胁。为了确保系统安全,最佳实践是使用ast.literal_eval或在沙箱环境中执行代码。

1.4 LLM知识提取器

知识提取器的过程类似于常规的模型生成过程。使用zero-shot提示,这些提示要求模型评估给定查询是否涉及错误前提,并生成更简洁的响应。在提示中不包含来自外部知识库的参考文档,并且不包括多次采样,以减少计算开销。

LLM能够仅基于训练过程中内部化的知识进行响应。这种方法在处理被分类为慢变和稳定的问题时表现良好。

直接让模型回答问题可能会引入幻觉,尽管使用了零样本CoT推理。为了平衡幻觉和LLM内部知识,系统将LLM知识提取器的输出仅作为参考之一。设计了特定的提示,确保模型既不过度依赖文档参考,也不过分信任LLM的知识。

提示模板旨在让LLM基于所有参考信息进行推理并得出最终答案。通过输出格式示范和零样本CoT控制推理过程,这对于多跳问题特别有用。利用Llama3-70B-Instruct的强指令遵循能力,成功地在控制推理任务方面取得了稳步进展。

设计了多条规则来约束推理路径和输出格式,确保输出精确。通过在提示中提出中间问题来引导模型推理。

混合RAG系统,提升复杂推理任务表现-AI.x社区

LLM知识提取器提示词

1.5 知识图谱抽取模块

使用 函数调用方法:系统从查询中提取实体,并使用LLM生成函数调用来检索相关信息。函数调用的质量取决于LLM生成的查询语句的质量。

混合RAG系统,提升复杂推理任务表现-AI.x社区

混合RAG系统,提升复杂推理任务表现-AI.x社区

知识图谱抽取模块提示词-函数调用方法的提示模板

1.6 推理模块

  1. 输入信息整合:推理模块接收来自网页处理、数值计算器、LLM知识提取器和知识图谱模块的所有参考信息,包括文本块、表格、知识图谱三元组和LLM生成的知识。
  2. 提示模板设计:设计了一个详细的提示模板,用于指导大型语言模型(LLM)进行推理。提示模板包括系统提示和用户提示。系统提示明确了任务要求、规则和输出格式。用户提示包含了具体的查询和参考信息。
  3. 推理路径控制:通过输出格式示范和零样本CoT技术,控制推理路径,特别是对于多跳问题。设计了多条规则来约束推理路径和输出格式,确保输出精确。
  4. 中间问题引导:在提示中提出中间问题,引导模型进行逐步推理,从而提高推理的准确性和详细程度。
  5. 处理不确定性和错误:如果参考信息不包含回答问题所需的信息,或者模型无法基于当前知识直接回答问题,模型将回答“我不知道”。如果问题的前提是错误的,模型将回答“无效问题”。
  6. 最终答案生成:模型生成的推理过程和最终答案必须遵循严格的格式要求,确保答案简洁且详细解释推理过程。

混合RAG系统,提升复杂推理任务表现-AI.x社区

混合RAG系统,提升复杂推理任务表现-AI.x社区

推理模块提示词

1.7 处理边界情况

  1. 无效问题:通过分析提供的参考信息,识别出具有错误前提的问题,即查询与事实相矛盾的问题。在推理提示中添加特殊规则,使模型在这种情况下输出“无效问题”。
  2. 减少幻觉:使用属性预测器和推理模块来减少幻觉。对于时间变化的问题,模型会回答“我不知道”,因为这些问题难以处理。在推理模块中添加规则和提示工程技术,使模型在不确定时回答“我不知道”。
  3. 格式错误:由于未对推理输出进行约束采样,模型可能会生成无法解析的答案。设计了一个备份总结代理,当解析失败时,基于推理模块的输出生成简洁准确的总结。设计了一个备份总结代理,当解析失败时,基于推理模块的输出生成简洁准确的总结。

混合RAG系统,提升复杂推理任务表现-AI.x社区

备份总结代理提示词

二、实验

混合RAG系统,提升复杂推理任务表现-AI.x社区

  • 领域属性表现:系统在电影、音乐和开放领域表现良好,但在金融和体育领域表现不佳,主要因为这些领域需要处理动态信息。
  • 动态性问题:随着问题的动态性增加,系统的有效性逐渐下降。
  • 问题类型表现:系统在需要复杂推理的任务上表现优异,这得益于强大的推理模块。

混合RAG系统,提升复杂推理任务表现-AI.x社区

消融实验

数值计算器和推理模块对系统性能的提升贡献显著。

总结

本文介绍了一种混合检索增强生成(RAG)系统,通过一系列综合优化显著提高了检索质量、增强了推理能力并提升了数值计算能力,通过多个模块的协同工作显著提升了LLMs在复杂推理任务中的表现。

参考文献


本文转载自公众号大模型自然语言处理  作者:余俊晖

原文链接:​​https://mp.weixin.qq.com/s/KVSVPSpY0epi85xgF2h5Cw​

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2024-11-28 18:47:06修改
收藏
回复
举报
回复
相关推荐