【论文阅读】Dolphin: Document Image Parsing via Heterogeneous Anchor Prompting

news2025/6/6 20:49:51

Paper:https://arxiv.org/abs/2505.14059
Source code: https://github.com/bytedance/Dolphin
作者机构:字节跳动

背景

业务场景

企业数据大多数都以文本、图片、扫描件、电子表格、在线文档、邮件等文档的形式存在,例如:PDF文档(论文、财报等)、发票、收据等等,难以流通和处理,大量有价值的信息都被锁定在非结构化的文档中,无法充分发挥出数据价值,此外不同类型的文档包含的内容,以及内容展示形式也千差万别,这为非结构数据结构化进程增加了更多的不确定性和挑战。

相关工作

当前主流的文档解析主要是两个大的方向,

  1. Integration-based Document Parsing,这种解决方案整合了多个特有的模型于整个处理的pipeline中,例如:通过版面分析去识别表格,公式等,然后再使用对应的模型做相关的处理,主要的缺陷是:在系统复杂性、跨模型协调和对复杂文档布局的理解有限。
  2. Autoregressive Document Parsing,这种方案利用视觉语言模型通过自回归解码直接生成结构化的结果。其分为两种类型:
  3. General VLMs,这些模型受益于对不同视觉数据的大规模预训练,表现出强大的零样本能力。然而,它们在处理效率、专门的元素识别和布局结构保存方面经常面临挑战,特别是在处理具有复杂布局的长文档时。
  4. Expert VLMs,这些模型是专门为文档解析或理解任务设计和训练的。Dolphin就是这种类型。

方法论

该模型的处理范围是两阶段文档图像解析,如下图:
在这里插入图片描述

推理样例:
在这里插入图片描述

总得来说:主要分为两个阶段,在给定处理的文档图片后,首先(第一阶段)做page级的处理,采用的是版面分析的思想但与之不同的是其获取的是具有阅读顺序的各种类型元素结果,然后(第二阶段)做元素级的处理,并行地使用特定元素类型的prompt进行提取,由于已经得到了第一阶段的阅读顺序以及位置信息(bbox)就很容易将第二阶段的结果进行整合了。
可见思路是比较清晰的,那么需要探索的是这两个阶段的效果是否符合预期,或者是work的比较good。

Page-level layout analysis

页面级别的版面分析是如何做的?
对于输入的图片,作者使用的是Swin Transformer作为整个模型的视觉编码器。注:输入图像会被调整大小并填充到固定的 H × W,保留其纵横比以避免文本失真。
版面分析结果的生成。使用版面分析的prompt,然后解码器输出目标结果。这里会涉及视觉特征和文本特征之间的对齐。作者使用的是mBart作为解码器。最后输出的就结果就是Bounding box + element type。
附录中给出里支持的元素种类,如下:
在这里插入图片描述

Element-level Content Parsing

元素级别的内容分析又是如何做的呢?
结合各元素的类型使用各自的prompt并行地处理(这里很显然会带来更多资源的消耗,小心OOM)。使用的是各自bbox截取出当前类型的图片。
附录中也给出了对应元素类型的prompt,如下:

在这里插入图片描述

对应表格图片,模型的结果是html形式的。段落中如果包含公式,输出的结果是使用LaTeX进行表示的。

效果比对

Dolphin模型参数量在322M,并不是很大,相比于其他VLMs在体积上优势很大(就是快)。文中使用的评判指标是ED(edit distances)和FPS(frames per second)。也分别在页面级和元素级分别做了比较。
页面级的对比如下:

元素级的对比如下:

从罗列的指标上来看,在相关的测试数据指标是不错的。根据工作经验来说,在具体业务中最好还是需要做进一步测试和实验。
好了,模型的推理到此结束。下面该看看如何训这个模型的,也就是(1)如何构建训练预料;(2)如何提高小模型的指令跟随能力。

模型训练

训练数据

收集了超过3kw覆盖page-level,element-level的样本。可参见如下表格:

其在Mixed Documents中进行了具有阅读顺序的版面分析标注,即有元素类型、bbox以及阅读顺序。其它的数据主要是用于构建元素级别的提取训练语料。更多训练数据形式可参见原论文。

实验

模型层面:

  1. 视觉encoder使用的是Swin Transformer,window size:7, hierarchical structure([2, 2, 14, 2] encoder layers with [4, 8, 16, 32] attention heads),tips: 常见的通用VLM的视觉编码器通常使用的是基于vit的处理,后面对比一下其与Swin Transformer的差异;
  2. decoder使用的是mBart,包含了10个hidden dimension的Transformer layer;
  3. 使用Donut的预训练权重进行初始化。

训练:

  1. 优化器AdamW;
  2. Learning rate 5e-5 cosine decay schedule;
  3. 机器:40张A100;
  4. 2 epochs with a batch size of 16 per device (gradient accumulation)
  5. 训练Loss:cross-entripy loss。

其他:

  1. 图片进行归一化操作,将图片保留纵横比(aspect ratio),将最长的边放大或缩小到896个pixels,然后进一步padding以达到896x896 pixels 的尺寸。

总结

从文中可以看出,尽管Dolphin表现出了出色的性能,但仍有一些限制需要进一步改进。首先,Dolphin主要支持标准水平文本布局,对于垂直文本如古代手稿等的支持有限。其次,虽然Dolphin能够有效地处理中英双语文档,但其多语言能力仍需扩展。此外,虽然Dolphin通过并行元素解析实现了效率提升,但在文本行和表格单元格的并行处理方面仍有优化空间。最后,Dolphin的手写识别能力还需要进一步增强。
此外,由于文档的多样性和复杂性,还需要在工业界进行考验。项目也提供了在线试用的地址:http://115.190.42.15:8888/dolphin/。

对于类似的端到端的文档智能多模态模型还有如:GOT、SmolDocling等专门处理文档的多模态(大)语言模型。这些模型和方法为端到端的文档智能智能提供了很多解决思路,为后续的发展奠定了基础,但个人试用起来,感觉整体效果还需有进一步提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2399367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌地图免费下载手机版

软件标签: 谷歌地图 谷歌卫星高清地图 下载链接:夸克网盘分享 手机地图 谷歌地图免费下载(google maps)是谷歌公司打造的手机高清电子地图。2024谷歌地图官方中文版能够直观的表达出世界各地的地点,在地图中能够清晰的了解到自身的定位,让…

DeepSeek 赋能金融衍生品:定价与风险管理的智能革命

目录 一、引言1.1 金融衍生品市场发展现状1.2 DeepSeek 的技术特点和优势1.3 研究目的和意义 二、金融衍生品定价与风险管理基础2.1 金融衍生品定价常用方法2.2 金融风险管理主要策略 三、DeepSeek 在金融衍生品定价中的应用3.1 DeepSeek 助力定价模型构建3.2 案例分析&#xf…

论文中pdf图片文件太大怎么办

文章目录 1.使用pdf文件的打印功能将文件导出2.操作3.前后文件大小对比 1.使用pdf文件的打印功能将文件导出 该方法在保证清晰度的同时,内存空间也能实现减少(如果使用线上的压缩pdf工具,清晰度会直线下降) 2.操作 点击文件—&…

简单爬虫框架实现

1. 框架功能概述 (1) HttpSession 类:请求管理 功能:封装 requests 库,实现带重试机制的 HTTP 请求(GET/POST)。关键特性: 自动处理 429(请求过多)、5xx(服务器错误&am…

MVCC理解

MySQL的MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种高效的并发控制机制,通过维护数据的多个版本实现读写操作的并行执行,显著提升数据库的并发性能和数据一致性。 MVCC 的实现依赖于:隐…

705SJBH超市库存管理系统文献综述

前言 信息化的发展已经对我们的日常生活产生了积极的影响,无论是企业、商店、机关、甚至个人,每天都面对着大量的信息,而如果能有效地识别有用信息,并在对它们加工的基础上充分的利用信息,无疑会给我们的生活带来很巨…

shell:基础

本文主要探讨shell相关知识。 变量 $? 上一次执行命令返回状态 $$ 当前进程进程号 $! 后台运行的最后一个进程的进程号 $# 位置参数的数量 $* 参数内容 $ 参数内容 $和$*解析"hello word"为"hello" "word" "$"解析"hello word&…

【JVM】万字总结GC垃圾回收

【JVM】GC垃圾回收 概念 在程序运行过程中,会不断创建对象来使用内存,当这些对象不再被引用时,其所占用的内存若不及时释放,会导致内存占用不断增加,最终可能引发内存溢出。GC 机制能自动检测并回收这些不再使用的对…

内网横向之RDP缓存利用

RDP(远程桌面协议)在连接过程中会缓存凭据,尤其是在启用了 "保存密码" 或 "凭据管理器" 功能时。这个缓存的凭据通常是用于自动填充和简化后续连接的过程。凭据一般包含了用户的用户名和密码信息,或者是经过加…

【Linux网络】传输层TCP协议

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP 协议 TCP 协议段格式 确认应答(ACK)机制 超时重传机制 连接管理机制 …

不同视角理解三维旋转

在二维空间中,绕任意点旋转可以分解为: 1)平移旋转点到原点,2)绕原点旋转,3)逆平移旋转点; 可用矩阵表示为 , 其中, 表示绕原点旋转 , 为平移矩…

Adobe Acrobat——设置PDF打印页面的大小

1. 打开 PDF 文件; 2. 点击菜单栏的 “文件” → “打印”; 3. 在打印对话框中,点击 “属性”; 4. 点击 “布局”→ “高级”; 5. 点击 “纸张规格”,选择 “PostScript 自定义页面大小”,然后…

Android apk装机编译类型: verify、speed-profile, speed与启动耗时

Android apk装机编译类型: verify、speed-profile, speed与启动耗时 Dex2oat (dalvik excutable file to optimized art file) ,对 dex 文件进行编译优化,Android 虚拟机可识别的是dex文件,应用运行过程如果每次都将dex文件加载内存&#xff…

使用Virtual Serial Port Driver+com2tcp(tcp2com)进行两台电脑的串口通讯

使用Virtual Serial Port Drivercom2tcp或tcp2com进行两台电脑的串口通讯 问题说明解决方案方案三具体操作流程网上教程软件安装拓扑图准备工作com2tcp和tcp2com操作使用串口助手进行验证 方案三存在的问题数据错误通讯延时 问题说明 最近想进行串口通讯的一个测试&#xff0c…

数智破局·生态共生:重构全球制造新引擎 2025 WOD制造业数字化博览会即将在沪盛大启幕

共探数智化未来,共创新质生产力。2025年6月17日—19日,上海浦东新国际博览中心将迎来全球制造业数字化转型的盛会——WOD制造业数字化博览会。作为全球首个聚焦制造业数字化全场景的专业展会,本届展会以“数智破局生态共生:重构全…

BGP/MPLS IP VPN跨域解决方案

目录 MPLS VPN跨域方案出现背景: MPLS VPN回顾 VRF(Virtual Route Forward)虚拟路由转发 MPLS(Multiple Protcol Label Swtich)多协议标签交换 MP-BGP多协议BGP MPLS VPN跨域OptionA 控制平面: 转发平面: 总结: 挑战: MPLS VPN跨域OptionB 非RR场景: 控制平面: 转发…

backend 服务尝试连接 qdrant 容器,但失败了,返回 502 Bad Gateway 问题排查

遇到的问题是: backend 报错:502 Bad Gateway 来自 Qdrant → 导致接口 /api/chat 返回 500 Internal Server Error并且日志中提示: QDRANT_URL http://qdrant:6333✅ 问题分析 这个错误的根本原因是: 你的 backend 服务尝试连…

18. Qt系统相关:多线程

一、概述 在Qt中,使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程,也可以和进程中的其他线程共享数据。 二、QThread常用API 三、QThread使用 自定义一个类,继承自QThread,并且只有一个线程处…

6个月Python学习计划 Day 14 - 异常处理基础( 补充学习)

第二周 Day 8 - Python 函数基础 Day 9 - 函数进阶用法 Day 10 - 模块与标准库入门 Day 11 - 列表推导式、内置函数进阶、模块封装实战 Day 12 - 字符串处理 & 文件路径操作 Day 13 - 文件操作基础 🎯 今日目标 理解异常的概念和常见异常类型掌握 try-except …

使用jstack排查CPU飙升的问题记录

最近,看到短视频传播了一个使用jstack来协助排查CPU飙升的案例。我也是比较感兴趣,参考了视频博主的流程,自己做了下对应案例的实战演练,在此,想做一下,针对相关问题模拟与排查演练的实战过程记录。 案例中…