如何识别文档的层级结构:Detect-Order-Construct、HRDoc、DocParser三个方案

文摘   2024-11-13 11:40   北京  

今天是2024年11月13日,星期三,北京,天气雾。

昨天,我们谈了谈关于阅读顺序的问题,通过阅读顺序,可以将一个文档按照人类的阅读习惯进行排列。

而进一步的,如果需要对文档进行进一步的组织,则需要对文档进行层次化的处理,因为文档中存在着多级标题、段落、图表等,这些元素之间本身是形成了一定的结构,这种结构,可以使用markdown进行呈现,所以可以做成目录,这样方便进行索引,这也就对应着文档处理领域的两个经典任务:pdf2markdown(markdown生成)以及pdf2TOC(目录生成),但这几个的关键技术,都是文档层级结构识别技术。

所以,我们来看看怎么其具体实现方案。

调研了一全,这个方向还挺冷门,找到三个代表方案:Detect-Order-Construct、HRDoc(一个数据集)和DocParser方案,三个方案都是有监督思路,定义了不同的类别(parent of 居多),然后做分类模型。

供大家一起参考。

一、Detect-Order-Construct方案

先看第一个方案,《Detect-Order-Construct: A Tree Construction based Approach for Hierarchical Document Structure Analysis》(https://arxiv.org/pdf/2401.11874),其给了一个完整的思路,检测、排序环节,这个很常规,重点在于文档结构分析的“构建(Construct)”阶段其主要任务是从检测到的章节标题生成一个表示层次结构的目录树。

具体实现思路如下:

首先,从所有页面对象的多模态表示中提取每个章节标题的多模态表示。将所有章节标题的表示输入到一个Transformer编码器中,以进一步增强这些表示。与检测模块和顺序模块中使用的Transformer编码器不同,此处的输入序列是根据顺序模块预测的正确阅读顺序排列的,因此可以加入位置编码来传达阅读顺序信息。

其次,为了包含阅读顺序序列中的相对位置信息并适应文档中较大的页码规模,使用了旋转位置编码(Rotary Position Embedding, RoPE)。经过多模态特征增强模块的处理后,生成章节标题的增强表示。

最后,引入一个树感知的目录关系预测头来预测这些章节标题之间的目录关系,该预测头包含两个不同类型的关系预测头,分别用于父子关系和兄弟关系,所以,这个方案的类别数有2种;

其中,每个关系预测头使用一个多类(k类)分类器来计算分数,估计secj成为seci的父节点或者兄弟的可能性

二、HRDoc方案

再看第二个方案,《HRDoc: Dataset and Baseline Method Toward Hierarchical Reconstruction of Document Structure》(https://arxiv.org/abs/2303.13839),提出了一个新的数据集HRDoc和一个基于编码器-解码器的层次化文档结构解析系统(DSPS)

在关系建模上,将所有semantic units分为14个类别: {Title, Author, Mail, Affiliation, Section, First-Line, Para-Line, Equation, Table, Figure, Caption, Page-Footer, Page-Header, and Footnote},关系分为3类{Connect, Contain, Equality}。

其中,当两个单元在语义上相连时,段落中连续行之间的关系称为Connect。例如,章节行与其第一个小节行之间的关系称为Contain。当两个单元处于同一层次结构级别时使用Equality。

通过考虑语义和视觉特征,DSPS分类效果不错

在编码器上,使用多模态双向编码器,输入嵌入包括句子嵌入、布局嵌入、一维位置嵌入、视觉嵌入和页面嵌入。通过Transformer架构的多模态双向编码器,生成每个语义单元的表示。句子嵌入使用Sentence-Bert模型,布局嵌入使用LayoutLMv2,视觉嵌入使用ResNet-50和FPN,页面嵌入使用绝对位置嵌入。

在解码器上,使用GRU网络捕捉跨页面的信息交换,并通过注意力机制计算每个语义单元的加权隐藏状态,引入软掩码操作,利用领域特定知识调整注意力分布。

在关系分类器上,在获得每个语义单元的父节点后,使用线性投影函数对每个子父对的关系进行分类

三、DocParser方案

最后,我们来看第三个方案,《DocParser: Hierarchical Structure Parsing of Document Renderings》(https://arxiv.org/pdf/1911.01702)

这个呢,先把各个区块截取出来,设定为entity,然后定义relations={parent of,followed by, null},进行分类。

思想很粗暴,例如,启发式规则基于边界框的重叠来选择父子关系列表,然后再送入监督模型Mask R-CNN做分类,效果也并不很好。

其中,弱监督(WS)使用的数据集带有用于弱监督的噪声标签。

总结

本文主要讲了关于文档层级结构识别的三个代表方案:Detect-Order-Construct、HRDoc(一个数据集)和DocParser方案,三个方案都是有监督思路,定义了不同的类别(parent of 居多),然后做分类模型。

但实际上,在真实落地的过程当中,我们往往很少会有这类层级结构的分类数据,并且文档十分多样,模型的通用性不会太好。所以更多的还是说使用一些规则的方式进行判定(虽然显然有很多bug)。

参考文献

1、https://arxiv.org/pdf/2401.11874

2、https://arxiv.org/abs/2303.13839

3、https://arxiv.org/pdf/1911.01702

关于我们

老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入


老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
 最新文章