Loading... ## 摘要 由于出色的模型架构和大量的无标注扫描/电子文档数据集的存在,文本和布局预训练模型已经被证明在大量的可视化富文本文档理解任务中有着高效的表现。在之前微软亚洲研究院已经提出了基于文档布局的LayoutLM第一代模型,与之相比,LayoutLM-v2的主要特点在于在输入阶段直接引入图像信息,利用多模态预训练框架对文本、图像、布局信息进行联合建模。同时,它也将空间感知自注意力机制和和多模态Transformer编码器网络融于一体。实验结果展示,LayoutLM-v2模型在多个数据集上的富文本理解任务上都达到了很好的baseline,包括FUNSD(0.7895->0.8420),CORD(0.9493->0.9601),SROIE(0.9524->0.9781),Kleister-NDA(0.834->0.852),RVL-CDIP(0.9443->0.9564)和DocVQA(0.7295->0.8672)。模型和代码可以从以下链接中获取:[https://aka.ms/layoutlmv2](https://aka.ms/layoutlmv2) --- ## 一、介绍 通常来讲,文档智能的技术路线总体上分类两大类:第一类方法是利用文本和视觉信息的浅层融合进行文档内容理解,但是这种方式得到的模型通用性一般来讲不够强,需要针对不同文档模板类型训练不同的模型,因此需要更多的人工数据标注来弥补这方面的不足。 第二类方法与第一类的最大区别在于利用了文本和视觉信息的深层融合,通过端到端多模态预训练的方式对文档内容和文档图像进行联合学习。这样一来,预训练模型可以学习到不同文档模板类型的局部不变性信息,当模型需要迁移到另一种模板类型时,只需要人工标注少量的样本就可以对预训练模型进行调优。LayoutLM 1.0 模型在设计之初就采用了这种深层次预训练的方案,从模型的输入阶段就将跨模态的文档信息利用起来,从而取得了更好的结果。 在 LayoutLM 1.0 模型提出一年之后,微软亚洲研究院自然语言计算组的研究人员基于 LayoutLM 1.0 的设计方案进一步提出了 LayoutLM 2.0 模型。作为 LayoutLM 1.0 模型的延续,2.0模型的主要特点在于,在输入阶段直接引入了图像信息,利用多模态预训练框架对文本、图像和布局信息进行联合建模。不仅如此,受到纯文本预训练模型中一维相对位置表征的启发,研究人员还提出了一种空间感知自注意力机制 (spatial-aware self-attention),以帮助 Transformer 模型学习到文档图像中不同文本块之间的相对位置关系。与此同时,两种新的预训练任务被使用其中——“文本—图像对齐”和“文本—图像匹配”。实验表明,LayoutLM 2.0 模型将文档图像和其中文本内容进行统一多模态预训练,在多个智能文档理解任务中取得了最佳的结果,其中包括表单理解 FUNSD 数据集,票据理解 CORD 和 SROIE 数据集,复杂布局长文档理解 Kleister-NDA 数据集,文档图像分类 RVL-CDIP 数据集,以及文档图像视觉问答 DocVQA 数据集。  ## 二、方法 LayoutLM-v2模型的架构下图所示,在这一部分中主要介绍本模型的架构和预训练任务。 ### 2.1、模型架构 ### 2.2、预训练 ### 2.3、微调 ## 三、实验 ### 3.1、数据 为了预训练和评估LayoutLM-v2模型的性能,我们从可视化富文本理解领域选择了大量的数据集,下面是这些数据集的介绍和任务描述。 **Pre-training Dataset** 与LayoutLM 1.0相同,我们在IIT-CDIP测试集上进行了LayoutLM 2.0的预训练,数据集包含了1100万张扫描文档图像。通过[Microsoft Read API](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-recognizing-text)从这些扫描文档图像中进行抽取文本和对应的字级边界框。 **FUNSD** FUNSD是一个主要用于噪声表单理解的扫描文档数据集,它包含了199个真实的,完全注释扫描表单,其中共有9707个语义实体,被注释31845词。这199个样本被分成149个用于训练,50个用于测试,官方OCR注释被直接使用于布局信息。FUNSD数据集适用于大量工作,在这篇论文中我们主要关注其语义实体标记。数据集下载链接和表单示例如下:[https://guillaumejaume.github.io/FUNSD/](https://guillaumejaume.github.io/FUNSD/)。使用JSON格式标注信息,如标注下图表单ADDRESS字段的存储格式为:  ```json { "form": [ { "id": 0, "text": "ADDRESS", "box": [94,169,191,186], "linking": [ [0,1] ], "label": "question", "words": [ { "text": "ADDRESS", "box": [94,169,168,186] } ] }, { "id": 1, "text": "666 Fifth Avenue", "box": [209,169,236,182], "label": "answer", "words": [ { "box": [209,169,236,182], "text": "666" }, { "box": [209,169,236,182], "text": "Fifth" }, { "box": [209,169,236,182], "text": "Avenue" } ], "linking": [ [0,1] ] } ] } ``` **CORD** CORD是一个OCR解析后的合并票据数据集,这个数据集包含用于训练集的800条票据信息,用于验证集的100条票据信息和用于测试集的100条票据信息。除图像之外,同时还会提供一个包含票据区域的ROI,来避免图像背景中的不相关事物干扰。CORD数据集中定义了4个类别,其中包含30个标签字段。详情见下表1。模型在这个数据集中的任务主要是将每个将标签中的每个词对应的正确的字段中。JSON格式的图像注释格式见下表2。图像数据样本见下图。详情见链接:[https://github.com/clovaai/cord](https://github.com/clovaai/cord)  | No. | Category | Tag field (subclasses) | Description | | ----- | ---------------- | ---------------------------- | ------------------------------------------- | | 1 | menu (14) | menu.nm | name of menu | | 2 | | menu.num | identification # of menu | | 3 | | menu.unitprice | unit price of menu | | 4 | | menu.cnt | quantity of menu | | 5 | | menu.discountprice | discounted price of menu | | 6 | | menu.price | total price of menu | | 7 | | menu.itemsubtotal | price of each menu after discount applied | | 8 | | menu.vatyn | whether the price includes tax or not | | 9 | | menu.etc | others | | 10 | | menu.sub_nm | name of submenu | | 11 | | ~menu.sub_num~ | ~identification # of submenu~ | | 12 | | menu.sub_unitprice | unit price of submenu | | 13 | | menu.sub_cnt | quantity of submenu | | 14 | | ~menu.sub_discountprice~ | ~discounted price of submenu~ | | 15 | | menu.sub_price | total price of submenu | | 16 | | menu.sub_etc | others | | 17 | void menu (2) | void_menu.nm | name of menu | | 18 | | ~voidmenu.num~ | ~identification # of menu~ | | 19 | | ~voidmenu.unitprice~ | ~unit price of menu~ | | 20 | | ~voidmenu.cnt~ | ~quantity of menu~ | | 21 | | void_menu.price | total price of menu | | 22 | | ~voidmenu.etc~ | ~others~ | | 23 | subtotal (6) | subtotal.subtotal_price | subtotal price | | 24 | | subtotal.discount_price | discounted price in total | | 25 | | ~subtotal.subtotal_count~ | ~Total number of items~ | | 26 | | subtotal.service_price | service charge | | 27 | | subtotal.othersvc_price | added charge other than service charge | | 28 | | subtotal.tax_price | tax amount | | 29 | | ~subtotal.tax_and_service~ | ~tax + service~ | | 30 | | subtotal.etc | others | | 31 | void total (0) | ~voidtotal.subtotal_price~ | ~void subtotal price~ | | 32 | | ~voidtotal.tax_price~ | ~void tax price~ | | 33 | | ~voidtotal.total_price~ | ~total void price~ | | 34 | | ~voidtotal.etc~ | ~void etc information~ | | 35 | total (8) | total.total_price | total price | | 36 | | total.total_etc | others | | 37 | | total.cashprice | amount of price paid in cash | | 38 | | total.changeprice | amount of change in cash | | 39 | | total.creditcardprice | amount of price paid in credit/debit card | | 40 | | total.emoneyprice | amount of price paid in emoney, point | | 41 | | total.menutype_cnt | total count of type of menu | | 42 | | total.menuqty_cnt | total count of quantity | | Attribute Name | | | Description | | ------------------ | ------------ | -------- | ------------------------------------------------------------ | | valid_line | words | quad | Four coordinates of quadrilateral | | | | is_key | Flag to indicates the text used as a key or not | | | | row_id | Line index | | | | text | Incorporating text of the corresponding box | | | category | | Parse class label | | | group_id | | Group id to which the valid_line belongs | | ---------------- | ---------- | ------ | ---------------------------------------------------------- | | meta | version | | Dataset version | | | image_id | | Corresponding image id | | | split | | 'train' or 'dev' or 'test' | | | image_size | | Size of the image (by pixel) | | ---------------- | ---------- | ------ | ---------------------------------------------------------- | | roi* | | | Four coordinates that encompass the area of receipt region | | ---------------- | ---------- | ------ | ---------------------------------------------------------- | | repeating_symbol | quad | | Four coordinates of quadrilateral | | | text | | = or - or . or etc. | **SROIE** SROIE数据集主要是从扫描的票据中抽取信息,共包含训练集626个样本和测试集347个样本。这项任务主要从每个票据中抽取四个预先定义好的键值对:company、date、address、total。对于收据 OCR 任务,数据集中的每个图像都用文本边界框 (bbox) 和每个文本 bbox 的转录进行注释。位置标注为具有四个顶点的矩形,从顶部开始按顺时针顺序排列。图像的注释存储在具有相同文件名的文本文件中。评价指标是F1 score。如下图所示:  对于信息提取任务,数据集中的每个图像都用一个文本文件注释,格式如下:  **Kleister-NDA** Kleister-NDA数据集的文档类型是从EDGAR数据库中收集的保密协议,包含了训练集254个文档,验证集83个文档,测试集203个文档。这个任务是从四个固定的键值对中抽取信息,以F1 score作为评价指标。使用hueristics来定位实体跨度。该数据集是包括OCR后得到TSV文件和票据图像的pdf文件,TSV文件如下图所示。需要从票据中抽取effective_date、jurisdiction、party、term四个字段。 训练集、测试集的格式:输入文件 ( `in.tsv.xz`) 由 6 个以 TAB 分隔的列组成: * 文档的文件名(具有正确扩展名的二进制内容的 MD5 总和),取自 `documents/' 子目录, * 在预测期间要考虑的按字母顺序排列的键列表,键用英文给出,下划线代替空格,并用空格分隔, * pdf2djvu/djvu2hocr 工具从文档中提取的纯文本,行尾 TAB 和不可打印字符替换为空格(这样它们就不会与 TSV 特殊字符混淆), * tesseract 工具从文档中提取的纯文本,行尾 TAB 和不可打印的字符替换为空格(这样它们就不会与 TSV 特殊字符混淆), * 由 textract 工具从文档中提取的纯文本,行尾 TAB 和不可打印的字符替换为空格(这样它们就不会与 TSV 特殊字符混淆), * 通过 pdf2djvu/djvu2hocr 和 tesseract 工具组合从文档中提取的纯文本,行尾 TAB 和不可打印字符替换为空格(这样它们就不会与 TSV 特殊字符混淆)。 该`expected.tsv`文件只是按字母顺序(按键)排序的键值对列表。对用空格分隔,键值对用等号 ( `=`)分隔。值中的空格和冒号被替换为下划线。 在“诱饵”键(给出的键没有预期值)的情况下,它们在`expected.tsv`文件中被省略 (它们*没有* 给出空值)。  **RVL-CDIP** 该数据集是一个可用于文档图像理解的数据集,包含32万张训练图像,4万张验证图像和4万张验证图像。RVL-CDIP数据集由16个类别的扫描文档组成(如信件、表单、电子邮件、简历等)、这些图像的特点是低质量、多噪声和低分辨率。FUNSD数据集即为该数据集的一个子集。在该数据集上主要完成一个多类单标签分类任务,即将所有的图片分成16个类别,每类25张图像,分类标准为图像准确度。 **DocVQA** DocVQA是在文档理解领域的一个视觉问答数据集,包含4万张训练图像,5000张验证图像和5000张测试图像。数据集由一套三元组(page image、questions、anwsers)组成,在本篇论文中使用[Microsoft Read API](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-recognizing-text)来抽取数据集中的文本和图像边界框,使用heuristics来在抽取的文本中获取anwsers。详细请见:[https://openaccess.thecvf.com/content/WACV2021/papers/Mathew_DocVQA_A_Dataset_for_VQA_on_Document_Images_WACV_2021_paper.pdf](https://openaccess.thecvf.com/content/WACV2021/papers/Mathew_DocVQA_A_Dataset_for_VQA_on_Document_Images_WACV_2021_paper.pdf)  ### 3.2、设置 ### 3.3、结果 ### 3.4、消融实验 ## 四、相关工作 ## 五、结论 ## 参考资料 1、G. Jaume, H. K. Ekenel, J. Thiran *"FUNSD: A Dataset for Form Understanding in Noisy Scanned Documents,"* 2019; 2、Park, Seunghyun and Shin, Seung and Lee, Bado and Lee, Junyeop and Surh, Jaeheung and Seo, Minjoon and Lee, Hwalsuk *“CORD: A Consolidated Receipt Dataset for Post-OCR Parsing”* 2019 3、微软亚洲研究院 *"LayoutLMv2: Multi-modal Pre-training for Visually-Rich Document Understanding"* 2021 4、Minesh Mathew, Dimosthenis Karatzas, C. V. Jawahar, *"DocVQA: A Dataset for VQA on Document Images"*, arXiv:2007.00398 [cs.CV], WACV 2021 最后修改:2021 年 07 月 23 日 10 : 55 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 ×Close 赞赏作者 扫一扫支付 支付宝支付 微信支付