SmolDocling和数字化文档指南

SmolDocling和数字化文档指南

文章目录

  • 背景
  • 模型架构
  • SmolDocling演示
  • 先决条件
  • SmolDocling响应
  • SmolDocling的潜在用例
  • 小结

SmolDocling和数字化文档指南

有没有想过,很少有 LLM 或某些工具能够处理和理解包含多个表格和图片的 PDF 文件?它们很可能在底层使用了传统的 OCR 或 VLM(视觉语言模型)。不过值得注意的是,传统的 OCR 在识别图像中的手写文本方面存在问题,甚至对不常见的字体或字符(例如研究论文中的复杂公式)也存在问题。VLM 在这方面做得很好,但它们可能难以理解表格数据的顺序,也可能无法捕捉图像及其标题的空间关系。

那么,解决方案是什么呢?在这里,我们将探索一个专注于解决所有这些问题的最新模型。SmolDocling 模型已在 Hugging Face 上公开发布。闲话少叙,让我们开始深入了解吧。

背景

SmolDocling 是一个精巧但功能强大的 256MB 视觉语言模型,专为文档理解而设计。与重量级模型不同,它不需要大量的显存来运行。它由一个视觉编码器和一个紧凑型解码器组成,经过训练可生成 DocTags,这是一种 XML 风格的语言,用于对布局、结构和内容进行编码。其作者使用数百万份包含公式、表格和代码片段的合成文档对其进行了训练。另外值得注意的是,该模型构建于 Hugging Face 的 SmolVLM-256M 之上。在接下来的章节中,我们将更深入地了解其架构和演示。

模型架构

模型架构 

Source: Model Architecture of SmolDocling

从技术上讲,SmolDocling 也是一个 VLM,但它拥有独特的架构。SmolDocling 接收整页文档图像,并使用视觉编码器对其进行编码,生成密集的视觉嵌入。然后,这些嵌入被投影并池化成固定数量的 token,以适应小型解码器的输入大小。同时,用户提示被嵌入并与视觉特征连接。然后,这个组合序列输出一个结构化的 <doctag> token 流。结果是什么?一个紧凑的、布局感知的 XML 样式 DocTags 序列,它同时捕获内容和结构。现在,让我们看看这个架构如何在演示中转化为实际应用。

SmolDocling演示

先决条件

请务必创建您的 Hugging Face 帐户并准备好您的访问令牌,因为我们将使用 Hugging Face 进行此操作。

您可以在此处获取您的访问令牌

访问令牌

注意:请确保您授予必要的权限,例如访问公共代码库,并允许其进行推理调用。

我们使用管道加载模型(或者,您也可以选择直接加载模型,这将在后续章节中进行探讨)。

注意:如前所述,此模型一次处理文档的一张图像。您可以选择使用此管道多次使用该模型来处理整个文档。

我将使用 Google Colab。请确保将运行时更改为 GPU:

Google Colab

from transformers import pipeline
pipe = pipeline("image-text-to-text", model="ds4sd/SmolDocling-256M-preview")
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://cdn.analyticsvidhya.com/wp-content/uploads/2024/05/Intro-1.jpg"},
{"type": "text", "text": "Which year was this conference held?"}
]
},
]
pipe(text=messages)

我提供了之前数据黑客峰会的图片并问道:“Which year was this conference held?”

数据黑客峰会

SmolDocling响应

{'type': 'text', 'text': 'Which year was this conference held?'}]},
{'role': 'assistant', 'content': ' This conference was held in 2023.'}]}]

这是正确的吗?如果你放大并仔细观察,你会发现它确实是 DHS 2023。在视觉编码器的帮助下,这个 256M 的参数似乎表现不错。

DHS 2023

为了充分发挥它的潜力,你可以传递一个包含复杂图像和表格的完整文档作为练习。

现在让我们尝试使用另一种方法来访问模型,即直接使用 transforms 模块加载它:

在这里,我们将传递一个来自 SmolDocling 研究论文的图像片段,并从模型中获取文档标签作为输出。

我们将传递给模型的图像:

传递给模型的图像

在继续之前,请先安装 docking 核心模块:

!pip install docling_core

加载模型并显示以下提示:

from transformers import AutoProcessor, AutoModelForImageTextToText
from transformers.image_utils import load_image
image = load_image("/content/docling_screenshot.png")
processor = AutoProcessor.from_pretrained("ds4sd/SmolDocling-256M-preview")
model = AutoModelForImageTextToText.from_pretrained("ds4sd/SmolDocling-256M-preview")
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")
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()
print("DocTags output:\n", doctags)

显示结果:

from docling_core.types.doc.document import DocTagsDocument
from docling_core.types.doc import DoclingDocument
doctags_doc = DocTagsDocument.from_doctags_and_image_pairs([doctags], [image])
doc = DoclingDocument.load_from_doctags(doctags_doc, document_name="MyDoc")
md = doc.export_to_markdown()
print(md)

SmolDocling 输出:

Figure 1: SmolDocling/SmolVLM architecture. SmolDocling converts images of document pages to DocTags sequences. First, input images are encoded using a vision encoder and reshaped via projection and pooling. Then, the projected embeddings are concatenated with the text embeddings of the user prompt, possibly with interleaving. Finally, the sequence is used by an LLM to autoregressively predict the DocTags sequence.

<!– image –>

很高兴看到 SmolDocling 谈论 SmolDocling。文字内容似乎也很准确。思考这个模型的潜在用途很有趣。让我们看几个例子。

SmolDocling的潜在用例

作为视觉语言模型,SmolDocling 具有丰富的潜在用途,例如从结构化文档中提取数据,例如研究论文、财务报告和法律合同。

它甚至可以用于学术用途,例如将手写笔记和答题副本数字化。在需要 OCR 或文档处理的应用程序中,还可以使用 SmolDocling 作为组件来创建流程。

小结

总而言之,SmolDocling 是一个精巧但实用的 256M 视觉语言模型,专为文档理解而设计。传统的 OCR 难以处理手写文本和不常见的字体,而 VLM 则经常丢失空间或表格上下文。这个紧凑的模型表现出色,并且有多种使用场景。如果您还没有尝试过这个模型,请尝试一下,并在使用过程中遇到任何问题时告诉我。

评论留言

闪电侠

(工作日 10:00 - 18:30 为您服务)

2025-12-05 12:32:52

您好,无论是售前、售后、意见建议……均可通过联系工单与我们取得联系。

您也可选择聊天工具与我们即时沟通或点击查看:

您的工单我们已经收到,我们将会尽快跟您联系!
取消
选择聊天工具: