公式识别(MFR)与表格结构识别(TSR)
公式识别(MFR)与表格结构识别(TSR)
学习目标
读完本章后,你将能够:
- 理解数学公式识别(MFR)的技术原理与模型选型
- 掌握表格结构识别(TSR)的两阶段流程
- 处理学术论文中复杂的公式和表格场景
- 配置公式与表格的启用/禁用策略
前置知识
1. 数学公式识别(MFR)
1.1 公式类型分类
MinerU 将文档中的公式分为三类:
| 公式类型 | 说明 | 输出格式 |
|---|---|---|
| 行内公式(Inline) | 嵌入在文本行中的公式 | $...$ |
| 行间公式(Interline) | 独立成行的公式 | $$...$$ |
| 公式编号 | 公式右侧的编号 | (1) |
1.2 MFR 模型架构
MinerU 提供两套公式识别模型:
UniMERNet(小模型):
- 编码器:UnimerSwin(基于 Swin Transformer 的图像编码)
- 解码器:UnimerMBART(基于 MBART 的序列生成)
- 特点:体积小,速度快,适合绝大多数场景
pp_formulanet_plus_m(增强版):
- 特点:更高的公式识别精度,适合复杂公式
- 适用场景:学术论文、数学文献
1.3 公式识别流程
公式检测(MFD):
- 在布局检测阶段已经标记了公式区域(interline_equation、equation)
- 行内公式需要在 OCR 文本行中检测
$...$标记
2. 表格结构识别(TSR)
2.1 TSR 的两阶段流程
MinerU 的表格结构识别采用两阶段架构:
第一阶段:表格分类
- 使用 Paddle Table Cls 模型判断表格朝向(横向/纵向)
- 根据表格复杂度选择识别模型
第二阶段:表格结构识别
- UnetStructure:基于 UNet 的语义分割方法,适合简单表格
- 检测表格线 → 识别行列结构 → 生成 HTML
- SlanetPlus:端到端的表格识别方法,适合复杂表格
- 直接生成表格结构,支持合并单元格
2.2 表格输出格式
| 表格类型 | 输出格式 | 示例 |
|---|---|---|
| 简单表格 | Markdown 表格 | | 姓名 | 年龄 | |
| 复杂表格 | HTML 表格 | <table><tr><td rowspan="2">...</td> |
| 表格内图片 | HTML + 图片引用 | <table>...<img src="...">...</table> |
| 表格内公式 | HTML + LaTeX | <table>...$E=mc^2$...</table> |
2.3 跨页表格合并
学术论文中常见跨页表格,MinerU 的合并策略:
- 检测:识别表格在页面边缘被截断
- 匹配:通过列数和表头匹配判断是否为同一表格
- 合并:将续表的行数据追加到主表格
- 标注:在输出中标注跨页信息
3. 表格内特殊元素
3.1 表格内公式
表格单元格中的公式需要特殊处理:
3.2 表格内图片
部分论文表格中包含示意图,MinerU 支持:
- 检测表格单元格中的图片区域
- 裁剪并保存为独立图片
- 在 HTML 表格中用
<img>引用
4. 配置与调优
4.1 启用/禁用配置
通过配置文件或环境变量控制:
{ "formula_enable": true, "table_enable": true}| 配置 | 效果 | 适用场景 |
|---|---|---|
formula_enable: true | 启用公式识别 | 学术论文、数学文献 |
formula_enable: false | 跳过公式识别 | 普通办公文档,提速 |
table_enable: true | 启用表格识别 | 含数据表格的文档 |
table_enable: false | 跳过表格识别 | 无表格文档,提速 |
4.2 模型选择
通过配置文件选择公式识别模型:
{ "mfr_model": "unimernet_small" // 或 "pp_formulanet_plus_m"}5. 陷阱与对策
| 陷阱 | 对策 |
|---|---|
| 公式识别产生错误 LaTeX | 检查公式区域裁剪是否完整;切换增强版模型 |
| 复杂表格结构还原错误 | 使用 SlanetPlus 而非 UnetStructure |
| 表格内公式丢失 | 确保开启公式识别,并检查表格内公式检测 |
| 跨页表格未合并 | 检查表格续页检测配置 |
| 公式/表格识别大幅增加耗时 | 对不含公式表格的文档关闭对应功能 |
6. 设计权衡
UniMERNet vs pp_formulanet_plus_m
| 维度 | UniMERNet 小模型 | pp_formulanet_plus_m |
|---|---|---|
| 模型大小 | 较小 | 较大 |
| 推理速度 | 快 | 慢 |
| 公式精度 | 高(常见公式) | 更高(复杂公式) |
| 显存占用 | 低 | 高 |
取舍:默认使用 UniMERNet 小模型,满足绝大多数场景。对公式精度要求极高的场景(如数学论文),可切换到 pp_formulanet_plus_m。
UnetStructure vs SlanetPlus
| 维度 | UnetStructure | SlanetPlus |
|---|---|---|
| 方法 | 语义分割 + 规则恢复 | 端到端识别 |
| 适合 | 简单表格(无合并单元格) | 复杂表格(合并单元格) |
| 速度 | 较快 | 较慢 |
| 精度 | 中等 | 高 |
取舍:通过表格分类器自动选择,简单表格用 UnetStructure(快),复杂表格用 SlanetPlus(准)。
参考来源
- UniMERNet 论文:https://github.com/opendatalab/UniMERNet
- MinerU 源码:
mineru/model/mfr/、mineru/model/table/ - TableStructureRec:https://github.com/RapidAI/TableStructureRec