Press "Enter" to skip to content

从模板文档中提取结构化数据

收据、账单、保险报价单等模板文件在各种业务工作流程中极为常见且至关重要。目前,处理这些文档主要是手动操作,并且确实存在的自动化系统基于脆弱且容易出错的启发式方法。考虑像发票这样的文档类型,它可以以数千种不同的方式排列——来自不同公司,甚至同一公司内不同部门的发票,格式可能略有不同。但是,对于发票应包含的结构化信息,例如发票编号、发票日期、到期金额、付款日期以及发票所发送的项目列表,存在共同的理解。

 

在ACL 2020接受的“用于从类似表单的文档中提取信息的表示学习”中,我们提出了一种从模板文档中自动提取结构化数据的方法。与之前从纯文本文档中提取的工作相比,我们提出了一种使用目标字段类型知识来识别候选字段的方法。然后使用神经网络对这些进行评分,该网络使用其邻域中的单词学习每个候选者的密集表示。对两个语料库(发票和收据)的实验表明,我们能够很好地推广到看不见的布局。为什幺这幺难?

 

这个信息提取问题的挑战在于它跨越了自然语言处理 (NLP) 和计算机视觉世界。与经典的 NLP 任务不同,此类文档不包含常规句子和段落中可能出现的“自然语言”,而是类似于表格。数据通常以表格的形式呈现,但此外,许多文档有多个页面,通常具有不同数量的部分,并具有各种布局和格式线索来组织信息。了解页面上文本的二维布局是理解此类文档的关键。另一方面,将其纯粹视为图像分割问题会导致难以利用文本的语义。

 

解决方案概述

 

我们解决这个问题的方法允许开发人员使用两个输入来训练和部署给定域(如发票)的提取系统——一个目标模式(即要提取的字段列表及其相应类型)和一小部分标记的文档使用基本事实作为训练集。支持的字段类型包括基本信息,例如日期、整数、字母数字代码、货币金额、电话号码和 URL。我们还利用谷歌知识图谱常用的实体类型,例如地址、公司名称等

 

。输入文档首先通过光学字符识别 (OCR)服务运行提取文本和布局信息,使其能够处理原生数字文档,例如 PDF 和文档图像(例如,扫描的文档)。然后我们运行一个候选生成器,该生成器识别 OCR 输出中可能对应于给定字段实例的文本跨度。候选生成器利用与每个字段类型(日期、号码、电话号码等)相关联的预先存在的库,这避免了为每个候选生成器编写新代码的需要。然后使用训练有素的神经网络(“评分器”,如下所述)对这些候选中的每一个进行评分,以估计它确实是可能为该字段提取的值的可能性。最后,分配器模块将得分的候选人与目标字段相匹配。默认情况下,分配者只是为该字段选择得分最高的候选者,但可以合并其他特定于域的约束,例如要求发票日期字段按时间顺序在付款日期字段之前。

 

 

记分器

 

记分器是一个神经模型,它被训练为一个二元分类器。它将模式中的目标字段与提取候选字段一起作为输入,并生成介于 0 和 1 之间的预测分数。候选对象的目标标签由候选对象是否与该文档和字段的基本事实相匹配来确定。该模型学习如何在向量空间中表示每个字段和每个候选,其中字段和候选在向量空间中越接近,候选是该字段和文档的真实提取值的可能性就越大。

 

候选人代表

 

候选者由其邻域中的标记以及标记在页面上相对于为候选识别的边界框的质心的相对位置表示。以invoice_date字段为例,附近的短语“发票日期”或“发票日期”可能向记分员表明这是一个可能的候选者,而像“交货日期”这样的短语表明这可能不是发票日期。我们不会在其表示中包含候选人的价值,以避免过度拟合恰好存在于小型训练数据集中的值——例如,发票日期为“2019”,如果训练语料库碰巧仅包含发票从那一年。

 

 

模型架构

 

下图显示了网络的一般结构。为了构建候选编码(i),使用词嵌入表(a)嵌入邻域中的每个标记。每个邻居 (b) 的相对位置是使用两个完全连接的ReLU层嵌入的,这些层捕获细粒度的非线性。每个邻居的文本和位置嵌入被连接起来形成一个邻居编码(d)。自注意力机制用于合并每个邻居(e)的邻域上下文,使用最大池化将其组合成邻域编码(f). 候选在页面(g)上的绝对位置以类似于邻居位置嵌入的方式嵌入,并与候选编码(i)的邻域编码连接。最后的评分层计算场嵌入 (k) 和候选编码 (i) 之间的余弦相似度,然后将其重新缩放到 0 和 1 之间。

 

 

结果

 

对于训练和验证,我们使用了具有多种布局的内部发票数据集。为了测试模型泛化到看不见的布局的能力,我们使用了发票的测试集,其布局与训练和验证集不相交。我们在以下几个关键字段上报告了从该系统中提取的F1 分数(越高越好):

 

场地 F1分数

 

到期金额 0.801

 

邮寄日期 0.667

 

到期日 0.861

 

发票日期 0.940

 

发票编号 0.949

 

采购订单 0.896

 

总金额 0.858

 

total_tax_amount 0.839

 

从上表中可以看出,该模型在大多数领域都表现良好。但是,诸如delivery_date 之类的字段还有改进的余地。进一步的调查表明,这个领域存在于我们训练数据中的一个非常小的例子子集中。我们希望收集额外的训练数据将帮助我们改进它。

 

下一步是什幺?

 

Google Cloud 最近宣布将发票解析服务作为Document AI产品的一部分。该服务使用上述方法以及BERT等其他近期研究突破,从发票中提取十多个关键字段。您可以在演示页面上传发票并查看这项技术的实际应用!

 

对于给定的文档类型,我们希望能够在给定中等大小的标记语料库的情况下构建一个提取系统。我们目前正在追求几个后续,包括提高数据效率和准确处理嵌套和重复字段,以及难以定义好的候选生成器的字段。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注