在企业 AI 应用中,很多知识并不是以纯文本形式存在的,而是藏在各种文档里:PDF 合同、扫描件发票、财务报表、产品手册、招投标文件、病例报告、质检单、会议纪要图片等。

如果只是处理普通文本,大模型应用相对简单;但一旦遇到复杂文档,就会出现很多问题:

  • PDF 里文字顺序错乱
  • 表格被解析成一堆无意义文本
  • 扫描件需要 OCR 才能识别
  • 图片、印章、签名包含关键信息
  • 多栏排版导致段落拼接错误
  • 页眉页脚、目录、脚注造成干扰

因此,在 AI 落地场景中,一个非常重要的细分方向就是:多模态文档解析(Multimodal Document Parsing)。

它的目标不是简单“把文档转成文本”,而是尽可能保留文档中的结构、语义和版面信息,让后续的 RAG、智能问答、合同审查、信息抽取等系统能够真正读懂文档。


一、为什么传统 OCR 不够用了?

传统 OCR 主要解决的是“图片中文字识别”的问题。比如把一张发票图片识别成文字:

text

发票号码:12345678购买方名称:某某科技有限公司金额:¥5680.00

这对简单场景是有用的,但对于复杂文档远远不够。

举个例子,一份采购合同中可能包含:

  • 标题
  • 正文条款
  • 多级编号
  • 表格
  • 签署日期
  • 甲乙方信息
  • 印章
  • 附件说明

如果系统只是把所有文字按识别顺序拼成一段,结果可能变成:

text

甲方 乙方 合同编号 第一条 第二条 价格 数量 总价 签字 ...

这种文本丢失了结构信息,大模型后续很难准确理解。

特别是在 RAG 场景中,如果文档解析阶段就出错,后面再好的向量检索和大模型生成也很难补救。

所以,文档智能处理的第一步,不是直接接大模型,而是先把文档解析做好。


二、多模态文档解析要解决什么问题?

一个完整的文档解析系统,通常要解决以下几类问题。

1. 文本识别

这是最基础的能力,包括:

  • 扫描件 OCR
  • 图片文字识别
  • PDF 内嵌文本提取
  • 手写体识别
  • 中英文混排识别

如果是电子 PDF,可以直接提取文本;如果是扫描 PDF,则需要先转图片,再进行 OCR。

2. 版面分析

版面分析用于判断文档中不同区域的类型,例如:

  • 标题
  • 正文
  • 表格
  • 图片
  • 页眉
  • 页脚
  • 脚注
  • 目录
  • 印章
  • 签名

这一步非常关键。因为同样是文字,标题、正文、表格单元格的含义并不一样。

3. 阅读顺序恢复

复杂 PDF 经常有双栏或多栏排版。如果直接按坐标读取,文本顺序可能完全混乱。

例如原文是:

text

左栏第一段左栏第二段右栏第一段右栏第二段

错误解析后可能变成:

text

左栏第一段 右栏第一段 左栏第二段 右栏第二段

这种顺序错误会严重影响后续语义理解。

4. 表格结构还原

表格解析是文档智能中最容易踩坑的部分。

一个表格不仅有文字,还有行列关系、合并单元格、表头、单位、备注等结构。简单 OCR 只能识别单元格里的文字,却不一定知道它属于哪一行哪一列。

例如:

商品 数量 单价 总价
服务器 2 30000 60000
交换机 4 5000 20000

如果解析后变成:

text

商品 数量 单价 总价 服务器 2 30000 60000 交换机 4 5000 20000

大模型虽然有时能猜出来,但在财务、合同、审计等场景中,“猜”是不可靠的。

更好的方式是保留 Markdown、HTML 或 JSON 结构。

5. 图像信息理解

很多文档中的图片也有业务含义,比如:

  • 合同中的印章
  • 医疗报告中的影像图
  • 设备说明书中的流程图
  • 财报中的柱状图
  • 质检报告中的缺陷图片

这类信息需要多模态模型参与,而不能只靠文本 OCR。


三、典型技术架构

一个多模态文档解析系统可以设计成如下流程:

text

文档上传  ↓文件类型判断  ↓PDF / 图片预处理  ↓OCR 文本识别  ↓版面检测  ↓表格识别  ↓阅读顺序恢复  ↓结构化输出  ↓接入 RAG / 信息抽取 / 审核系统

1. 文件预处理

预处理包括:

  • PDF 转图片
  • 图片旋转校正
  • 去噪
  • 增强对比度
  • 分辨率调整
  • 页面切分
  • 水印处理

很多 OCR 识别失败并不是模型能力不够,而是输入图片质量太差。

例如扫描件倾斜 5 度,就可能导致识别准确率明显下降。因此,图像预处理是提升效果的重要环节。


2. OCR 识别

常见 OCR 方案包括:

  • PaddleOCR
  • Tesseract
  • EasyOCR
  • 云厂商 OCR API
  • 多模态大模型 OCR 能力

如果是中文企业场景,PaddleOCR 是比较常见的开源选择。它支持文本检测、文本识别、方向分类等能力。

简单示例:

python

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr("contract_page.png", cls=True)

for line in result[0]:
    box = line[0]
    text = line[1][0]
    score = line[1][1]
    print(text, score)

OCR 输出通常包括文字内容、坐标框和置信度。后续版面分析、阅读顺序恢复都需要依赖这些坐标信息。


3. 版面分析

版面分析可以使用专门的 Layout 模型,例如:

  • LayoutLM 系列
  • PP-Structure
  • Detectron2 版面检测模型
  • YOLO 训练自定义版面区域
  • 多模态大模型进行页面理解

版面分析的输出可以类似这样:

json

[
  {
    "type": "title",
    "bbox": [100, 50, 900, 120],
    "text": "采购合同"
  },
  {
    "type": "paragraph",
    "bbox": [100, 150, 900, 300],
    "text": "甲乙双方经友好协商..."
  },
  {
    "type": "table",
    "bbox": [100, 350, 900, 600],
    "html": "<table>...</table>"
  }
]

这里的重点是:不要只输出纯文本,而要输出结构。


4. 表格解析

表格解析通常分为两步:

  1. 检测表格区域
  2. 还原表格结构

对于规则清晰的表格,可以使用传统图像处理方法识别横线、竖线;对于无线表格,则需要深度学习模型判断行列关系。

推荐输出格式:

markdown

| 项目 | 数量 | 单价 | 金额 ||---|---:|---:|---:|| 服务器 | 2 | 30000 | 60000 || 交换机 | 4 | 5000 | 20000 |

或者输出 JSON:

jso

{  "headers": ["项目", "数量", "单价", "金额"],  "rows": [    ["服务器", "2", "30000", "60000"],    ["交换机", "4", "5000", "20000"]  ]}

如果后续要接入数据库或信息抽取系统,JSON 会更方便;如果后续要接入 RAG,Markdown 对大模型更友好。


四、接入 RAG 时要注意什么?

很多团队会把解析后的文档直接切 chunk,然后放进向量库。但复杂文档不能这么粗暴处理。

1. 按结构切分,而不是固定长度切分

合同、制度、手册类文档建议按照标题层级切分:

text

第一章 总则第二章 付款方式第三章 违约责任

每个 chunk 最好保留标题路径:

text

文档:采购合同章节:第三章 违约责任内容:若乙方延期交付...

这样用户问“延期交付怎么赔偿”时,更容易召回正确片段。

2. 表格不要拆散

表格数据如果被切成多个 chunk,很容易丢失表头和上下文。

例如只保留:

text

服务器 2 30000 60000

模型不知道 30000 是单价还是数量。

因此,表格 chunk 应保留完整表头和必要说明。

3. 保留页码和来源

企业场景中,答案必须可追溯。

建议每个 chunk 记录:

  • 文档名称
  • 页码
  • 章节
  • 坐标位置
  • 解析置信度
  • 更新时间

当大模型回答时,可以引用来源:

text

依据《采购合同》第 5 页“违约责任”章节,乙方延期交付需按合同金额的 0.5%/日支付违约金。

这比单纯回答结论更可信。


五、信息抽取场景怎么做?

除了 RAG,多模态文档解析还常用于信息抽取。例如从合同中抽取:

  • 合同编号
  • 甲方名称
  • 乙方名称
  • 合同金额
  • 签署日期
  • 付款方式
  • 违约责任

可以让大模型基于解析后的结构化文本输出 JSON:

json

{  "contract_no": "HT20240512001",  "party_a": "某某科技有限公司",  "party_b": "某某设备有限公司",  "amount": "80000",  "sign_date": "2024-05-12",  "payment_terms": "合同签订后支付30%,验收后支付70%"}

Prompt 可以这样设计:

text

你是合同信息抽取助手。请只基于给定文档内容抽取字段。如果字段不存在,返回 null。不要编造内容。输出合法 JSON。

在生产环境中,还需要对字段做校验,例如金额格式、日期格式、统一社会信用代码格式等。


六、常见坑点

1. 只看 OCR 准确率,不看结构准确率

OCR 文字识别准确,不代表文档解析效果好。
如果表格结构错了、段落顺序错了,后续任务仍然会失败。

2. 忽略低质量扫描件

很多企业历史文档是扫描件,存在模糊、倾斜、阴影、盖章遮挡等问题。
这类文档必须单独评估,不能只用清晰 PDF 测试。

3. 所有文档使用同一套解析策略

合同、发票、论文、财报、说明书的结构完全不同。
更好的做法是按文档类型选择不同策略。

4. 不保留中间结果

文档解析链路较长,如果最终答案错了,需要知道错在 OCR、版面分析、切分还是检索。
因此建议保存中间结果,方便排查。


七、效果评估指标

多模态文档解析可以从几个维度评估。

OCR 层:

  • 字符准确率
  • 行识别准确率
  • 关键字段识别率

结构层:

  • 标题识别准确率
  • 段落顺序准确率
  • 表格行列还原准确率
  • 区域类型分类准确率

业务层:

  • RAG 问答准确率
  • 信息抽取字段准确率
  • 人工复核通过率
  • 平均处理时间
  • 失败文档比例

最终还是要回到业务指标:解析后的内容是否能支撑后续 AI 应用稳定运行。


总结

多模态文档解析是企业 AI 落地中非常基础但容易被低估的一环。

如果文档解析质量不好,后面的向量检索、RAG 问答、合同审查、信息抽取都会受到影响。真正可用的文档解析系统,不只是 OCR 识别文字,而是要同时处理文本、版面、表格、图片和结构关系。

一个成熟方案通常需要:

  • 文档预处理
  • OCR 识别
  • 版面分析
  • 表格结构还原
  • 阅读顺序恢复
  • 结构化输出
  • 来源追踪
  • 业务指标评估

当大模型能够准确理解企业文档中的结构化知识时,AI 才能真正进入合同审核、财务分析、知识库问答、审计风控等高价值业务场景。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐