公式识别
概述
公式识别(Formula Recognition)将数学公式图像映射为 LaTeX 字符串——一种包含嵌套结构的领域特定语言(DSL),比普通 OCR 困难得多。
关键内容
为什么公式识别比 OCR 难得多?
普通文字是一维序列:字符从左到右线性排列,OCR 的 CTC 解码天然适合。
数学公式是二维树状结构:
- 上标/下标关系(非线性):a²、∫₀^∞
- 二维网格结构:矩阵 ⎛a b⎞⎝c d⎠
- 竖直排列关系:分数 n! / k!(n-k)!
普通文字识别模型把图像映射为字符序列,而公式识别需要把图像映射为 LaTeX 字符串,包含希腊字母命令(\frac、\cdot)、嵌套结构(分子嵌套在 \frac 内)、特殊符号和精确的括号匹配。这需要序列到序列(Seq2Seq)的生成模型,而非简单的 CTC 解码。
行内公式 vs 独立公式
独立公式(Display Equation):
- 单独占一行(或多行),通常有编号 "(1)"
- DocLayout-YOLO 检测为 equation 类别
- 处理:裁剪整个 equation 框区域 → UniMERNet 识别 → 输出 $$...$$
行内公式(Inline Equation):
- 嵌入在文字段落内部,通常比较短
- 布局检测不会单独标出(包含在 text 框内)
- 处理更复杂,需要先检测行内公式的位置
行内公式检测:一个更难的子问题
文字型 PDF:行内公式通常以特殊数学字体出现(CMMI、CMSY、Symbol 字体)。MinerU 通过字体名称检测:
MATH_FONT_KEYWORDS = ["CMMI", "CMSY", "CMR", "MSAM", "MSBM", "mtmi", "Symbol", "MT-Symbol"]
检测到数学字体 Span 后,标记为行内公式候选,裁剪该区域送入 UniMERNet。
扫描件:无字体信息。MinerU 使用一个行内公式检测模型(基于轻量 YOLO 变体)对文字行图像进行逐行扫描,检测公式区域的边界框。
UniMERNet 方案
UniMERNet 是 MinerU 第四层流水线中的公式识别引擎:
- 采用 Swin Transformer 编码器 + Transformer 解码器的 Image-to-Sequence 架构
- 自回归逐 token 生成 LaTeX,Beam Search(Beam Size = 4)提升质量
- 命令级词表(约 600 个 token):\frac 作为单一 token,大幅提升效率
- LaTeX 后处理:语法修复 + sympy 渲染验证
- 输出标准 Markdown 格式:行内 $...$,独立 $$...$$
与同类工具对比
| 工具 | 公式 → LaTeX |
|---|---|
| pypdf/pdfminer | ❌ |
| Marker | ⚠️ 有限 |
| Nougat | ✅ |
| MinerU(UniMERNet) | ✅ 专项优化 |
来源
- raw/assets/MinerU/minerU_01_architecture.md — MinerU 深度解析系列 · 第一篇:整体架构全景
- raw/assets/MinerU/minerU_05_formula.md — MinerU 深度解析系列 · 第五篇:公式识别系统