首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >256M 参数的文档解析模型,表格结构、 代码块、公式、图表数据的结构化标签序列

256M 参数的文档解析模型,表格结构、 代码块、公式、图表数据的结构化标签序列

作者头像
javpower
发布2026-07-21 08:43:57
发布2026-07-21 08:43:57
440
举报

256M 参数的文档解析模型, 到底能用到什么程度?

一、模型概况与技术架构

SmolDocling 是 IBM Docling 团队发布的超轻量多模态文档解析模型,参数量仅 256M, 基于 HuggingFace 的 Idefics3 / SmolVLM 架构。它的核心思路与传统 OCR 管线不同: 不先做文字检测再逐块识别,而是直接将整页文档图片输入模型,一步生成包含文本、表格结构、 代码块、公式、图表数据的结构化标签序列(DocTags),再由 docling_core 库 转换为 Markdown 或 HTML。

2025 年 3 月,IBM 发布了继任模型 granite-docling-258M(258M 参数, repo: ibm-granite/granite-docling-258M),同为 Idefics3 架构, 官方标记 SmolDocling 为 deprecated 并推荐迁移。本测评将两个模型在同一套样本上做 1:1 对比。

DocumentImagePNG/JPG/PDF pageas pixel inputSmolDocling / GraniteIdefics3 (256M params)Vision Encoder (SigLIP)+ LLM Decoder (SmolLM)prompt: "Convert this page to docling."output: DocTags structured tagsDocTags<text><otsl> (table)<code><chart><loc_xxx>OutputMarkdownHTMLJSON

SmolDocling / Granite-Docling 技术架构:视觉编码器 + LLM 解码器的端到端多模态方案

训练数据与官方基准

根据论文 arXiv:2503.11576,模型在以下数据集上训练和评估:

基准数据集

任务

SmolDocling 成绩

对比模型

DocLayNet

全文本识别 (Edit Dist / F1)

0.48 / 0.80

Qwen2.5-VL 7B: 0.56/0.72

DocLayNet

布局分析 (mAP)

0.231

Qwen2.5-VL 7B: 0.133; 人类: 0.82

FinTabNet

表格结构 (TEDS)

0.52 (0.81)

TableFormer 52M: 0.89

PubTables-1M

表格结构 (TEDS)

0.65 (0.88)

TableFormer 52M: 0.84

SynthCodeNet

代码识别 (F1)

0.92

-

Im2LaTeX-230K

公式识别 (F1)

0.95

-

Chart benchmark

图表转表 (TEDS)

0.75

Phi-3.5-vision 4B: 0.40

注意:以上均为英文数据集。论文未报告任何中文测试结果。 本测评通过自建中文样本补充了这一关键盲区。

推理代码与 DocTags 输出格式

模型使用标准的 transformers API 加载,推理时将文档图片和指令文本一起输入, 生成 DocTags 标签序列。以下是简化后的推理流程:

代码语言:javascript
复制
# 加载模型与处理器
processor = AutoProcessor.from_pretrained("docling-project/SmolDocling-256M-preview")
model = AutoModelForImageTextToText.from_pretrained(
    "docling-project/SmolDocling-256M-preview",
    torch_dtype=torch.bfloat16, _attn_implementation="sdpa"
).to("cuda")
# 构造输入:图片 + 指令
messages = [{"role": "user", "content": [
    {"type": "image"},
    {"type": "text", "text": "Convert this page to docling."}
]}]
prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(text=prompt, images=[image], return_tensors="pt").to("cuda")
# 生成 DocTags
output = model.generate(**inputs, max_new_tokens=8192)
doctags = processor.batch_decode(output[:, inputs["input_ids"].shape[1]:],
                                  skip_special_tokens=False)[0]
# DocTags -> DoclingDocument -> Markdown/HTML
doc_tags = DocTagsDocument.from_doctags_and_image_pairs([doctags], [image])
doc = DoclingDocument.load_from_doctags(doc_tags, document_name="Doc")
print(doc.export_to_markdown())

DocTags 是 Docling 定义的结构化标记语言,每个元素带有边界框坐标 (<loc_xxx>),核心标签包括:

标签

含义

子标签

<text>

段落文本

-

<section_header_level_N>

标题 (N=层级)

-

<otsl>

表格 (OTSL 格式)

<ched> 列头, <fcel> 数据格, <ecel> 跨列空格, <nl> 换行

<code>

代码块

-

<chart>

图表

<vbar_categorical> 柱状图等

<caption>

图片/表格说明

-

<page_header>

页眉

-

二、测评设计:8 张样本覆盖 7 个维度

对齐论文 Table 2-5 的基准维度,并补充中文维度。样本来源:

  • 1 张官方测试图:page_with_table.png (1326x2014, 学术论文含复杂 8 列表格)
  • 7 张自建合成图:用 PIL + 微软雅黑 + Consolas 渲染,ground truth 完全可控

维度

样本

论文对应基准

评估标准

英文表格

page_with_table

FinTabNet / PubTables (TEDS)

行列结构、合并单元格、数值精度

中文纯文本

cn_plain

论文未测

逐字对比 ground truth

中文表格

cn_table

论文未测

表格结构 + 中文表头 + 数值

代码块

code

SynthCodeNet (F1 0.92)

缩进、符号、字符串保留

数学公式

formula

Im2LaTeX (F1 0.95)

公式内容正确性

柱状图

chart_bar

Chart-to-table (TEDS 0.75)

图表数值提取

双栏排版

en_multicol

DocLayNet 布局

阅读顺序、栏间不串

图文混排

mixed

DocLayNet 综合

标题+段落+表格综合

环境:conda env smoldocling (Python 3.11, torch 2.11.0+cu128, transformers 5.14.0, docling_core 2.87.1); 注意力后端 SDPA (PyTorch 内置高效 attention; flash_attn 因 Windows 长路径限制无法编译)。

三、性能实测

SDPA vs Eager 注意力后端对比

在正式对比两个模型前,先测试了注意力后端对性能的影响。结论:

模型

后端

tok/s

峰值显存

说明

SmolDocling

Eager

50.6

2.24 GB

基线

SDPA

51.4

0.83 GB

速度不变,显存降 62%

Granite

Eager

3.3

2.25 GB

基线

SDPA

6.5

0.84 GB

速度翻倍,显存降 62%

SDPA 通过融合注意力计算的 softmax 和矩阵乘法,在不改变输出质量的前提下 大幅降低显存占用。对 Granite 效果更显著(速度翻倍),但即使优化后,Granite 仍然比 SmolDocling 慢约 8 倍。 这一差距来自模型内部的生成机制差异,而非注意力后端。

SDPA 下两个模型显存均为 0.83 GB,不到 RTX 5060 Ti 16GB 的 5%。 这意味着单张消费级显卡可以同时跑 10+ 个实例并行处理文档,对批量离线场景非常友好。

四、中文能力:本次测评最重要的发现

论文完全没有测试中文,我们用自建中文样本补上了这个关键盲区。 结论非常明确:Granite 的中文识别率从 SmolDocling 的"近乎不可用"提升到了"接近完美", 但代价是推理速度慢 8 倍,且中文表格内容提取出现退步。

4.1 中文纯文本:从"不可用"到"可用"

输入:微软雅黑渲染的中文文档,标题"人工智能发展报告",正文讨论大语言模型

SmolDocling 输出

## 人工看象发展含近年来、大活监掌型在自然语言处理领域取得了量著实施。以 GPT、GLM 分化表的模型最视了現大的理解与生成能力。多模态模型进-步将视角、研究与语言能力融合,能够向时处理图像、视角和文本信息。文献解析是其中的重要应用方向,自标定将析式包实状的双精 ( 法及、按是、翻译)转换为结构化数损。本文评估的 SmolDocling 图力该领域的结论组织方案。

Granite-Docling 输出

## 人工智能发展报告近年来,大语言模型在自然语言处理领域取得了显著突破。以 GPT、GLM 为代表的模型展现了强大的理解与生成能力。多模态模型进一步将视觉、听觉与语言能力融合,能够同时处理图像、视频和文本信息。文档解析是其中的重要应用方向,目标是将版式复杂的文档(论文、报表、票据)转换为结构化数据。本文评估的 SmolDocling 即为该领域的轻量级方案。

逐行对比分析

位置

原文

SmolDocling

Granite

标题

人工智能发展报告

人工看象发展含

人工智能发展报告

第1句

大语言模型...显著突破

大活监掌型...量著实施

大语言模型...显著突破

第2句

以 GPT、GLM 为代表的

以 GPT、GLM 分化表的

以 GPT、GLM 为代表的

第3句

进一步将视觉、听觉

进-步将视角、研究

进一步将视觉、听觉

第4句

能够同时处理图像

能够向时处理图像

能够同时处理图像

第5句

文档解析是其中的

文献解析是其中的

文档解析是其中的

准确率估算:以 100 个汉字为样本,SmolDocling 正确识别约 20 个(~20%), Granite 正确识别约 98 个(~98%)。差距达 5 倍

SmolDocling 的错误模式主要是字形相近字混淆:「语→监」「型→掌」「文→图」「档→精」, 这表明模型的中文视觉编码器对 CJK 字形的区分能力不足。Granite 明显改善了这一点。

4.2 中文表格:出乎意料的 Tradeoff

中文表格的结果揭示了一个非直觉的 tradeoff:Granite 的中文文字识别好, 但在表格内容提取上反而退步;SmolDocling 中文字符错误,但表格结构和数值完整。

输入:5 行 x 4 列中文销售统计表格 (含合并表头"第一季度/第二季度")

两个模型输出的 DocTags 结构对比

SmolDocling (3407 chars):

代码语言:javascript
复制
<section_header_level_1>2024 年度費能紛行</section_header_level_1>
<otsl>
  <ched>予告紛別<ched>第-学度<ched>第二学度<ched>同地紛<nl>
  <fcel>智能手机<fcel>1,250 万<fcel>1,480 万<fcel>+18.4%<nl>
  <fcel>等に本車職<fcel>680 万<fcel>720 万<fcel>+5.9%<nl>
  ...
</otsl>

Granite-Docling (289 chars):

代码语言:javascript
复制
<section_header_level_1>2024 年度销售统计</section_header_level_1>
<otsl></otsl>  /* 空标签 -- 表格内容完全丢失 */
Tradeoff 分析

维度

SmolDocling

Granite-Docling

标题文字

"費能紛行" 错误

"销售统计" 正确

表格结构

5x4 列完整提取

otsl 空标签,结构丢失

数值 (1,250万/+18.4%)

全部正确

无法提取

表头中文

"予告紛別" 错误

内容缺失

综合评级

4.5/5

2/5

这意味着:如果业务场景是"中文报表数字提取"(提取金额、百分比等数值), SmolDocling 反而比 Granite 更可靠 -- 虽然中文字符有误,但数字和表格结构完整。 而如果需要"中文文档全文识别",则必须用 Granite。

五、英文 / 代码 / 公式:两个模型一致

在英文和非中文维度上,两个模型表现高度一致。以下是逐维度分析。

5.1 英文表格结构 (page_with_table)

英文表格原文
英文表格原文

输入:TableFormer 论文页面,含 8 列复杂学术表格 (合并表头,多级嵌套)

表格输出对比

两个模型均完美还原了表格结构:

指标

SmolDocling

Granite-Docling

表格列数

8 列

8 列

数据行数

8 行

8 行

合并单元格 (ecel/ucel)

正确识别

正确识别

数值精度 (0.965, 2.73)

小数点后 3 位精确

小数点后 3 位精确

Caption 识别

<caption> 正确

<caption> 正确

输出 Markdown 长度

3109 chars

2994 chars

与论文 Table 4 的 TEDS 基准(SmolDocling FinTabNet 0.52, PubTables 0.65)一致: 对于结构完整的学术表格,两个模型都能准确提取。

5.2 代码块

与论文 SynthCodeNet F1 0.92 的基准一致。两个模型对 Python 代码的还原度极高, 包括 __name__ == '__main__' 这类易错点。Granite 输出中 if __name__ 行有 1 个额外空格缩进,属于微小瑕疵。

5.3 数学公式

值得注意的是,默认 prompt "Convert this page to docling." 下, 公式以 ASCII 文本形式输出而非 LaTeX 源码。论文 Im2LaTeX F1 0.95 是在专用 prompt "Convert formula to LaTeX." 下测的。如需 LaTeX 输出,应使用专用指令。

5.4 双栏排版

5.5 柱状图 (失败案例)

图表识别分析

两个模型均能正确识别图表类型 -- SmolDocling 输出 <chart><vbar_categorical> 标签, 说明它知道这是分类柱状图。但数值读取完全失败,4 个不同的柱子高度被全部识别为 45。

论文 Chart TEDS 0.75 的成绩是在裁剪好的图表区域 + 专用任务下测的。 在整页文档场景中,图表只是页面的一部分,数值提取的可靠性显著下降。 这是一个需要后处理验证的关键边界。

六、SmolDocling vs Granite-Docling 综合对比

维度

SmolDocling

Granite-Docling

胜出

推理速度 (SDPA)

51 tok/s

6.5 tok/s

SmolDocling 8x

峰值显存

0.83 GB

0.83 GB

持平

中文纯文本

~20%

~98%

Granite

中文表格结构

结构+数值完整

内容丢失

SmolDocling

英文表格

完美

完美

持平

代码块

完美

完美

持平

数学公式

内容正确

内容正确

持平

双栏排版

完美

完美

持平

图表数值提取

数值错误

数值错误

持平 (均失败)

七、落地建议与选型指南

场景 1: 中文文档全文识别

推荐: Granite-Docling (速度换准确度)

SmolDocling 中文准确率仅 ~20%,不可直接用于中文 OCR。 Granite ~98% 的准确率使其成为该场景下唯一可用的选择。 如果需要更高准确率,可考虑结合 PaddleOCR / EasyOCR 做后处理纠错。 速度代价:Granite 每页约 50-80 秒(SDPA),适合批量离线处理。

场景 2: 英文学术文档 / 论文解析

推荐: SmolDocling (速度优先)

两个模型在英文维度上表现一致,SmolDocling 速度快 8 倍。 对于批量论文解析(如构建 RAG 知识库),SmolDocling 的吞吐量优势明显: 单张 5060 Ti 可同时处理 10+ 篇论文。

场景 3: 中文报表数字提取

推荐: SmolDocling + PaddleOCR 组合

看似矛盾的结论:中文场景下反而推荐 SmolDocling。原因是 Granite 虽然中文文字准确, 但表格内容提取退步(<otsl> 空标签),无法获取单元格数值。 SmolDocling 中文字符有误但数字和表格结构完整。 更稳妥的方案:用 PaddleOCR 提取文字 + SmolDocling 提取表格结构,两者互补。

场景 4: 代码/公式/英文混合文档

推荐: 两者皆可,SmolDocling 速度更快

代码和公式维度两个模型一致,均达到论文报告的高水准(F1 0.92/0.95)。 SmolDocling 更快,优先选择。如需 LaTeX 源码输出,使用专用 prompt "Convert formula to LaTeX."

场景 5: 生产环境部署

关键约束:

  • 显存: 两个模型均仅需 0.83 GB (SDPA),一张 16GB 显卡可跑 10+ 实例
  • flash_attn: 当前 Windows + Blackwell 环境无法编译 flash_attn,用 SDPA 已足够
  • vLLM: 模型卡提供 vLLM 推理示例,可大幅提升吞吐(待验证)
  • 模型状态: SmolDocling 已 deprecated,生产环境建议评估 granite-docling-258M
  • 图表数值: 两个模型的图表数值提取均不可靠,需要后处理验证或专用模型

八、技术踩坑记录

1. AutoModelForVision2Seq 在 transformers 5.x 中不存在

官方模型卡的示例代码使用 AutoModelForVision2Seq,但 transformers 5.13+ 已将其 合并为 AutoModelForImageTextToText。直接 import 会报 ImportError

2. 缺少 torchvision

SmolDocling 的 image processor (Idefics3) 依赖 torchvision 做图像预处理, 首次加载时报 Missing optional dependencies: torchvision。 需单独安装匹配版本 torchvision 0.26.0+cu128

3. flash_attn 无法在 Windows + Blackwell 上编译

flash-attn 2.8.3 的源码包含超长路径文件名(如 device_batched_gemm_add_relu_gemm_add_xdl_cshuffle_f16_f16_f16_f16_f16_f16_gmk_gnk_gno_gmo_instance.cpp), 超过 Windows MAX_PATH 260 字符限制。启用长路径需要管理员权限(本环境无权)。 解决方案:使用 PyTorch 内置的 SDPA 后端,效果接近。

4. base 环境 numpy dist-info 损坏

base 环境同时存在 numpy 2.5.0 和 2.5.1 的 dist-info 目录, 导致 importlib.metadata.version('numpy') 返回 None, transformers 启动检查直接抛 ValueError。解法:新建独立 conda 环境。

5. DocTags 元素标签名与直觉不符

DocTags 的标签名并非 <title>/<para>/<table>, 而是 <section_header_level_N>/<text>/<otsl>/<code>/<chart>。 OTSL 表格使用子标签体系: <ched> 列头, <fcel> 数据格, <ecel> 跨列空格, <nl> 换行。统计元素时需用正则提取实际标签名。

6. 公式默认输出非 LaTeX

用默认 prompt "Convert this page to docling." 时,公式以 ASCII 文本形式输出 (e.g. e^(i*pi)+1=0)。论文 Im2LaTeX F1 0.95 是在专用 prompt "Convert formula to LaTeX." 下测的。如需 LaTeX,应切换 prompt。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder建设 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逐行对比分析
  • 两个模型输出的 DocTags 结构对比
  • Tradeoff 分析
  • 表格输出对比
  • 图表识别分析
  • 场景 1: 中文文档全文识别
  • 场景 2: 英文学术文档 / 论文解析
  • 场景 3: 中文报表数字提取
  • 场景 4: 代码/公式/英文混合文档
  • 场景 5: 生产环境部署
  • 1. AutoModelForVision2Seq 在 transformers 5.x 中不存在
  • 2. 缺少 torchvision
  • 3. flash_attn 无法在 Windows + Blackwell 上编译
  • 4. base 环境 numpy dist-info 损坏
  • 5. DocTags 元素标签名与直觉不符
  • 6. 公式默认输出非 LaTeX
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档