首页 > 其他分享 >【论文笔记】LayoutLM:首次结合文本和版式信息的文档预训练模型

【论文笔记】LayoutLM:首次结合文本和版式信息的文档预训练模型

时间:2022-09-07 11:02:08浏览次数:85  
标签:训练 Image token 文档 版式 Embedding LayoutLM

概述

LayoutLM是一个基于Bert,结合了文本和版式信息的文档预训练模型,在多个下游任务中都达到了当时SOTA的结果。

模型

模型的总体结构如图1所示:

图1 LayoutLM总体结构
LayoutLM在Bert的基础上添加了2-D Position Embedding和Image Embedding(图中虽然没有1-D Position Embedding和Segment Embedding,不过实际代码中是有的)。2-D Position Embedding用于建模文档中的空间相对位置关系,通过对文档使用OCR工具,可以得到每个token的bbox,将bbox的坐标标准化到0-1000后输入到embedding层,得到对应的embedding,其中x0,x 1共享一个embedding层,y0,y1共享一个embedding层。对于Image Embedding中token-level的特征,在对文档使用OCR工具后,可以得到每个token对应的图片区域,将这些小图输入到Faster R-CNN中,经过backbone的缩放并提取特征,再通过ROI Pooling或者ROI Align将提取出来的特征图缩放到同一大小,最后再经过全连接层将维度变换到和其它embedding层一样的大小;对于Image Embedding中doucument-level的特征,直接将整个文档作为ROI,输入到Faster R-CNN中,并将最后的结果作为Image Embedding中的“[CLS]” token。

需要注意的是,Image Embedding是在微调阶段加入的,而不是预训练阶段,这也是LayoutLM与LayoutLMv2有明显区别的地方。

预训练阶段

预训练阶段有两个目标:Masked Visual-Language Model和Multi-label Document Classification。

Masked Visual-Language Model

和Bert的MLM类似,不过是2D版本的,随机遮蔽一些token但保留2D Position Embedding,然后预测遮蔽的token,通过这个方式能够将视觉和语言两个模态结合起来。

Multi-label Document Classification

为了更好地适应文档理解任务,需要高层次的文档表示,因此在预训练时添加了这个多分类任务。论文中还提到这个是可选的,并且在以后不会使用这个任务预训练更大的模型(实际上从LayoutLMv2开始就没有使用这个目标函数了)。

微调阶段

论文对三类下游任务做了微调,分布是:表单理解、票据理解和文档图像分类。对于前两个任务,LayoutLM对每个token预测{B,I,E,S,O}以及实体的类别。对于最后一个任务,LayoutLM使用“[CLS]”预测文档的类别。

实验

表单理解的实验结果如图2所示(数据集是FUNSD):

图2 表单理解结果
LayoutLM超过了没有考虑版式信息的Bert和RoBerta很多,可以看出版式信息的文档预训练的重要性。在将MDC加入到预训练后,表单理解的召回率有所下降,这个任务可能对细粒度的下游任务有所损害。最后,在加入Image信息到微调阶段后,论文的精度达到了最高。

票据理解的实验结果如图3所示(数据集是SROIE):

图3 票据理解结果
LayoutLM仍然超过了Bert和RoBerta很多,再次验证了版式信息的重要性。不过在把Image信息添加到微调阶段后,精确率、召回率和F1分数全部下降了,可以看出将Image信息加入到微调阶段还需要改进。

文档分类的实验结果如图4所示(数据集是RVL-CDIP)

图4 文档分类结果
LayoutLM不仅超过了text-based模型(Bert等),也超过了image-based模型(VGG-16等),验证了LayoutLM方法的有效性。在文档分类任务下,之前的几个模块都有稳定提升。

最后是不同初始化方法对模型性能的影响,如图5所示:

图5 初始化方法对性能的影响
可以看到,初始化方法对LayoutLM性能的影响很大。

总结

LayoutLM是首次结合文本和版式信息的预训练模型,在当时达到了SOTA的性能。不过没有把图像信息加到预训练阶段中,这也是模型需要改进的地方。另外MDC对于某些下游任务并不好用,需要替换或者改进。

标签:训练,Image,token,文档,版式,Embedding,LayoutLM
From: https://www.cnblogs.com/SpicyWonton/p/16664252.html

相关文章

  • springboot官方文档解读
    官网地址:https://docs.spring.io/spring-boot/docs/2.7.3/reference/htmlsingle/1第一个springboot项目我们在一个路径下面创建pom.xml文件<?xmlversion="1.0"encod......
  • unittestreport 详细功能使用文档(V1.1.1)
    测试派:http://testingpai.com/article/1598939124642详细文档见:https://unittestreport.readthedocs.io/en/latest/......
  • Python读取PDF文档中的表格数据
    #-*-coding:utf-8-*-#在pdfplumber模块中提供了extract_tables()方法importpdfplumberimportpandasaspd#提取PDF文档中的表格defdemo1():withpd......
  • Flask 学习-47.Flask-RESTX 设置 Swagger 文档
    前言SwaggerAPI文档是自动生成的,可从您的API的根URL获取。@api.doc()您可以使用装饰器配置文档。SwaggerUI文档默认flask-restx提供SwaggerUI文档,从API的......
  • springboot配置swagger2线上文档
     1、先上项目配置好的swagger2的ui界面:  2、需要swagger2的这两个包:<!--swagger2包--><dependency><groupId>io.springfox</g......
  • 软件工程-项目总结(附文档提纲参考)
    很多同学在完成自己或是团队的一个软件项目后,马上投入了下一个项目,急于开展其它任务,没有抽出时间精力去深度复盘总结,遗漏了很多宝贵的经验,所以,本文按照GB/T8567-2006的规......
  • 教大家怎么看monaco-editor的官方文档
    最近业务中有用到浏览器在线编辑器,用的是monaco-editor,官网文档只在首页介绍了npm安装方式。但其实还有另外一种<script>的引入方式,但是这种方式体现在API文档中......
  • 用文本文档写第一个java程序并用命令行运行
    新建一个文本文档,后缀是java  编辑以下代码:classHellochina{publicstaticvoidmain(String[]args){System.out.println("hello");}......
  • C# 调用word进程操作文档关闭进程
    程序后台调用word设置word可以被程序调用,其实就是权限问题,这个一般要设置服务器的用户和netword用户。到com组件里面设置。操作word1.Microsoft.Office.Interop.Wo......
  • man命令中文帮助文档配置
    1,man命令帮助中文版:使用man命令的时候有时候想用中文版的,有时候又想用英文版的只需要以下几个骤:sudoapt-getinstallmanpages-zhvim~/.bashrc......