AI 应用的文档智能与 PDF/OCR 工程 2026
把版面分析当作第一性信号、表格与公式当作结构化信号、长文档分块当作语义信号、引用溯源当作可验证信号——四类信号在统一架构下协同,让 RAG 不再只处理切碎的文字,而是处理真实可信的文档。
约 39 分钟阅读11,603 字8 次阅读博主

把版面分析当作第一性信号、表格与公式当作结构化信号、长文档分块当作语义信号、引用溯源当作可验证信号——四类信号在统一架构下协同,让 RAG 不再只处理切碎的文字,而是处理真实可信的文档。

一句话摘要:把版面分析当作"第一性"信号、表格与公式当作"结构化"信号、长文档分块当作"语义"信号、引用溯源当作"可验证"信号——四类信号在统一架构下协同,让 RAG 不再只处理"切碎的文字",而是处理"真实可信的文档"。
当我们说"AI 应用"时,大多数人脑海里浮现的是一个对话框:用户问,模型答。RAG 把它升级成"模型能引用外部知识"。但当终端用户面对的不是 Wiki 文章、不是 Markdown 笔记、不是客服 FAQ——而是 PDF 财报、扫描的合同、含表格与公式的科研论文、几百页的合规白皮书时——RAG 的"切块 → 嵌入 → 检索"三件套就像一个只读过童话书的图书管理员被扔进国家档案馆:它能识别字,但读不懂版面;它能找到片段,但连不成上下文;它能引用句子,但溯源不到页码与表格。
这不是一个边缘问题。据多家咨询机构(具体数字口径不一)估算,企业内部 70%–85% 的高价值知识资产仍以 PDF、扫描件、Word 文档形式存在,而非结构化数据库。法律合同、招标书、上市招股说明书、临床试验报告、监管备案文件、医学影像报告单——这些文档既是"AI 应用最想吃的蛋糕",也是"切块-嵌入-检索"最啃不动的骨头。原因有三:
第一,版面即语义。同一段文字出现在标题区、引文区、脚注区、表格单元、章节小标,含义完全不同。传统 RAG 的 chunk 是无版面意识的文本切片,它把章节标题与正文切到同一块,把表格单元与脚注切到同一块,把页眉页脚与正文切到同一块——索引建得再漂亮,召回也是失真的。
第二,结构化内容是非自由文本。表格是二维的,公式是符号的,图片是连续值的,引用关系是有向图。把它们都压成一维字符串再嵌入,等于把乐谱翻译成"do re mi"再让模型听音识别和弦——信息熵的损失是不可逆的。
第三,长文档的引用必须可验证。当一份 300 页的财报被切成 600 段、每段 1000 字时,模型可以给出"答案",但用户问"这句话出自第几页、哪张表",系统答不出来。不可验证的答案在金融、医疗、法律领域等于不可用。
文档智能(Document AI / Document Intelligence)就是把上述三类挑战工程化的一套技术栈。它不是单一模型、单一算法,而是版面分析(layout analysis)+ 表格结构识别(table structure recognition)+ 公式识别(formula recognition)+ 光学字符识别(OCR)+ 长文档分块(long-document chunking)+ 引用溯源(citation tracing)+ 多模态检索(multimodal retrieval)的协同系统。本文的目标,就是把这七层能力拆解清楚,并给出从 POC 到生产环境落地的工程取舍。
在进入具体机制之前,先把"文档"的形式化定义写出来。一个 PDF 文档 可以被抽象为一个七元组:
其中 是页面集合(每页 是一个二维像素栅格 + 一个文本流); 是版面标注(layout annotation)——把每页划分成若干"区域"(region),每个区域带一个语义类别(标题、正文段落、表格、公式、图注、脚注、页眉页脚); 是表格集合(每个表格 是一个二维网格 + 表头 + 单元格值的层次结构); 是公式集合(每个公式 可以表示为 LaTeX / MathML / 像素图像三种形式之一); 是图像集合(figure、photo、chart 等); 是元数据(作者、日期、版本号、章节大纲、目录树); 是跨页引用关系(citation graph)——"§3.2 引用了 §1.5 的定理 2"、"图 5 引用了表 3 的数据"这类有向边。
传统 RAG 的输入只有"PDF 的文本流"——它把 投影到一个一维字符串序列 上,再分块。文档智能的核心差异是:保留 的七元组结构,并把它投射到一个"可索引的异构表示空间"——文本块、表格记录、公式片段、图嵌入、引用边五种索引共存。
这个形式化定义看似抽象,但它的工程价值是直接的:它把"文档智能"从一种模糊的"AI 能读 PDF"营销话术,分解为七种可独立实现、可独立评估、可独立替换的子任务。每一种子任务都有公开 benchmark、公开模型、公开数据集、公开评估指标。下文的 §3–§7 就是按这个分解逐层展开。
版面分析(layout analysis)是文档智能的"第一道门"。它的任务是:给定一页 PDF,给出这页的区域划分与每个区域的语义类别。它是把"自由文本流"恢复成"结构化版面"的关键一步。
截至 2026 年,版面分析的工程实现主要分三派:
第一派——基于深度学习的检测式版面分析。代表模型是 YOLO 系(YOLOv8 / YOLOv11 的版面分支)、DiT(Document Image Transformer by Microsoft)、LayoutLMv3(Microsoft, 2022 提出后持续迭代至 v4)。它们的做法是把页面渲染成图像(150–300 DPI),用目标检测或序列标注给出每个 token / pixel 的语义类别(标题、正文、表格、公式、图注)。训练数据主要来自 PubLayNet(IBM, 2019,35 万页文档版面标注)、DocLayNet(IBM, 2022,8 万页多领域版面)、DocBank(Microsoft, 2020,50 万页学术文档)三大公开数据集。优势:能识别"非典型版面"(混合排版、表格嵌图、跨栏表格);劣势:对"训练集分布外的文档"(古文档案、艺术画册、特殊行业表格)泛化能力较弱。
第二派——基于 PDF 解析的结构化提取。代表工具是 PyMuPDF(曾用名 fitz)、pdfplumber、Apache PDFBox、Unstructured.io、Marker(由 GitHub 社区维护的开源 PDF 转 Markdown 工具)。它们利用 PDF 本身的文本流、字体元数据、坐标信息,把"文字块 + 字体大小 + 坐标"组合成版面结构。优势:纯文本类 PDF 速度快(无需 GPU),元数据丰富(可以拿到字体、字号、坐标、颜色),对数字版 PDF 准确率极高;劣势:扫描件 PDF 完全失效(没有文字流只有图像),对复杂版面(多栏嵌套、表格嵌公式)的还原能力有限。
第三派——视觉-语言多模态模型(VLM)端到端。代表模型是 GPT-4o / GPT-5 vision、Gemini 2.5 Pro Vision、Claude 3.7 Sonnet vision、Qwen2.5-VL、InternVL2.5。它们的做法是直接把整页 PDF(甚至几十页 PDF)输入 VLM,让它以自然语言方式输出版面结构("标题:……;正文段落 1:……;表格:……;图注:……")。优势:零样本泛化能力极强,对罕见版面也能给出合理输出;劣势:推理成本高(每页几 cents 到几十 cents)、速度慢(GPU 推理 + 长上下文)、输出格式不稳定(同一页两次调用可能给出不同结构)、幻觉风险(可能编造表格内容)。
工程实践的取舍很清晰:POC 阶段用 VLM(Qwen2.5-VL 或 GPT-4o vision),快速验证"文档能否被 AI 读懂",迭代快;生产阶段用"检测式版面分析 + PDF 结构化解析"的混合流水线——数字版 PDF 走 PDFBox/pdfplumber 路径(毫秒级,准确率 >95%),扫描件 PDF 走 DiT/LayoutLMv3 检测路径(秒级,GPU 依赖),极端版面(手写、古文、表格嵌图)保留 VLM 作为兜底(秒级,按需触发)。这种"快路径 + 慢路径 + 兜底路径"的三层架构,是任何文档 AI 生产系统的事实标准。
实测(截至 2026 年中,据多个公开 benchmark):在 DocLayNet 测试集上,纯 DiT-base 的版面区域检测 mAP 约 0.78,Qwen2.5-VL-72B 的版面区域检测 mAP 约 0.71(落后于专用模型),但 VLM 在"罕见版面"上的零样本准确率显著高于专用模型(高 15–25 个百分点)。两者不是替代关系,是互补关系。
表格与公式是文档智能的两大"硬骨头"。它们都是结构化的,但结构化的方式完全不同——表格是二维的、公式是符号的。
表格结构识别(Table Structure Recognition, TSR)的目标是:把一张"看起来像表格"的区域,还原成一个可被程序遍历的二维网格。截至 2026 年,主流实现是一个四步流水线:
第一步,表格检测(Table Detection)。给定页面区域,定位"哪些区域是表格"。模型通常是 YOLO 系或 DiT 系,输出 bounding box。
第二步,表格单元格分割(Cell Detection / Segmentation)。给定表格区域,识别每个单元格的边界。模型通常是 Cascade Mask R-CNN 或 LayoutLMv3 的扩展头。
第三步,单元格内容 OCR(Cell OCR)。对每个单元格区域跑 OCR(引擎可选 Tesseract 5、PaddleOCR 3、EasyOCR、TrOCR),输出文本内容。
第四步,单元格关系推断(Cell Relationship)。推断哪些单元格是表头、哪些是被合并的(colspan / rowspan)、哪些是空单元格、表格是否有跨页。
公开 benchmark 是 PubTabNet(IBM, 2020,56 万张表格图像 + HTML 结构标注)与 FinTabNet(表格 HTML 还原任务专用)。截至 2026 年中,SOTA 模型在 PubTabNet 上的 TEDS(Tree-Edit-Distance-based Similarity)分数约 0.85–0.92,距离"完全无误差"仍有 8–15 个百分点的距离——这意味着生产系统不能假设表格识别 100% 准确,必须保留人工校对环节。
公式识别(Formula Recognition)的目标是:把一张公式图像,转成 LaTeX / MathML / SymPy 表达式。截至 2026 年,主流实现分两派:
第一派——专用模型。代表是 Nougat(Meta, 2023,论文 PDF → Markdown 专用)、Pix2Tex(开源)、UniMER(Shanghai AI Lab)、FormulaNet(专门针对数学公式)。它们的训练数据来自 IM2LaTeX-100K、CROHME、UniMER 数据集。优势:对标准印刷体公式识别准确率高(LaTeX 还原率 80–90%),速度快(小模型可在 CPU 上跑);劣势:对手写公式、复杂嵌套、表格中公式的支持较弱。
第二派——VLM 端到端。Qwen2.5-VL、GPT-4o vision 等多模态模型可以直接"看公式图像,输出 LaTeX"。优势:零样本能力强,对罕见符号(罕见数学符号、物理符号、化学式)的还原能力强;劣势:成本高、速度慢、长文档批量处理时账单吓人。
工程取舍与版面分析类似:POC 用 VLM(验证可行性),生产用 Nougat + VLM 兜底(数字版公式 Nougat,扫描件公式 VLM)。公式的 LaTeX 还原精度直接影响下游"公式检索"——如果公式被识别成纯文本"a plus b over c",则公式作为查询条件完全失效。
表格与公式被识别后,如何进入 RAG 索引?常见三种策略:
策略 A:纯文本化。把表格转成"行:列1值,列2值,列3值"字符串,把公式转成 LaTeX 源码(公式检索时按 LaTeX 字符串匹配)。优势:实现简单,可用现成 embedding 模型;劣势:表格的二维结构丢失(无法做"按列聚合"查询),公式的视觉结构丢失(无法做"按公式相似度"检索)。
策略 B:结构化存储。表格存入关系数据库或列式存储(Parquet、Arrow),公式存入专门的公式数据库(按 LaTeX 抽象语法树索引)。优势:表格可以 SQL 查询,公式可以 AST 相似度匹配;劣势:需要额外的存储 + 检索基础设施,与文本向量库是两套系统。
策略 C:多模态嵌入。用专门的表格 embedding 模型(如 TableBERT、TAPAS 后续工作)或公式 embedding 模型,把表格 / 公式的视觉 + 文本联合嵌入到向量空间。优势:可以与文本检索统一接口(都按向量相似度召回);劣势:模型选择少、训练数据少、生产稳定性未充分验证。
工程实践:策略 A + B 组合最常见——表格按"行文本化 + 结构化备份"双写,公式按"LaTeX 文本化 + AST 索引备份"双写。文本化用于通用 RAG,结构化备份用于"用户问具体数字 / 具体公式"的高精度查询。
版面分析与表格公式识别处理的是"单页"或"单区域"。当文档长达几十页、几百页时,RAG 层需要解决两个独立但相关的问题:怎么切与怎么溯源。
长文档分块(long-document chunking)的目标是:给定一份 N 页的文档,输出一组"语义完整的 chunk",每个 chunk 自带版面类别(标题 / 正文 / 表格 / 公式)、页码范围、章节归属。四个流派:
流派 1——固定窗口分块。每 500–1000 字切一块。优势:实现最简单,与 embedding 模型输入长度对齐;劣势:无视版面结构,切碎句子、切碎表格、切碎章节。
流派 2——按版面分块。每个版面区域(标题、正文段、表格、图注)作为独立 chunk。优势:保留版面语义,召回质量显著提升;劣势:chunk 大小不可控(表格可能 5000 字,图注可能 20 字),需要后续"二次切分"或"chunk 聚合"。
流派 3——按章节分块。以章节 / 子章节为粒度分块。优势:chunk 大小可控(每章几千字),上下文完整;劣势:长章节(>10 页)仍需二次切分,对无章节文档(合同、发票)失效。
流派 4——按语义分块。用 LLM 或专用模型判断"语义边界",在自然段切换、话题转换处切。优势:理论最优;劣势:实现复杂、成本高、稳定性弱。
工程取舍:流派 2(按版面)+ 流派 3(按章节)的复合流水线——先按版面给出 chunk,再按章节聚合(同一章节的相邻版面 chunk 聚合成一个"章节 chunk"),再用固定窗口做兜底切分(防止 chunk 超过 embedding 模型上限)。这是 LangChain 的 RecursiveCharacterTextSplitter + 自定义版面感知的扩展形态。
实测(2026 年中,多个公开评测):在长文档问答任务(NarrativeQA、Qasper、QuALITY)上,"版面感知 + 章节聚合"分块比"固定窗口"分块的 Recall@10 提升 10–20 个百分点,是性价比最高的分块策略升级。
引用溯源(citation tracing / provenance tracking)的目标是:任何从 RAG 检索出的 chunk,都必须能告诉用户"它出自哪一页、哪一节、哪个版面类别、原文档的哪一节标题"。三层索引:
层 1——chunk 元数据。每个 chunk 自带 page_start、page_end、section_path(如 第 3 章 > 3.2 节 > 3.2.1 子节)、region_type(title / paragraph / table / formula / figure-caption)、doc_id、doc_version。
层 2——chunk 位置指针。每个 chunk 在原始 PDF 中有"页码 + 区域坐标"。用户点击"查看原文",直接跳到 PDF 的对应位置(用 PDF.js 或 pdf-viewer 的 anchor 功能实现)。
层 3——chunk 引用关系图。chunk 之间的引用关系(如"§3.2 引用了 §1.5 的定理 2")存为有向图。当模型给出答案时,溯源系统不仅告诉用户"答案出自 chunk X",还告诉用户"chunk X 引用的前置 chunk 是 Y、Z"——让用户能顺着引用链回到原文上下文。
工程上,层 1 是默认实现(几乎所有 RAG 框架都支持),层 2 需要 PDF 坐标与 chunk 的双向映射(用 PyMuPDF 的 get_text("blocks") 接口 + chunk 起始字符索引实现),层 3 需要额外的图数据库(Neo4j 或 NetworkX)或嵌入在向量数据库中的元数据。生产环境建议至少落地层 1 + 层 2。
文档不只是文字。图表(chart)、示意图(diagram)、扫描图片(figure)、带圈点的标注(annotation)都是文档的"图像成分"。传统 RAG 完全忽略这些——它把"图"切成 alt-text 或图注一句话就索引了。但 alt-text 与图的实际内容常常脱钩。
层次 1——图表 caption 索引。只把图表标题、图注文字嵌入向量库。优势:实现最简;劣势:召回率低(用户问"图 5 显示的趋势是什么",图 5 的 caption 写的是"图 5:营收结构",根本答不上)。
层次 2——图表视觉内容理解。用 VLM(Qwen2.5-VL、GPT-4o vision)对每张图表生成"视觉描述文本"("图 5 显示 2023–2026 年公司营收从 12 亿增至 47 亿,年增长率 58%,2025 年起增长加速"),再把这段描述文本嵌入向量库。优势:召回质量显著提升,能回答"图 X 显示了哪些趋势";劣势:每张图表需要一次 VLM 调用(成本),视觉描述有幻觉风险。
层次 3——图表结构化提取。把图表转成"结构化数据"(散点图 → x/y 坐标数组,柱状图 → 类目 / 数值表,折线图 → 时间序列),存到专门的图表数据库。优势:可做精确查询("图 5 中 2024 年的具体数值是多少");劣势:实现复杂,需要专门的图表理解模型(如 ChartQA、DePlot)。
工程取舍:层次 1 + 层次 2 组合最常见——caption 索引做粗筛,视觉描述做精排,结构化提取作为兜底(仅对关键图表做)。层次 3 是"高价值图表 + 用户问具体数字"场景的加分项。
把图像 + 文本嵌入到同一向量空间,是多模态检索的关键。主流方案有三:
方案 A——CLIP 风格统一嵌入。用 CLIP 类模型(OpenAI CLIP、OpenCLIP、Chinese-CLIP、SigLIP)把图像和文本都映射到同一向量空间。优势:跨模态检索(文本查图像、图像查文本)天然支持;劣势:对"领域特定图像"(医学影像、工程图、表格图像)的检索精度有限。
方案 B——双塔独立嵌入 + 后期融合。文本用 BGE / M3E 嵌入,图像用 DINOv2 / ViT 嵌入,检索时分别召回再融合(RRF 或加权打分)。优势:每个塔可以独立选最优模型;劣势:跨模态检索需要特殊处理(不能直接同空间相似度)。
方案 C——VLM 端到端联合检索。用 Qwen2.5-VL、Gemini 等直接接受"文本 + 图像"混合输入,给出相关性打分。优势:最灵活(任意组合);劣势:成本最高、速度最慢,不适合大规模召回。
工程实践:方案 A作为默认(CLIP / SigLIP 对一般图像 + 文本足够),方案 B作为领域特定场景(医学 / 工程 / 金融)的升级路径,方案 C作为精排阶段(粗筛用方案 A,精排用方案 C)。
把 §3–§6 的能力落到生产环境,需要六个明确的工程决策。
决策 1——文档入库管线必须有"版面 → 表格 → 公式 → 图像"四阶段流水线。任何"PDF → 文本 → embedding"的简化管线在生产环境都会爆雷——它要么丢了表格,要么丢了公式,要么丢了对页码的引用。版面分析是必做的第一步。
决策 2——长文档分块按"版面 + 章节"复合策略。固定窗口分块在 2026 年已经不是生产可行方案。"版面感知 + 章节聚合"是当前性价比最高的策略,需要自研或基于 LangChain / LlamaIndex 的 TextSplitter 扩展。
决策 3——引用溯源至少落地 chunk 元数据 + 页码指针。前者是 RAG 框架的标配,后者需要 PDF 解析时的字符索引与版面坐标的双向映射。引用关系图(层 3)是高阶需求,可以二期再上。
决策 4——公式与表格的双写策略。结构化备份(数据库 / AST)+ 文本化(embedding)是生产实践的事实标准。任何"只做文本化"的方案,在金融、医疗、法律场景都会被用户的"具体数字 / 具体公式"查询打穿。
决策 5——POC 用 VLM,生产用专用模型 + VLM 兜底。VLM(Qwen2.5-VL / GPT-4o vision)是 POC 阶段验证可行性的最快路径,但生产环境必须切到专用版面分析(DiT / LayoutLMv3)+ 专用 OCR(PaddleOCR / Tesseract 5)+ VLM 兜底的三层架构。
决策 6——可观测性与评估必须按文档领域定制。通用 RAG 的评估(Faithfulness、Relevance)不够,需要加入"页码溯源准确率"(答案的引用页码是否正确)、"表格数值准确率"(从表格取出的数字是否与原文一致)、"公式 LaTeX 还原率"(公式识别的 TEDS 分数)。这些指标用 LLM-as-judge + 人工抽检双轨评估。
文档智能在 2026 年仍未解的硬骨头有四个。
未解 1——手写文档与古籍。OCR 在印刷体上已经达到 99%+ 准确率,但在手写体、古文字(甲骨文、敦煌写本)、罕见排版(活字印刷、手抄本)上仍显著低于印刷体。PaliGemma 2、HTR(Handwritten Text Recognition)模型在英文手写上接近 90%,中文手写仍显著低于印刷体。古籍 OCR 是跨学科问题(涉及古文字学、文献学),纯模型路线短期内难以突破。
未解 2——表格中的跨页合并与多级表头。跨页表格(同一张表跨两页、合并单元格延续到下一页)、多级表头(行表头 + 列表头 + 斜线表头)、嵌套表格(表格里嵌表格),这三类"复杂表格"在 TSR benchmark 上的 TEDS 仍比普通表格低 10–20 个百分点。生产中需要保留人工校对。
未解 3——公式与正文混排的版面还原。论文 PDF 中"公式编号 + 公式 + 正文接续"是非常常见的版面,纯版面分析模型常常把公式编号当成正文,把公式本身当成图片,结果正文与公式上下文错位。这是一个"版面 + 文本流"联合建模问题,目前没有成熟方案。
未解 4——长文档的全局引用图构建。300 页的论文有上千条引用、几百个图表、几十个公式,它们之间的引用关系是稠密图。当前 chunk 之间的引用关系是"局部推断"(只看相邻 chunk),缺乏"全局引用图"的构建能力。Citation Graph Construction 是文档智能的下一波研究方向。
最后给正在搭建文档智能系统的开发者一个六条选型清单:
文档智能不是"AI 读 PDF"那么简单,它是版面、表格、公式、图像、引用五类异构信号的协同工程。把每一类信号独立做好,再把它们在统一架构下协同起来,RAG 才能从"切碎的文字检索"升级为"真实可信的文档理解"。
Conversation
0 条