当前位置: 首页 > ds >正文

通用RAG:通过路由模块对多源异构知识库检索生成问答思路

如何在多个语料库(多源异构知识库,如:文本、图片、视频)中检索和整合来自不同模态和粒度的知识?UniversalRAG:一种新的RAG框架,用于从多个模态和粒度的语料库中检索和整合知识。下面来看看思路,供参考。

方法

 (A) 单一模态的 RAG 仅检索一种模态的数据。(B) 单一语料库的 RAG 专注于检索数据模态,而忽略语义。(C) UniversalRAG使用路由器和多个语料库有效地支持多样化的查询,涵盖不同的模态和粒度。

从上图可以看到,UniversalRAG的核心思想是通过动态识别和路由查询到最合适的模态和粒度知识源来进行检索

  1. 模态感知检索(Modality-Aware Retrieval):

    • 多模态语料库:UniversalRAG维护三个独立的嵌入空间,分别对应文本、图像和视频模态。每个模态的语料库被组织成不同的子语料库,如:文本语料库分为段落级和文档级,视频语料库分为完整视频和视频片段。

    • 路由模块(Router):引入一个路由模块,Router,动态选择每个查询的最合适模态。给定一个查询q,Router预测查询相关的模态r,并从相应的模态特定语料库中选择相关项c。

  2. 粒度感知检索(Granularity-Aware Retrieval):

    • 多粒度支持:为了灵活适应不同查询的信息需求,UniversalRAG在每个模态内进一步划分为多个粒度级别。例如,文本语料库分为段落级和文档级,视频语料库分为视频片段和完整视频。

    • 路由决策:路由决策r分为六类:无检索(None)、段落(Paragraph)、文档(Document)、图像(Image)、片段(Clip)、视频(Video)。检索过程根据路由决策r进行,具体公式如下:

路由模块设计:

一、无训练的路由

无训练的路由利用预训练的LLM的内在知识和推理能力来分类查询。步骤如下:

  1. 提示设计:给定一个查询q,LLM会被提供一个详细的指令描述路由任务,并附带几个上下文示例。
  2. 预测路由类型:LLM根据提示和示例预测查询最合适的检索类型,从六个预定义的选项中选择。

小结:这种方法的优势在于不需要额外的训练数据,利用了LLM的强大泛化能力。然而,其性能可能受限于LLM的预训练知识和推理能力。

二、训练路由

为了提高路由的准确性,UniversalRAG还探索了训练路由模块的方法。训练路由模块面临的主要挑战是缺乏查询标签对(ground-truth query-label pairs)来进行最优语料库选择的监督。为此,文章采用了一种间接的方法来构建训练数据集:

  1. 利用基准测试的归纳偏差:假设每个基准测试主要与特定的模态和检索粒度相关联。例如,文本问答基准测试中的查询可能主要需要段落级别的信息,而多跳问答基准测试可能需要文档级别的信息。
  2. 标签分配:
    • 对于文本问答基准测试,查询被标记为’None’(如果查询可以仅通过模型的参数知识回答)、‘Paragraph’(单跳RAG基准测试)或’Document’(多跳RAG基准测试)。

    • 对于图像基准测试,查询被标记为’Image’。

    • 对于视频问答基准测试,查询被标记为’Clip’(如果查询关注视频中的局部事件或特定时刻)或’Video’(如果查询需要理解整个视频的故事情节或更广泛的上下文)。

不同路由器模型大小的路由器准确率

性能效果

在八个多模态数据集上比较 UniversalRAG 模型与基线的总体结果。UniversalRAG(我们的模型)以彩色单元格表示,包含针对 DistilBERT 和 T5-Large 训练的路由器模型,以及基于 GPT-4o 的免训练路由器方法。通过自适应地为每个查询选择最佳检索模态,UniversalRAG 的性能与 Oracle 检索选择的性能相当,并且平均而言优于所有基线。

检索粒度对两个基准测试的性能影响:HotpotQA(需要对文档进行多跳推理)和 LVBench(其查询通常可用短视频片段进行回答)。具有粒度的 UniversalRAG 始终优于无粒度的模型,这突显了结合不同粒度级别可以增强 UniversalRAG 自适应处理各种用户问题的能力。

参考:UniversalRAG: Retrieval-Augmented Generation over Multiple Corpora with Diverse Modalities and Granularities,https://arxiv.org/pdf/2504.20734

http://www.xdnf.cn/news/5803.html

相关文章:

  • C++ asio网络编程(5)简单异步echo服务器
  • 自动发电控制是一次调频还是二次调频?
  • 运行Spark程序(二)RDD基本概念和创建
  • 【Vue】Composables 和 Utils 区别
  • SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)
  • 图形化编程平台的破局之道:从工具同质化到生态差异化
  • Matlab自学笔记五十四:符号数学工具箱和符号运算、符号求解、绘图
  • 解决vue create 创建项目,不能使用上下键选择模板的问题
  • Redis集群模式、持久化、过期策略、淘汰策略、缓存穿透雪崩击穿问题
  • Python-AI调用大模型 给出大模型人格案例
  • git如何将本地 dev 分支与远程 dev 分支同步
  • ros1+docker环境快速搭建
  • 面试题 - Redis 为什么要RDB 和 AOF两种持久化方式?
  • Windows DOS下的常用命令 及 HTML
  • 如何使用快捷键打开 Microsoft Word 和其他 Windows 应用程序
  • Leetcode-BFS问题
  • 消防设施操作员备考练习题库及答案解析
  • MCP 入门实战:用 C# 开启 AI 新篇章
  • qt命名空间演示
  • SAGAR线上网页程序生成准随机结构(SQS)
  • IP 地址、银行卡等多维数据于风险控制的作用
  • 下载知网外文文献全文的方法
  • cs224w课程学习笔记-第11课
  • ComfyUI的K采样器参数详解:实战演示
  • 青少年编程与数学 02-019 Rust 编程基础 07课题、字符串
  • Linux常用命令(持续完善)
  • DAY05:深入解析生命周期与钩子函数
  • 编写一个处理txt的loader插件,适用于wbepack
  • MCU开启浮点计算FPU
  • 【Pandas】pandas DataFrame cov