多模态文档问答:视觉优先的 PDF、表格、图表 本节摘要:2026 年的文档问答前沿,从「先 OCR 再文本」转向了「视觉优先的后期交互(Late Interaction)」。ColPali、ColQwen2.5、ColQwen3-omni 把每一页 PDF 当图像,用多向量后期交互嵌入,让查询直接注意到图像块(Patch)。在财报 10-K、科学论文、手写笔记上,这个范式大幅胜过「OCR 优先」。本节要求你在 1 万页上端到端构建这条流水线,对照「OCR 优先」基线,并发布一张「内容类型 × 方法」的评估矩阵。你会学到 MaxSim、DocPruner 50% 压缩、多向量索引,以及何时该让 OCR 退化为公式与密集表格的备用通道。
本节摘要:2026 年的文档问答前沿,从「先 OCR 再文本」转向了「视觉优先的后期交互(Late Interaction)」。ColPali、ColQwen2.5、ColQwen3-omni 把每一页 PDF 当图像,用多向量后期交互嵌入,让查询直接注意到图像块(Patch)。在财报 10-K、科学论文、手写笔记上,这个范式大幅胜过「OCR 优先」。本节要求你在 1 万页上端到端构建这条流水线,对照「OCR 优先」基线,并发布一张「内容类型 × 方法」的评估矩阵。你会学到 MaxSim、DocPruner 50% 压缩、多向量索引,以及何时该让 OCR 退化为公式与密集表格的备用通道。
对应原课程:Phase 19 · Lesson 04 ·
multimodal-document-qa(原英文phases/19-capstone-projects/04-multimodal-document-qa/docs/en.md)。
阅读完本节,你应当能够:
企业坐在一堆 OCR 流水线搞砸的 PDF 上:旋转表格的扫描 10-K、满是公式的科学论文、只有作为图像才有意义的图表、手写批注。把这些当文本优先处理,意味着丢掉一半信号。2026 年的答案是:在原始页图像上做多向量后期交互检索。ColPali(Illuin Tech)引入它;ColQwen2.5-v0.2 与 ColQwen3-omni 推高精度。在 ViDoRe v3 上,视觉优先检索在图表、表格、手写上的优势尤其明显——差距在那里被拉大。
权衡是存储与延迟。ColQwen 嵌入是每页约 2048 个 patch 向量,不是单个 1024 维向量,原始存储膨胀。DocPruner(2026)做到 50% 剪枝而无肉眼可见的精度损失。你要索引 1 万页,度量 ViDoRe v3 nDCG@5,2 秒内出答案,并直接对照 OCR 优先基线。
后期交互意味着每个查询 token 对每个 patch token 打分,每个查询 token 取最大值再求和。你得到细粒度匹配,而不需要单个池化向量。多向量索引(Vespa、Qdrant multi-vector、AstraDB)存每个 patch 的嵌入,在检索时跑 MaxSim。
MaxSim 的核心(查询 token 对文档 patch 取最大再求和):
def maxsim(q_emb, page_patches): # q_emb: [Lq, D] page_patches: [Np, D] sims = q_emb @ page_patches.T # [Lq, Np] return sims.max(axis=1).sum() # 每个查询 token 取最大,再求和
作答器是一个视觉语言模型,把查询加 top-k 检索页图像一起吃进去,写出带证据区域(边界框或页码引用)的答案。Qwen3-VL-30B、Gemini 2.5 Pro、InternVL3 是 2026 前沿之选。对公式与科学符号,把一个 OCR 备用(Nougat、dots.ocr)作为可选文本通道拼进去。
DocPruner 压缩(留高方差 patch,丢低信号):
def docpruner(patches, keep_ratio=0.5): # 按 patch 的方差/范数排序,保留信号最强的 keep_ratio scores = patches.norm(dim=-1) topk = scores.topk(int(len(patches) * keep_ratio)).indices return patches[topk] # 50% 压缩,< 0.5% 精度损失
评估是一个二维矩阵:一轴内容类型(纯文本段、密集表格、柱/折线图、手写、公式),另一轴检索方法(视觉优先后期交互 vs OCR 优先 vs 混合)。每格记 nDCG@5 与答案准确率。这张报告就是交付物。
outputs/skill-doc-qa.md 描述交付物:一个针对特定语料调优、并在 ViDoRe v3 上对照 OCR 优先基线评估的视觉优先多模态文档问答系统。评分量表:
| 权重 | 标准 | 度量方式 |
|---|---|---|
| 25 | ViDoRe v3 / M3DocVQA 精度 | 基准数字 vs OCR 文本基线与公开榜单 |
| 20 | 证据区域锚定 | 被引区域确实包含答案范围的比例 |
| 20 | 存储与延迟工程 | DocPruner 压缩比、索引 p95、答案 p95 |
| 20 | 多页推理 | 100 题人工标注多页集上的准确率 |
| 15 | 源审查 UX | 查看器清晰度、叠加保真、并排对比工具 |
| 100 |
一次典型问答:
$ doc-qa ask "what was the 2024 operating margin change for segment EMEA?" [retrieve] top-5 pages in 320ms (ColQwen2.5, MaxSim, Vespa) [synth] qwen3-vl-30b, 1.4s, cited (form-10k-2024, p. 88) + (..., p. 92) answer: EMEA operating margin moved from 18.2% to 16.8%, a 140bp decline. cited: 10-K-2024.pdf p.88 (Table 4, Segment Operating Margin) 10-K-2024.pdf p.92 (MD&A, Operating Performance) [viewer] open with highlighted bounding boxes overlaid on p.88 Table 4
索引侧,Vespa 的多向量与 MaxSim 最专业,适合大规模但运维重;Qdrant multi-vector 开箱即用、上手快;AstraDB 是托管选项,省运维。VLM 侧,Qwen3-VL-30B 自托管性价比高且能输出边界框,Gemini 2.5 Pro 托管质量顶但成本高,InternVL3 作为兜底。压缩上,DocPruner 的「留高方差 patch」策略在 50% 处几乎无损,但到 75%~90% 会出现精度断崖——练习里会让你找出这条悬崖。
下一节,我们升级到「自主科研 Agent」——构建一个能在 30 美元预算内自动跑实验、写论文、过同行评审的 AI 科学家。