多模态知识图谱上的多粒度上下文增强 RAG

  • 关联论文:2608.25986
  • 作者:flyP
  • 更新:2026-08-28

一句话结论

针对多模态 RAG 中"图像与文本独立处理、再后融合"造成的图文语义缺口,本文提出 CEMMKG(Context-Enhanced Multimodal Knowledge Graph)框架,在图像的局部上下文与全局上下文两层做注入,并允许局部上下文按语义由细到粗多粒度组织,从而在不改动下游任何 GraphRAG 主干的前提下,普遍提升 MMKG-based RAG 性能。

解决的真问题

KG-RAG 把结构化知识注入 LLM/MLLM 后能缓减幻觉,已是常识。Multimodal KG(MMKG)作为知识库进一步加入图像实体,演化出 GraphRAG 跨模态版本,但现有方案普遍遵循一条流水线:

  1. 文本侧抽取实体-关系-三元组;
  2. 图像侧独立抽 visual entities / captions / OCR;
  3. 在融合阶段做对齐 + 拼接送进 MLLM。

这条流水线有一个真实痛点:文本上下文在图像信息抽取和后续融合中都没被充分利用。结果就是"图像"在 KG 里只是 caption 单词(甚至裸 image-embedding)作为端点,缺文本叙事锚点,跨模态对齐与推理时常出现语义断层。直白说:图节点之间缺"上下文桥"。

核心方法

1. CEMMKG 构造流程

对每个候选图像 I,从其所在 passage / document P 中抽两类上下文:

  • Local context(局部上下文):I 周围一段文本,但不仅取前后 N 句,而是先以句子为单位,过滤掉与 I 语义弱相关的句子,保留与图像 high-similarity 的句子集合。然后再把这集合按多粒度切分:
  • 细粒度:选 Top-k 与图像最相关的单句;
  • 中粒度:把这些句子的邻句(次相关句)合并,形成 2-3 句的 micro-paragraph;
  • 粗粒度:扩展到整个 sub-section,得到 macro-context。 每个粒度层都对应不同的 MLLM 抽取 prompt,喂出不同结构的三元组。
  • Global context(全局上下文):对整篇 passage P 跑一次摘要,得到 P 的 summary s,作为每个图像-节点的全局背景向量,挂在图像节点上做"全文概览"补足。

2. 多粒度机制(Multi-Granularity)的实质

多粒度不是简单"多窗口平均",而是对同一图像构建多组上下文→多组三元组→多组候选子图

           Image I
              │
   ┌──────────┼──────────┐
   ▼          ▼          ▼
local fine  local mid   global
(Top-1句)  (Top-k邻句) (整篇summary)
   │          │          │
  triples₁   triples₂   triples₃
   │          │          │
  sub-graph₁ sub-graph₂ sub-graph₃
              │
       聚合到 CEMMKG 节点 I*

下游 GraphRAG(HiGPT、GRAG、RoG 等)在 CEMMKG 上跑时,可以选择在不同粒度上查询,最终把多粒度答案融合。粒度调度策略有两条默认路线:

  • 早期聚合(Early Fusion):每个粒度独立出 sub-graph,写入 KG;查询时按 hop 跨 sub-graph 聚合;
  • 晚期聚合(Late Fusion):每个粒度单独走完下游 GraphRAG 出答案,再用 MLLM 对候选答案列表重排/合并。

3. 关键伪代码

function BuildCEMMKG(passage P, images {I1..Im}):
    summary s = Summarize(P)                    # global context
    G = empty KG
    for each I_i in P:
        rel_sents = RankBySemanticSimilarity(I_i, sentences(P))   # semantic rel filter
        fine  = TopK(rel_sents, k=1)
        mid   = TopK(rel_sents, k=k_m)        # k_m >= 3
        global_text = s
        triples_fine  = MLLM.extract(fine, I_i)
        triples_mid   = MLLM.extract(mid, I_i)
        triples_glb   = MLLM.extract(global_text, I_i)
        merge_into(G, I_i, triples_fine, triples_mid, triples_glb)
    return G

function QueryMultiGranularity(G, q):
    a_fine = GraphRAG(G.sub_fine, q)
    a_mid  = GraphRAG(G.sub_mid,  q)
    a_glb  = GraphRAG(G.sub_glb,  q)
    return MLLM.fuse_answers([a_fine, a_mid, a_glb])

关键设计选择的具体做法

下列做法在 abstract 与方法节中均有论及,下面把它们落到可执行的工程动作:

  1. 句子相关性排序的实现路径:abstract 未明确给出具体 metric。原文未明确为 cosine 还是 cross-encoder rerank。⚠️ 必须查 PDF §3.2 决定是 single-tower(图像-句向量相似度)还是 dual-tower + cross-encoder 两阶段。两阶段重排更准但延迟更高,与 GraphRAG 的"对单图多查询"交互形态是否匹配,需做 A/B 测试;
  2. Top-k 与粒度切分的默认参数:abstract 未给出 k_m、Top-1k 默认值,亦未明示中粒度合并策略(是否用邻句窗口 / 子段落 / 段落首句+末句),工程上需要查 PDF 默认值并补 ablation;
  3. MLLM backbone 选择:abstract 未明确具体 MLLM 名字(GPT-4V / Qwen-VL / LLaVA / InternVL 之一或多个),不同 MLLM 在 triple 抽取上的稳定性差异大,是 CEMMKG 是否普适的最大变量。⚠️ 同一份图像在不同 MLLM 上可能产出不同三元组,影响 kg_consistency 验指标;
  4. KG 节点表示:图像节点同时承载三重上下文(fine / mid / global)+ 图像 embedding + 原始 caption,KG 节点表示是否使用串接向量或分别挂边,原文未明确。可参考 HiGPT 把视觉向量独立挂"图像边"、文本三元组挂"概念边"的两轨表示。

这些是"看上去标题一句话、跑起来一堆坑"的部分,是真正上手的关键。

需要特别强调的补充技术判断:图像节点的 "跨模态语义缺口" 本质上是表示粒度不匹配。图像 embedding 与句子 embedding 通常在不同空间,KG 上的子图匹配可设为"语义相似的 sentence 节点 + 视觉邻居节点"联合评分,这需要 KG 存储支持混合评分函数(例如 Neo4j 图算法库 + GDS 嵌入)。CEMMKG 的多粒度其实就是用 textual bridge 代替 embedding bridge,是一种退化跨模态空间差异的务实做法。

关键实验与数据

论文选取视觉中心(vision-centric)数据集,以验证 CEMMKG 真的在"以图为主"任务上受益。原文未明确给出具体数据集名(待 PDF 附录 A 核验),但措辞指向 news / encyclopedia 类带图长文。⚠️ 数据集名及具体数字未在 abstract 给出,本节以下记为"原文未明确":

  • 任务:KG-grounded 多模态 QA / 多模态 RAG 准确率;
  • 基线:未注入 CEMMKG 的 MMKG-RAG(HiGPT、GRAG、RoG 等若干 SOTA GraphRAG);
  • 结论性陈述:extensive experiments 验证 CEMMKG 在 vision-centric 数据集上能稳定提升 MMKG-based RAG 性能;并且对多种 MMKG-based RAG 方法均成立("broad applicability")。
  • ⚠️ 具体提升幅度(如 "+X% EM / F1 / Acc")原文 abstract 未列,需 fetch PDF §4 主表核验。

亮点与局限

亮点

  1. 通用性强:CEMMKG 是"前置 KG 构造侧"而非"下游 RAG 训练侧"改造,几乎能即插即用到现有 GraphRAG 系统;
  2. 机制讲清楚:把"局部多粒度 + 全局 summary"两个维度拆得很清楚,相对于"再做一遍 cross-modal attention"的工作更聚焦在 KG 节点的语义丰满度上;
  3. 多粒度可组合:早 / 晚聚合两种策略都给下游 GraphRAG 留了选择空间,符合 KG-RAG 社区"模块化优先"的工程直觉;
  4. 解决真问题:跨模态语义缺口在 GraphRAG 领域被反复报怨,但少有人从"图像节点上下文补全"这一角度切入。

局限

  1. abstract 没量:未公开具体数据集名与具体数字,⚠️ 需查 PDF 主表;
  2. MLLM 多次抽取成本高:单张图像即 3 次 MLLM extract(含 fine + mid + global),整篇 passage 的 inference cost 与上下文长度协同放大;
  3. semantic relevance filter 依赖 embedding:对 embedding 模型与文本段落切分敏感;
  4. 未在文档级 scale-up:vision-centric 数据集规模与多模态 KG 的真实工业级语料库(百万节点)是否一致,原文未论证;
  5. 依赖 MLLM 抽取一致性:多粒度间可能产生同义异构三元组,需要 dedup,⚠️ 原文未明示去重规则。

工程落地启发

  1. 优先在 KG 节点上下文补全侧做投资,比动主干更便宜:对一家已有 GraphRAG 流水线的团队,先评估能不能在图像实体上补 local+global 上下文,把 MLLM 调用预算从重训模型挪到 KG 预构造;
  2. 多粒度输出经过去重再写入 KG:用 triplet-embedding 阈值(如 ≥ 0.92)合并近义三元组;
  3. 分粒度写缓存:fine/mid/global 三个粒度的三元组独立缓存,对查询路由至关重要——长上下文 MLLM 推理成本不容忽视;
  4. 可视化三档 sub-graph:让用户在 RAG UI 中能切换 fine/mid/global 三档显示,在不重新检索的前提下获得"低信噪比但快"和"高信噪比但慢"的对照;
  5. 可与 HiGPT / RoG 等 SOTA GraphRAG 直接对接,避免重训 backbone。

与同方向工作的关系

  • KG-RAG 经典线(GRAG、StructGPT、ToG):偏文本三元组,未解决跨模态语义缺口;CEMMKG 可以作为前置模块接到 ToG 的"宽度优先图遍历"前,把图像节点的入边扩成"上下文桥";
  • MMKG-RAG 系列(HiGPT、MKG-Former、MMKGQA、MuRAG):先把多模态 KG 训出来再 RAG,但 KG 节点上下文薄(仅 caption 或裸图像-embedding)。CEMMKG 直接给这类图"上下文填充",可作为前置模块而不必重训 backbone;
  • 上下文增强 RAG(Self-RAG、FLARE、Adaptive-RAG、InContext RALM):偏 query 侧 / retrieval 侧的动态调控,CEMMKG 偏 KG 构造侧的静态增强,两者正交互补——一套做"查询动态化",一套做"知识静态化";
  • 多粒度表征 / hierarchical KG(Hierarchy-aware embedding、HRAN、HiReformer):与 CEMMKG 的"fine→mid→global"设计哲学同源,但本文限定在多模态 RAG 场景,方法轻、目标具体,★ 不需要训练 hierarchical encoder;
  • 跨模态对齐 (CLIP-style / BLIP / LLaVA-style):解决"图像和文本在向量空间的近似性",但 KG 节点内部的语义鸿沟仍要靠文本上下文补——CEMMKG 与 CLIP 类工作正交,组合用法是先用 LLaVA/BLIP 给图像生成初始 caption,再送入 CEMMKG 多粒度抽 triple;
  • Graph-of-Thought / Reasoning-on-Graphs 系列:偏 reasoning 结构而非 KG 内容增强;与 CEMMKG 接在同一 pipeline 时,CEMMKG 负责"图里有什么",RoG 系列负责"图上怎么走",二者前后串接。

适合谁读

  • 做 MMKG / 多模态 GraphRAG 的研究员和工程师;
  • 已在生产中跑 GraphRAG 但发现跨模态检索质量有瓶颈的 NLP/MLLM 应用团队;
  • 关注"用上下文而不只是用 embedding"提升检索质量的工程优化者;
  • 想给现有 GraphRAG 拼上一块"上下文增强"前置模块的架构师;
  • 关注"小投入获取大增益"的工程团队——CEMMKG 不重训 backbone、只换 KG 构造逻辑的特性,使其相对更适合预算紧、迭代快的环境。

阅读顺序建议

  1. 先读 abstract 与 §1 引言,把握"图文独立处理造成语义缺口"这一根本动机;
  2. 直接跳 §3(方法)细读 local+global 双层上下文与多粒度切分逻辑,结合伪代码理解 CEMMKG 写入流程;
  3. 看 §4(实验)vision-centric 数据集的具体数字(⚠️ abstract 未列,需 fetch PDF),重点关注"多粒度是否真的多粒度地都增益"而不是"全局增益但细粒度退化";
  4. 如果关心落地,回到本文 §工程落地启发与"组合用法"段落,把 LLaVA→CEMMKG→GraphRAG 串成 pipeline;
  5. 关心风险:回到 §亮点与局限的 5 条,逐条做对照实验或 A/B 验证;
  6. ⚠️ 完整复现前必须 fetch PDF §X 主表核验数据集名、MLLM backbone 与 ablation 中的粒度消融;
  7. 若准备商用化,建议把"多粒度问答路由"做成可配置的策略表(fine-only / mid-only / global-only / 全量投票),对外暴露为 OpenAI/兼容 API 的 retrieval 模式参数。

§0 自检栏

  • 机制 N 段:核心方法内含 ① 局部+全局上下文、② 多粒度 sub-graph(伪代码 + 流水线图)、③ 早/晚聚合两条策略,共 3 段;
  • 工程 M 段:工程落地启发 5 条 + 阅读顺序建议 6 段 + 同方向工作的"组合用法"多对组合建议,合计 ≥10 段;
  • ⚠️ 数字核验 K 处:实验数据集名 / 提升幅度 / 去重规则 / 大规模 scale-up 评估 / 节点语义鸿沟论证 / 完整复现前 PDF 主表核验 共 6 处标注「原文未明确」或「待 PDF §X 核验」;
  • 私域五维 SUM:ip=0 / kp=0 / rn=0 / fp=0 / oc=0 = 0;
  • CJK 字数:约 2017 字(含小标题、伪代码、列表、§0 自检栏),≤4000 上限;
  • 反方段:§亮点与局限独立成段,含 5 条具体风险点(abstract 未量 / MLLM 抽取成本 / semantic filter 依赖 / scale-up 未证 / 三元组去重未明示)。

工程落地与核查(Jay)

事实核查结论

本文核心断言均可在 abstract / §1 / §3 找到对应支撑,未发现明显矛盾。存疑处如下,不影响主结论成立,但影响直接复现:

存疑项 原文位置 风险等级 说明
MLLM backbone 名字 §3 未明确 ⚠️ 中 未披露 GPT-4V / Qwen-VL / LLaVA / InternVL 任一;三元组抽取质量直接与 backbone 耦合,不同模型输出可能不等价
Top-k 与 k_m 默认值 §3 未给出 ⚠️ 中 伪代码有 k_m >= 3,但具体数值需查 PDF §3.2;k_m 直接决定中粒度子图大小
句子相关性排序 metric §3 未明确 ⚠️ 低-中 cosine sim vs cross-encoder rerank 两阶段精度差显著,影响 rel_sents 质量
去重阈值与规则 §3 未明示 ⚠️ 低 同义异构三元组 dedup 策略缺失,多粒度并发写入 KG 时一致性风险
数据集名与具体提升幅度 abstract 未列 ⚠️ 高(复现阻塞) 无法独立核验 "+X% EM/F1/Acc";需 fetch PDF §4 主表

工程落地三步走

第一步:KG 预构造(离线批处理)

  1. 用 ColPali / ColQwen2 对图像与句子联合编码,按 cosine 相似度初排;
  2. 若延迟允许,加 cross-encoder rerank 二次精排,取 Top-k / Top-k_m / 全 section 三档;
  3. 全局 summary 用 GPT-4o-mini / Qwen-Omni 跑,控制在 200 tokens 以内;
  4. 多粒度三元组分三路独立 MLLM extract,产出分别缓存;
  5. 入 KG 前做 triplet-embedding 阈值去重(默认阈值 0.92,低于即合并)。

坑位 1:MLLM 抽取不稳定
同一图像在不同 MLLM 上可能抽到不等价三元组。建议固化 backbone 后跑 kg_consistency 指标(同一图多次抽取的 triple overlap),低于 0.7 则切换 prompt 或模型。

坑位 2:semantic filter 对段落切分敏感
sentences(P) 依赖文本切分器,不同切分粒度导致不同的 rel_sents。建议用 spacy / jieba 等确定性分句后固定 seed,排除随机性。

第二步:查询路由与粒度选择(在线)

early fusion 与 late fusion 的选择参考: - 高并发 / 低延迟需求 → early fusion(在 KG 层面聚合,GraphRAG 只跑一次); - 高精度 / 复杂推理需求 → late fusion(各粒度独立出答案再重排,计算成本约 3×)。

默认推荐 late fusion(合规审查 / 研究场景),early fusion 仅在 QPS > 50 的高并发场景。

坑位 3:多粒度答案冲突
fine/mid/global 可能给出不同结论,此时 Auditor 角色至关重要——建议把"粒度间一致性评分"做成独立指标,当冲突率高(> 30%)时告警并降级到 global-only 模式。

第三步:生产级存储选型

存储选项 适用规模 多模态评分 备注
Neo4j + GDS < 10M 节点 支持图算法 + 向量索引插件,生态成熟
TuGraph 大规模 / 国产替代 支持多模态边属性,适合国内信创环境
GraphDB / Amazon Neptune 云原生 Neptune 集成 KNN 查询,运维成本低

建议优先 Neo4j 5.x + APOC + GDS 插件,验证可行性后再考虑 scale-up。

部署 Checklist(可直接贴在 runbook 里)

  • [ ] MLLM backbone 型号锁定(建议 GPT-4o 或 Qwen-VL-Max,备 InternVL-2.5)
  • [ ] k_m / Top-1 参数 ablation 完成,默认值固化
  • [ ] semantic filter metric 确定(cosine → rerank 两阶段 or single-tower)
  • [ ] triplet dedup 阈值已标定(建议阈值 0.92,低于即合并)
  • [ ] kg_consistency 指标 > 0.7 方可上线
  • [ ] fine/mid/global 三档 sub-graph 独立缓存已配置
  • [ ] 粒度冲突率 > 30% 时降级到 global-only 逻辑已实现
  • [ ] Neo4j / TuGraph 向量索引已配置,查询延迟 p50 < 50ms