上下文多模态文档检索开源思路-CMDR模型架构实现方法
现有多模态文档检索的两大缺陷:
Benchmark 层面:现有的多模态文档检索基准(如 SlideVQA、MMLongBench、ColPali/ViDoRe、VisR-Bench 等)都是【直接检索】——query 和目标 page 之间存在明显的词汇或语义匹配。忽略了真实文档中存在的:跨页依赖、文档全局结构。
模型层面:ColPali、VisRAG、DSE、UniSE 等主流方法都是独立编码每一页,隐式假设"上下文对 embedding 无益"。但实际中:一个代词、一个缩写、一个表格续行的 header,可能只在别的页出现。
往期:
CMDR(Contextual Multimodal Document Retrieval)是一个新的多模态文档检索任务,要求系统在利用文档上下文的前提下,从多页文档(即一组有序的文档图像)中检索出相关页面。
- 输入:queryqqq+ 多页文档D={I1,…,In}\mathcal{D} = \{I_1, \dots, I_n\}D={I1,…,In}
- 输出:top-kkk页D+⊂D\mathcal{D}^+ \subset \mathcal{D}D+⊂D,且k≪nk \ll nk≪n
- 关键约束:识别D+\mathcal{D}^+D+必须依赖上下文页面推理,而不是仅看D+\mathcal{D}^+D+自身内容
下面主要看一下模型架构设计
模型架构:CMDR-Embed
总体思想是Chunk-then-Split(先联合编码,后拆分)
与 ColPali 最本质的区别:ColPali 等是每页独立过 LVLM,得到独立 embedding;CMDR-Embed是连续多页当成一个 chunk 一起过 LVLM,token-level 表示自然带上跨页上下文;再按页边界切开,得到每页的 contextualized embedding。
Contextualized Multimodal Encoding(滑动窗口机制)
给定NNN页的文档{I1,…,IN}\{I_1, \ldots, I_N\}{I1,…,IN}:
- stridesss、windowwww的滑动窗口
- 第ttt个 chunk 是{Is(t−1)+1,…,Is(t−1)+w}\{I_{s(t-1)+1}, \ldots, I_{s(t-1)+w}\}{Is(t−1)+1,…,Is(t−1)+w}
- 每个 chunk 送进 LVLM → 得 token-level 表示 → 按页拆成EnI∈RNI×D\mathbf{E}^{\mathbf{I}}_n \in \mathbb{R}^{N^I \times D}EnI∈RNI×D
- 当 chunks 重叠(s<ws < ws<w)时,同一页可能出现在多个 chunk:取更早那个 chunk 的表示(避免重复计算)
- 最优配置:s=2,w=4s=2, w=4s=2,w=4(每个 chunk 4 页,每次滑 2 页,相邻 chunk 有 2 页重叠)
Q:为什么滑动窗口而不是全文档一次编码?
A:显存/算力限制 + 提高实用性;重叠又保证了 chunk 之间的信息交互。
Multimodal Late Interaction(LI,多向量检索)
沿用 ColBERT/ColPali 的多向量匹配方式(不用单向量 mean pooling):
LI(q,In)=∑i∈[1,Nq]maxj∈[1,NI]⟨Eqi,EnIj⟩ \mathbf{LI}(q, I_n) = \sum_{i \in [1, N^q]} \max_{j\in [1, N^I]} \langle\mathbf{E}^{\mathbf{q}_i},\mathbf{E}^{\mathbf{I}_j}_n\rangleLI(q,In)=i∈[1,Nq]∑j∈[1,NI]max⟨Eqi,EnIj⟩
即:query 的每个 token 找 page 中最相似的 token,取内积,再对所有 query token 求和。保留了 token 级细粒度,对文档检索(有图表、小文字、表格)尤其重要。
去掉 LI 改用 mean pooling + cosine,CMDR-Embed-Pali 直接掉26.5 分(49.8 → 23.3)。
训练目标:CMCL(Contextual Multimodal Contrastive Learning)
问题:联合编码带来的"信息泄漏",Chunk-then-split 会让同 chunk 内不同页的表示互相"污染"(因为它们过了同一次 attention),页级判别性下降 —— 邻近页面 embedding 变得太像,反而检索不出目标页。
解法:两种"上下文感知硬负例",
在标准 InfoNCE 基础上引入两类hard negative:
| 硬负例类型 | 定义 | 直觉 |
|---|---|---|
| In-Chunk NegativesIchunk\mathcal{I}_{\text{chunk}}Ichunk | 与正例同一 chunk 内的其他页 | 当相似上下文出现在邻近页时最有效;防止相邻页 embedding 过于相似 |
| In-Document NegativesIdoc\mathcal{I}_{\text{doc}}Idoc | 同一文档的其他 chunk | 当相似信息出现在远处页面时最有效;保持全文档判别性 |
短距离靠 in-chunk、长距离靠 in-doc。
CMCL Loss函数:
其中:
实验
参考文献
- CMDR: Contextual Multimodal Document Retrieval,https://arxiv.org/abs/2607.05927v1
- https://github.com/nttmdlab-nlp/CMDR-Bench