SmolDocling文档处理模型介绍

作者:Buse Şenol

文档理解和转换技术,已经成为当前数字化流程中最关键的组成部分之一。SmolDocling,是这个领域的一个新突破,它是一个超紧凑的视觉模型,专为端到端文档转换而设计。

这个模型的论文是由 HuggingFace 和 IBM 联合发布的,于 3 月 14 日发表。如果你现在准备好了,我们就一起来看看这篇论文里写了什么,它又是怎么实现的。

什么是 SmolDocling?

SmolDocling 是一个从 Hugging Face 的 SmolVLM-256M 模型衍生出来的超紧凑模型,比其他视觉模型小了 5 到 10 倍。这个模型只有 2.56 亿个参数,但它的表现可以和比它大 27 倍的视觉模型相媲美。

SmolDocling 的一个重要特点是它可以完整地表达文档页面的内容和结构。这个模型不仅能抓住内容,还能理解文档的结构,以及页面中各个元素的定位。

DocTags 格式

SmolDocling 使用一种叫做 "DocTags" 的格式来进行文档转换。DocTags 是一种类似 XML 的标记语言,用来定义文档元素的关键属性。这个格式包括以下几个关键特征:

DocTags 的基本结构

DocTags 定义了文档元素的三个基本属性。元素类型(Element type)指的是文本、图片、表格、代码、标题、脚注等内容成分的种类。页面上的位置(Position on page)表示该元素在页面上的具体放置位置,说明它在哪儿。内容(Content)表示该元素的文本或结构性内容,也就是它实际包含的信息。

DocTags 的工作原理

表示文档内容的基本元素被 XML 风格的标签包围。

每个元素还可以包含额外的位置标签,用于编码它在页面上的位置。这些位置信息表示该元素的边界框,格式如下:

<loc_x1><loc_y1><loc_x2><loc_y2>。这里:

• x1, y1:边界框左上角的坐标

• x2, y2:边界框右下角的坐标

arxiv.org/pdf/2503.11...

嵌套结构

DocTags 还通过嵌套标签提供更多信息。图片和表格可以包含自己的标题,通过 caption 标签来表示。表格结构通过 OTSL 标签表示,用于定义表格数据的组织形式。列表可以嵌套列表项,实现信息的层级组织。代码块和图片可以带有分类信息,比如编程语言或内容类型,提供图像或代码内容的上下文。

DocTags 的优势

DocTags 格式相比标准 HTML 或 Markdown 有显著优势。

消除歧义:明确的标签结构可以清晰定义文档元素,减少不确定性。

结构与内容分离:清楚地区分文档的组织框架和文字信息。

页面布局保留:通过位置标签捕捉空间关系,保留原始文档外观。

Token 优化:减少总 token 数量,提高处理效率。

建模性能提升:为图像转序列模型提供结构清晰、数据一致的输入,有助于更好的学习和生成输出。

架构结构

arxiv.org/pdf/2503.11...

SmolDocling 的架构包含一个完整的流程,用于将文档图像转换成 DocTags 格式。

输入阶段:输入的是页面图像,也就是待处理的文档页面,以及转换指令,比如"Convert to Docling."

视觉处理阶段:使用视觉编码器将页面图像转化为视觉嵌入向量,接着通过投影和池化操作把这些视觉嵌入转为更紧凑的格式。

嵌入集成阶段:将投影后的视觉嵌入(视觉信息的结构化表示)与由文本指令生成的文本嵌入结合。这两种嵌入合并后作为模型输入。

输出生成阶段:使用 LLM(语言模型)处理嵌入,输出 DocTags 格式的数据,这是一种类似 XML 的标记语言,用于表达文档的结构与内容。

这个架构把图像理解与文本生成能力结合起来,实现了文档从头到尾内容和结构的还原。特别是由于 LLM 的自回归特性,它可以非常准确地将复杂文档结构转换成 DocTags 格式。

应用场景

SmolDocling 可用于多种文档理解任务。它支持文档分类,能自动将不同类型的文档进行归类。系统可以进行 OCR(光学字符识别),将图片上的印刷或手写文字转换成机器编码文本。布局分析能力可以理解文档的结构组织,识别各个部分及其关系。表格识别可以提取和解析表格数据,并保留其结构和关系。

SmolDocling 在关键值提取方面也很出色,能识别文档中重要的信息对。系统还具备图形理解功能,解释数据的可视化表示及其含义。公式识别能力让它能处理并转换数学公式为结构化格式。该模型在提取代码列表、表格、图形和公式等复杂文档元素方面表现尤为突出,使其适合处理高复杂度文档结构。

训练与数据集

在开发 SmolDocling 的过程中,团队使用了很多现有数据集,并在不够用的地方创建了自有数据并开放共享。训练中使用了数据增强技术,还特别准备了用于理解代码列表、公式和图形的专门数据集。

与众不同的特性

SmolDocling 有几个与其他文档理解模型不同的关键特点:

阅读顺序保留:文档中的阅读顺序至关重要,尤其是包含表格和图形等元素的内容。SmolDocling 能保持这种语义完整性。

整体式方法:其他系统通过将转换问题分为多个子任务来取得成功,但这种方式难以调试和泛化。SmolDocling 通过提供端到端的方案解决了这个问题。

位置感知:模型能通过边界框的形式对文档元素的页面位置进行编码,保留页面布局信息。

性能评估

SmolDocling 在 DocLayNet 上进行了测试,使用了多种指标,比如编辑距离、F1 分数、精确度、召回率、BLEU 和 METEOR 来衡量文本准确性,取得了优秀成绩。下表展示了模型和其他模型的对比表现:

arxiv.org/pdf/2503.11...

根据 DocLayNet 的评估,SmolDocling 模型在整页转换中取得了最低编辑距离(0.48)和最高 F1 分数(0.80)。它在精确度、召回率、BLEU 和 METEOR 指标上也超过了其他模型。

在代码列表任务中,SmolDocling 表现极佳,编辑距离为 0.11,F1 分数为 0.92。在公式识别任务中,它与 GOT 模型表现相当(0.11 编辑距离,0.95 F1 分数,0.96 精确度)。

尤其值得注意的是,SmolDocling 的结果甚至比很多更大的模型(比如 Qwen2.5 VL,7B 参数)还要好。这证明了该模型架构的高效性,以及 DocTags 格式在结构化文档识别任务中的成功。

SmolDocling 的集成与使用

在应用部分,我们将运行开发者分享的示例代码。我这里插一句:确保你的 PIL 库是最新版的,不然你会像我一样折腾一整天都不知道问题出在哪儿 :D

/// script

requires-python = ">=3.12"

dependencies = [

"docling-core",

"mlx-vlm",

"pillow",

]

///

from io import BytesIO

from pathlib import Path

from urllib.parse import urlparse

import requests

from PIL import Image

from docling_core.types.doc import ImageRefMode

from docling_core.types.doc.document import DocTagsDocument, DoclingDocument

from mlx_vlm import load, generate

from mlx_vlm.prompt_utils import apply_chat_template

from mlx_vlm.utils import load_config, stream_generate

设置

SHOW_IN_BROWSER = True # 导出输出为 HTML 并在浏览器中打开。

加载模型

model_path = "ds4sd/SmolDocling-256M-preview-mlx-bf16"

model, processor = load(model_path)

config = load_config(model_path)

准备输入

prompt = "Convert this page to docling."

image = "sample.png"

加载图像资源

if urlparse(image).scheme != "":

response = requests.get(image, stream=True, timeout=10)

response.raise_for_status()

pil_image = Image.open(BytesIO(response.content))

else:

pil_image = Image.open(image)

应用对话模板

formatted_prompt = apply_chat_template(processor, config, prompt, num_images=1)

生成输出

print("DocTags: \n\n")

output = ""

for token in stream_generate(

model, processor, formatted_prompt, [image], max_tokens=4096, verbose=False

):

output += token.text

print(token.text, end="")

if "" in token.text:

break

print("\n\n")

构建文档

doctags_doc = DocTagsDocument.from_doctags_and_image_pairs([output], [pil_image])

doc = DoclingDocument(name="SampleDocument")

doc.load_from_doctags(doctags_doc)

导出各种格式

Markdown

print("Markdown: \n\n")

print(doc.export_to_markdown())

HTML

if SHOW_IN_BROWSER:

import webbrowser

out_path = Path("./output.html")

doc.save_as_html(out_path, image_mode=ImageRefMode.EMBEDDED)

webbrowser.open(f"file:///{str(out_path.resolve())}")

这段代码会分析图像内容,并用 DocTags 生成结构化说明。接着使用这些标签创建文档,并导出为 Markdown 或 HTML 格式。

导入的库:

  • requests:用于从 URL 下载图像
  • PIL (Pillow):用于打开和处理图像
  • docling_core:用于使用 DocTags 创建和导出文档
  • mlx_vlm:用于图像处理模型

设置与模型加载

  • SHOW_IN_BROWSER:是否自动打开 HTML 输出
  • load() 和 load_config():加载模型和配置文件

准备输入数据

  • prompt:模型如何处理图像的文本提示
  • image:要分析的图像 URL 或路径

下载与打开图像

  • 检查 URL 是否有效
  • requests.get():下载图像
  • Image.open():打开图像
  • convert("RGB"):转换为 RGB,避免透明图像问题

应用提示模板

  • apply_chat_template():格式化提示语
  • num_images=1:只使用一张图像

生成 DocTags(模型输出)

  • stream_generate():逐步生成模型输出
  • token.text:模型生成的文本
  • output += token.text:拼接输出
  • print(token.text, end=""):打印输出
  • 如果检测到 就停止生成

用 DocTags 构建文档

  • DocTagsDocument.from_doctags_and_image_pairs():将 DocTags 与图像匹配
  • DoclingDocument():创建新文档
  • load_from_doctags():加载 DocTags 内容到文档

导出为 Markdown 和 HTML

  • export_to_markdown():导出为 Markdown 并打印
  • save_as_html():生成 HTML 文件
  • webbrowser.open():在浏览器中打开

下面是文档示例:

SmolDocling 的输出如下:

特别从表格的角度来看,这个结果还不错。由于原始文档中模拟器级别(Simulator Level)的值是居中的,所以有些数据有些偏移,但整体结构还是保留下来了。

结语

SmolDocling 是一个创新型模型,在文档转换领域凭借其紧凑的体积和强大的性能脱颖而出。多亏了 DocTags 格式和端到端架构,它可以非常准确地表达文档的内容和结构特征。这个模型尤其适用于资源受限的环境或需要高扩展性的应用。

在性能评估中得到的结果显示,SmolDocling 在整页转换、代码列表和公式识别方面表现尤为强劲。仅凭 2.56 亿参数就能在多个任务上与更大的模型竞争,证明了该模型设计和 DocTags 格式的高效性。

像 SmolDocling 这样紧凑高效的模型,在现代文档处理系统的开发中,将通过在性能和资源使用之间实现优化,推动数字化流程更广泛的应用。

相关推荐
雍凉明月夜4 分钟前
深度学习网络笔记Ⅱ(常见网络分类1)
人工智能·笔记·深度学习
北岛寒沫5 分钟前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第十三课 垄断竞争)
人工智能·经验分享·笔记
AI营销实验室6 分钟前
AI 工具何高质量的为销售线索打分?
大数据·人工智能
Wang201220137 分钟前
RNN和LSTM对比
人工智能·算法·架构
xueyongfu11 分钟前
从Diffusion到VLA pi0(π0)
人工智能·算法·stable diffusion
jackylzh27 分钟前
配置pytorch环境,并调试YOLO
人工智能·pytorch·yolo
杜子不疼.35 分钟前
AI Ping双款新模型同步免费解锁:GLM-4.7与MiniMax M2.1实测
人工智能
打码人的日常分享35 分钟前
企业数据资产管控和数据治理解决方案
大数据·运维·网络·人工智能·云计算
百***787537 分钟前
小米MiMo-V2-Flash深度解析:国产开源大模型标杆与海外AI接入方案
人工智能·开源
大数据追光猿39 分钟前
【Prompt】Prompt Caching:原理、实现与高并发价值
人工智能·大模型·prompt·agent