
在人工智能领域,文档处理一直是研究的热点之一。随着多模态技术的发展,如何高效地将图像文档转换为结构化文本,同时保留文档的布局和复杂元素,成为了一个重要的研究方向。SmolDocling 正是在这一背景下应运而生的轻量级多模态文档处理模型。它以其高效的处理能力和灵活的应用场景,为文档处理领域带来了新的突破。
一、项目概述
SmolDocling 是一个由 IBM 研究院 Docling 团队开发的开源视觉语言模型,专为文档光学字符识别(OCR)和转换而设计。该模型具有 256M 参数,能够在消费级 GPU 上快速处理文档,每页文档的处理时间仅需 0.35 秒,使用不到 500MB 的显存。SmolDocling 的目标是通过端到端的方式将图像文档转换为结构化文本,同时保留文档的原始布局和复杂元素,如代码块、数学公式、图表等。

二、功能特点
1. 多模态文档转换
SmolDocling 能够高效地将图像文档转换为结构化文本,支持科学和非科学文档。它能够识别和提取文档中的关键信息,如公式、图表和表格。
2. 快速推理
在A100 GPU 上处理一页文档仅需 0.35 秒,使用不到 500MB 的显存。这种高效的处理能力使得 SmolDocling 非常适合在移动设备或资源受限的环境中运行。
3. OCR 与布局识别
SmolDocling 提供高效的光学字符识别(OCR)功能,能够从图像中准确提取文本,同时保留文档的结构和元素边界框。
4. 复杂元素识别
模型能够识别代码块、数学公式、图表、表格等复杂文档元素。这使得SmolDocling 在处理学术论文和技术报告等复杂文档时表现出色。
5. 与Docling 无缝集成
SmolDocling 支持将结果转换为多种格式(如 Markdown、HTML 等),并兼容 Docling。这种无缝集成使得用户可以轻松地将 SmolDocling 的输出与其他工具和平台结合使用。
6. 指令支持
SmolDocling 支持多种指令,如将页面转换为 Docling 格式、将图表转换为表格、将公式转换为 LaTeX 等。
三、技术原理
1. 轻量级设计
SmolDocling-256M-preview 是一个仅包含 256M 参数的视觉语言模型,专为文档 OCR 和转换而设计。这种轻量级设计使得模型能够在消费级 GPU 上快速运行,同时保持高效的处理能力。相比其他大型模型,SmolDocling 在资源占用和处理速度上具有显著优势,能够更好地适应移动设备和资源受限的环境。
2. 视觉骨干网络
模型采用了 SigLIP base patch-16/512 作为视觉骨干网络,网络参数量为 93M。通过像素压缩技术,每个 512×512 的图像块被压缩为 64 个视觉标记,显著降低了计算资源需求。这种高效的视觉信息处理能力,使得 SmolDocling 能够准确地从图像中提取文本和布局信息。
3. 文本编码器
SmolDocling 使用 SmolLM-2 作为文本编码器,编码器参数量为 135M。它能够处理文本输入并与视觉信息进行融合,从而实现多模态的文档处理。文本编码器的设计使得模型能够理解和处理复杂的文本结构和语义信息。
4. 多模态融合与输出
SmolDocling 能够接收图像和文本的多模态输入,并生成结构化的文本输出。它支持多种文档处理功能,包括将文档图像转换为结构化文本、提取图表和表格信息、将数学公式转换为 LaTeX 格式等。通过多模态融合技术,SmolDocling 能够更全面地理解和处理文档内容。
5. 优化的数据集与训练策略
SmolDocling 的训练数据集包括科学和非科学文档,文档理解占比达到 41%。训练过程中采用了更高的像素标记率(4096 像素/标记),相比之前的 1820 像素/标记,显著提升了效率。这种优化的数据集和训练策略,使得模型在处理各种类型的文档时都能表现出色。
四、应用场景
1. 文档转换与数字化
SmolDocling 能够高效地将图像形式的文档转换为结构化的文本格式,同时保留文档的原始布局和复杂元素。支持多种输出格式,包括 Markdown、HTML 等,适用于文档的数字化处理。
2. 科学与非科学文档处理
SmolDocling 能够处理非科学内容(如商业文档、专利文件等),识别和提取文档中的关键信息。这使得它在学术研究和商业文档处理中都具有广泛的应用前景。
3. 快速OCR 与布局识别
SmolDocling 提供高效的光学字符识别(OCR)功能,能够从图像中准确提取文本,同时保留文档的结构和元素边界框。这种能力使其在文档扫描和数字化领域具有显著优势。
4. 移动与低资源设备支持
SmolDocling 可以在移动设备或资源受限的环境中运行。例如,智能手机或便携式计算机可以轻松地利用 SmolDocling 进行文档处理。
五、快速使用
下面是使用 Transformers 进行单页图像推理示例
# Prerequisites:
# pip install torch
# pip install docling_core
# pip install transformers
import torch
from docling_core.types.doc import DoclingDocument
from docling_core.types.doc.document import DocTagsDocument
from transformers import AutoProcessor, AutoModelForVision2Seq
from transformers.image_utils import load_image
# 检查设备是否支持 CUDA,若支持则使用 GPU,否则使用 CPU
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
# 加载图像
# 注意:由于网络原因,链接解析可能失败。如果需要该网页的解析内容,请检查链接的合法性,并适当重试。
# 如果链接无法访问,可以尝试更换为本地图像路径或其他可访问的图像链接。
image = load_image("https://upload.wikimedia.org/wikipedia/commons/7/76/GazettedeFrance.jpg")
# 初始化处理器和模型
# 使用 Hugging Face 提供的预训练模型 SmolDocling-256M-preview
processor = AutoProcessor.from_pretrained("ds4sd/SmolDocling-256M-preview")
model = AutoModelForVision2Seq.from_pretrained(
"ds4sd/SmolDocling-256M-preview",
torch_dtype=torch.bfloat16, # 使用 bfloat16 数据类型以提高效率
_attn_implementation="flash_attention_2" if DEVICE == "cuda" else "eager", # 根据设备选择注意力实现方式
).to(DEVICE) # 将模型移动到指定设备(GPU 或 CPU)
# 创建输入消息
# 定义用户请求,包含图像输入和文本指令
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") # 将图像和文本输入转换为张量
inputs = inputs.to(DEVICE) # 将输入数据移动到指定设备
# 生成输出
# 调用模型生成文本输出
generated_ids = model.generate(inputs, max_new_tokens=8192)
prompt_length = inputs.input_ids.shape[1] # 获取输入提示的长度
trimmed_generated_ids = generated_ids[:, prompt_length:] # 去掉输入提示部分,仅保留生成的内容
doctags = processor.batch_decode(
trimmed_generated_ids,
skip_special_tokens=False, # 不跳过特殊标记,保留完整的输出
)[0].lstrip() # 去掉前导空格
# 创建 DocTagsDocument 对象
# 从生成的 doctags 和图像对中创建文档对象
doctags_doc = DocTagsDocument.from_doctags_and_image_pairs([doctags], [image])
print(doctags) # 打印生成的 doctags
# 创建 DoclingDocument 对象
doc = DoclingDocument(name="Document") # 初始化 DoclingDocument 对象
doc.load_from_doctags(doctags_doc) # 从 doctags 文档加载数据
# 导出为 Markdown 格式
# 将文档导出为 Markdown 格式并打印
print(doc.export_to_markdown())
# 导出为其他格式(如 HTML)
# 如果需要导出为 HTML 格式,可以取消注释以下代码
# doc.save_as_html(output_file)
六、结语
SmolDocling 以其轻量级的设计和强大的多模态文档处理能力,为文档处理领域带来了新的可能性。它不仅能够高效地将图像文档转换为结构化文本,还支持多种复杂元素的识别和提取。无论是在学术研究、商业文档处理还是移动设备应用中,SmolDocling 都展现出了巨大的潜力。随着技术的不断发展,我们期待 SmolDocling 能够在未来发挥更大的作用。
相关资源
模型地址:https://huggingface.co/ds4sd/SmolDocling-256M-preview
技术论文:https://arxiv.org/pdf/2503.11576
(文:小兵的AI视界)