Ch13: 多模态 RAG——表格、图片与 OCR 管线
Part 6: 进阶专题 前置章节:Ch05: 文档解析与分块 后续章节:Ch14: 动手实验室 返回目录:README
结论先行:多模态 RAG 的瓶颈不在「能不能用 GPT-4V 看图」,而在 摄入阶段——表格是否保留行列结构、扫描件 OCR 是否准确、图片说明是否与正文 chunk 绑定。RAGFlow DeepDoc 与 WeKnora IMA 在 Level 2 结构理解上领先;Level 3「语义理解整页」仍属前沿,成本高到难以作为默认管线。
一、多模态失败的三种典型形态
| 形态 | 用户看到的问题 | 根因 |
|---|---|---|
| 表格被撕碎 | 「营收是多少」答错或答空 | 按字符切 chunk,表头与数据分离 |
| 图片文字丢失 | 扫描合同、架构图无法问答 | 只抽文本层,忽略 OCR |
| 公式变乱码 | 数学/化学式检索不到 | PDF 内嵌字体映射失败 |
日常类比:把年报 PDF 当「一整块豆腐」切——刀法再精细,表格和配图的信息已经在切之前就被压扁了。多模态 RAG 要先 还原文档的视觉结构,再谈检索。
解析深度分级(与 Ch05 一致):
- Level 1:文本提取(AnythingLLM、FastGPT 基础模式)
- Level 2:版面分析 + 表格/OCR(RAGFlow DeepDoc、WeKnora IMA)
- Level 3:多模态 LLM 页级理解(实验性,\(O(\text{页数} \times \text{VL 调用})\))
二、表格:结构化 chunk 策略
错误做法:500 字滑动窗口切 PDF → 「2024 年营收」在 chunk A,「23.5 亿元」在 chunk B。
正确做法:
- 版面分析识别表格区域
- 表格结构恢复(TSR)→ HTML
<table>或 JSON 行列 - 整表作为一个 chunk(或「表头 chunk + 按行 chunk」并保留
table_id元数据) - 检索时带
content_type: table过滤或加权
RAGFlow DeepDoc 五步管线(摘要):
PDF 页图 → Layout 检测 → 文本/OCR → 表格 TSR → 公式 LaTeX → 结构化 chunk
WeKnora IMA 侧重中文排版与后续 PMI 实体 抽取——表格单元格内的专有名词会进入图谱。竞赛常见 issue:Excel IMAGE 函数过滤、HTML 表格转 Markdown(见 WeKnora 实战 case-1785)。
三、图片与 OCR 管线
| 阶段 | 技术 | 失败点 |
|---|---|---|
| 预处理 | 去噪、倾斜校正、二值化 | 低质量扫描件 |
| 检测 | DBNet 等文字区域框 | 密集小字、竖排 |
| 识别 | CRNN / SVTR | 手写、印章遮挡 |
| 后处理 | 拼写纠错、行排序 | 多栏排版顺序错 |
chunk 绑定规则:图片 OCR 文本应与 同一页的 caption / 前后段落 共享 page_id,检索时一并召回——否则用户问「图 3 里的架构」时只有 OCR 碎片没有说明句。
四、多模态检索的三种架构
| 架构 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 文本化优先 | OCR/表格 → 纯文本 chunk → 常规向量+BM25 | 与现有栈兼容 | 丢布局、复杂图信息损失 |
| 多向量 | 文本 embedding + 图片 embedding(CLIP 等) | 可「以图搜图」 | 需多模态向量库、对齐难 |
| VL 按需 | 检索到相关页后,把页图送 Qwen-VL/GPT-4V | 理解力强 | 延迟与成本极高 |
当前五个开源 RAG 平台 生产默认 以「文本化优先」为主;多向量与 VL 按需多出现在实验分支或企业定制。
五、五大平台多模态能力速查
| 能力 | RAGFlow | WeKnora | Dify | FastGPT | AnythingLLM |
|---|---|---|---|---|---|
| 扫描 PDF OCR | 深 | 深 | 插件 | 基础 | 弱 |
| 表格结构恢复 | 极深 | 深 | 基础 | 基础 | 无 |
| 公式 LaTeX | 有 | 部分 | 无 | 无 | 无 |
| 图片语义检索 | 实验 | 实验 | 插件 | 无 | 无 |
选型:表格/扫描件占比高 → 优先 RAGFlow 解析或 WeKnora IMA;简单 Markdown/Word → 任意平台差异不大。
六、评估多模态 RAG 的专用指标
通用 RAGAS 四维之外,建议补充:
| 指标 | 含义 | 如何测 |
|---|---|---|
| 表格 QA 准确率 | 答案是否来自正确单元格 | 人工标注 50 个表格问答对 |
| OCR CER | 字符错误率 | 与 ground truth 编辑距离 |
| 结构保留率 | chunk 是否含完整 <table> |
规则检测 + 抽样 |
| 多模态 faithfulness | VL 生成是否胡编图中细节 | 图文对照人工评 |
WeKnora 竞赛 L2 方向:为中文表格 QA 建小型 benchmark 并提交 RAGAS 脚本——见 评估方法论 §6.3。
章末自检
- 解释「表格被撕碎」为什么在检索层无法修复
- 说出 DeepDoc 与 IMA 各强调什么(结构还原 vs 中文+图谱)
- 对比文本化优先与 VL 按需:各适合什么文档类型?
- 若 issue 是「PDF 表格问答全错」,你的排查顺序是什么(解析→分块→检索→生成)?
- 在 WeKnora 实战 case-1785 里,docreader 改动属于管线哪一段?
延伸阅读
- Ch05: 文档解析与分块
- 精读: RAGFlow — DeepDoc 详解
- 精读: WeKnora — IMA 引擎
- WeKnora 实战 case-1785
- 技术挑战 — 多模态 RAG(难点 #12)