【文档智能】DLAFormer:端到端的解决版式分析、阅读顺序方法

前言

前面文章介绍到,文档智能中版式分析(DLA)(《【文档智能 & RAG】RAG增强之路:增强PDF解析并结构化技术路线方案及思路》)、阅读顺序(《【文档智能】符合人类阅读顺序的文档模型-LayoutReader及非官方权重开源》)都是文档的智能结构识别和解析中非常重要的部分。传统的pipline的形式,首先通过版式分析的方法识别出文档中各个信息区块的位置信息及类别信息,然后通过使用阅读顺序的方法,复原出原始文档中各个区块的阅读顺序。本文介绍一种端到端的解决文档版式分析、阅读顺序的方法-DLAFormer,DLAFormer通过将各种DLA子任务视为关系预测问题,并将这些关系预测标签整合到一个统一的标签空间中,允许使用统一的关系预测模块同时处理多个任务。该方法将所有这些子任务集成到一个单一的模型中。

一、概念

1.1 文档图像(版面)组成


文档版面通常包含以下元素信息:

  • 文本区域:页眉、页脚、标题、段落、页码、脚注、图片标题、表格标题等
  • 表格
  • 公式
  • 图片

1.2 信息区块间的关系类型

文档中存在多种逻辑关系,最常见的是阅读顺序关系。文章定义了三种不同类型的关系:

  • 内部区域关系(Intra-region relationship):在同一个文本区域内,所有相邻文本行之间建立内部区域关系。如果文本区域只包含一行文本,则该文本行的关系被指定为自引用。

    内部区域关系

  • 区域间关系(Inter-region relationship):构建所有表现出逻辑联系的区域对之间的区域间关系。例如,两个相邻段落之间或一个表格与其相应的标题或脚注之间的关系。

  • 逻辑角色关系(Logical role relationship):定义了各种逻辑角色单元,包括标题、小节标题、段落等。由于每个文本区域都被分配了一个逻辑角色,因此在文本区域中的每行文本与其相应的逻辑角色单元之间建立逻辑角色关系。

1.3 问题转化

通过定义信息区块间的关系类型,将DLA的各个子任务(如:文本区域检测、区块分类和阅读顺序预测)转化为关系预测问题。这些不同的关系预测任务的标签被合并到一个统一的标签空间中,使得可以使用统一的模型同时处理这些任务。

二、模型架构

模型架构

DLAFormer是一个基于Transformer的端到端方法,用于文档布局分析。它遵循DETR模型架构,包含以下几个主要组件:

  • Backbone网络:用于从文档图像中提取多尺度特征。
  • Transformer Encoder:处理输入特征并生成位置编码。
  • Transformer Decoder:使用参考框和类别标签来处理潜在的图形对象提议。
  • 统一关系预测头:用于同时处理多种关系预测任务。
  • 粗到细检测头:用于精确识别文档图像中的图形页面对象。

2.1 Type-wise Query Selection

在传统的DETR及其变体中,解码器的查询通常是静态的嵌入向量,它们在训练过程中学习,但不包含来自编码器的多尺度特征。这可能导致解码器在处理特定图像时缺乏对特征的适应性。为了解决这个问题,DLAFormer提出了类型感知查询选择策略。该策略利用潜在的类别信息来初始化内容查询,从而使查询能够适应不同类型图形对象的视觉特征。

  • 使用多类别分类器替代辅助检测头中的二分类器,以识别每个选定特征的类别。
  • 初始化查询
    • 位置查询:使用预测的参考框来初始化位置查询。这通常通过将参考框应用于正弦位置编码来实现。
    • 内容查询:根据预测的类别,为每个查询选择相应的特征,这些特征是可学习的,并且与类别相关联。这样,每个查询的内容向量就会根据其类别进行初始化,增强了查询对特定类别特征的捕捉能力。

在DLAFormer中,类型感知查询选择策略通过一个辅助的检测头来实现,该检测头在训练过程中与主模型一起优化。通过这种方式,模型能够学习如何根据编码器特征的类别信息来初始化解码器查询,进而提高模型对文档布局的理解和分析能力。

2.2 Type-wise Query Initialization Module

该模块的目的是标准化不同查询之间的逻辑关系建模,确保解码器输入的统一性。通过为每种类型的查询分配特定的可学习特征来增强模型对不同区域特征的适应性。接收以下三个组件作为输入:

  • 图像目标检测的候选框和类别。
  • 提取的文本行的边界框。
  • 预定义的逻辑角色类型。

该模块为每种类型的查询分配了可学习的特征,并根据类别选择相应的特征来初始化内容查询。

2.3 Unified Relation Prediction Head

统一关系预测头的主要目标是同时处理多种类型的关系预测任务,包括内部区域关系、区域间关系和逻辑角色关系。这种统一处理方式有助于提高模型的效率和效果。关系预测头包含两个模块:

  • 关系预测模块:

    • 文本行查询:文档中的文本行。
    • 区块查询:文档中的图形对象,如表格、图表等。
    • 逻辑角色查询:文档中的逻辑结构单元,如标题、段落、小节等。

    该模块计算文本行/区块查询与逻辑角色查询之间的逻辑关系得分。使用两个全连接层( F C q r FC^{r}_q FCqr F C k r FC^{r}_k FCkr)来映射查询的特征,并通过点积操作计算关系得分。

  • 关系分类模块:

    使用BiLinear分类器来计算不同关系类型上的概率分布。

三、实验

3.1 版式分析

3.2 阅读顺序

总结

DLAFormer的方法挺有趣的,将多个子任务集成到单一模型中,通过统一的关系预测框架来解决文档版式分析和阅读顺序的问题。

参考文献

DLAFormer: An End-to-End Transformer For Document Layout Analysis,https://arxiv.org/abs/2405.11757

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

一、矩阵运营系统开发背景: 在数字化经营的浪潮中,抖音开放平台以其独特的影响力和广泛覆盖的用户群体,成为了企业不可忽视的数字营销阵地。然而,企业在享受抖音带来的巨大流量红利的同时,也面临着多账号管理运营协同效率低下、数…

Ollama中文版部署

M1部署Ollama Ollama中文网站: Featured - 精选 - Ollama中文网 下载网址: Download Ollama on macOS 安装后运行llma3模型: ollama run llama3:8b 界面使用: GitHub - open-webui/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI) 部署open-webui: do…

C++知识点总结 (02):C++中的语句(简单语句、条件语句、迭代语句、跳转语句、异常处理语句、try语句等)

文章目录 1、简单语句(1)空语句(2)复合语句 2、条件语句3、迭代语句(1)常规for循环(2)范围for循环(3)while和do...while 4、跳转语句(1)break(2)continue(3)goto 5、异常处理语句(1)标准异常(2)throw抛出异常 6、try语句 1、简单语句 (1)空语句 ; (2)复合语句 用花括号括起来的…

【实施】系统实施方案(软件方案Word)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施 软件开发全套资料获取:私信或者进主页获取。 软件产品,特别是行业解决方案软件产品不同于一般的商品,用户购买软…

JS(JavaScript)二级菜单级联案例演示

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

机器学习原理和代码实现专辑

1. 往期文章推荐 1.【机器学习】图神经网络(NRI)模型原理和运动轨迹预测代码实现 2. 【机器学习】基于Gumbel-Sinkhorn网络的“潜在排列问题”求解 3. 【机器学习】基于Gumbel Top-k松弛技术的图形采样 4. 【机器学习】基于Softmax松弛技术的离散数据采样 5. 【机器学习】正则…

数据仓库建模基础理论-01-为什么需要数据建模?

一、什么是数据模型? 数据模型是数据库的基础结构,用于描述和组织数据的方式。 它不仅是数据库的底层结构,还是一个概念性工具,帮助理解数据的含义和关系。 数据模型包括数据本身、数据之间的关系、数据的语义(含义和…

前端面试题(基础篇十三)

一、async 和 defer 的作用是什么?有什么区别? (1)脚本没有 defer 或 async,浏览器会立即加载并执行指定的脚本,也就是说不等待后续载入的文档元素,读到就加载并执行。 (2&#xff0…

第二天:ALOAM前端讲解【第3部分】

(2)面特征 点到面的距离公式: d H = ∣ ( X ~ ( k + 1 , i ) L − X ˉ ( k , j ) L ) ⋅ ( ( X ˉ ( k , j ) L − X ˉ ( k , l ) L ) ( X ˉ ( k , j ) L − X ˉ ( k , m ) L ) ) ∣ ∣ ( X ˉ ( k , j ) L − X ˉ ( k , l ) L ) ( X ˉ ( k , j ) L − X ˉ ( k ,…

Golang | Leetcode Golang题解之第205题同构字符串

题目: 题解: func isIsomorphic(s, t string) bool {s2t : map[byte]byte{}t2s : map[byte]byte{}for i : range s {x, y : s[i], t[i]if s2t[x] > 0 && s2t[x] ! y || t2s[y] > 0 && t2s[y] ! x {return false}s2t[x] yt2s[y] …

RDMA建链的3次握手和断链的4次挥手流程?

文章目录 基础信息建链 3次握手断链4次挥手建联状态active端passive端 报文结构函数关系其他后记 基础信息 CM: Communication Management 通信管理 连接管理SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate …

amis中条件组合器condition-builder的使用 和 解析

1.amis中配置一个条件组合器,condition-builder。并根据自己业务需求配置source。这里用了一些自定义filter来进行预处理。 {"type": "condition-builder","label": "条件组合","name": "node.conditions&q…

第十节:学习ConfigurationProperties类来配置pojo实体类参数(自学Spring boot 3.x的第二天)

大家好,我是网创有方 。这节记录下如何使用ConfigurationProperties来实现自动注入配置值。。实现将配置文件里的application.properties的参数赋值给实体类并且打印出来。 第一步:新建一个实体类WechatConfig package cn.wcyf.wcai.config;import org…

浅谈如何在linux上部署java环境

文章目录 一、部署环境1.1、JDK1.2、Tomcat1.3、MySQL 二、将自己写的的程序部署到云服务器上 一、部署环境 为了在linux上部署 Java web 程序,需要安装一下环境。 1.1、JDK 直接使用 yum 命令安装 openjdk。我们 windows系统上 下载的是 oracle 官方的 jdk。而 …

文件系统(操作系统实验)

实验内容 (1)在内存中开辟一个虚拟磁盘空间作为文件存储器, 在其上实现一个简单单用户文件系统。 在退出这个文件系统时,应将改虚拟文件系统保存到磁盘上, 以便下次可以将其恢复到内存的虚拟空间中。 (2&…

llama.cpp

https://github.com/echonoshy/cgft-llm 【大模型量化】- Llama.cpp轻量化模型部署及量化_哔哩哔哩_bilibili github.com/ggerganov/llama.cpp cd ~/code/llama.cpp/build_cuda/bin ./quantize --allow-requantize /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama…

项目训练营第六天

项目训练营第六天 前端注册界面开发 1、基本布局 将登录界面文件夹复制一份,粘贴到上一层目录User目录下,改名为Register 在typings.d.ts文件中添加如下的登录前端接口函数标准参数 以及返回值类型 2、接口开发 在api.ts中修改原先接口如下&…

3.SQL注入-搜索型

SQL注入-搜索型 输入k字段进行搜索发现出用户信息 通过上图搜索可以猜测的sql语句为 select 字段1,字段2 from 表名 where username like %k%;在后台查询结果 select id,email from member where username like %k%;通过以上猜测进行构造payload语句 like %k% or 11 #%; …

mysql_config 命令, 可以查看mysqlclient库的位置在/usr/lib64/mysql下

好吧,其实我是从这里知道了 -l 后面加的库名和so文件这种名不一样,因为库文件实际叫下面这个名(前面有lib)。

零基础开始学习鸿蒙开发-页面导航栏布局设计

1.设定初始页(Idex.ets) import {find} from ../pages/find import {home} from ../pages/home import {setting} from ../pages/setting Entry Component struct Index {private controller: TabsController new TabsController()State gridMargin: number 10State gridGut…