论文解读TCPN
一、简要介绍

视觉信息提取(VIE)近年来受到了越来越多的关注。现有的方法通常首先将光学字符识别(OCR)结果组织成纯文本,然后利用标记级实体注释作为监督来训练序列标记模型。但是,它花费大量的注释成本,可能导致标签混淆,OCR错误也会显著影响最终性能。在本文中,作者提出了一个统一的弱监督学习框架,称为TCPN(标签、复制或预测网络),它引入了1)一种有效的编码器,可以同时对二维OCR结果中的语义和布局信息进行建模;2)仅利用关键信息序列作为监督的弱监督训练策略;和3)一个灵活和可转换的解码器,其中包含两种推理模式:一种(复制或预测模式)是通过复制输入或预测一个标记来输出不同类别的关键信息序列,另一种(标记模式)是直接标记输入序列。本方法在几个公共基准上显示了最新的性能,充分证明了其有效性。
二、研究背景
随着信息交互的快速发展,文档智能处理引起了相当多的关注。视觉信息提取(VIE)技术作为其中的一个重要组成部分,已经被集成到许多实际应用程序中。现有的VIE方法通常首先根据阅读顺序将文本块(文本边界框和字符串,由ground truth提供或由OCR系统解析)组织成纯文本,并利用有效的编码结构,从多个模态(文本,版面,视觉等)中为每个输入字符提取出最有效的特征表示。

然而,字符级别的类别监督花费了巨大的注释成本,并可能导致标签歧义。给定一个如图1 (a)所示的文档图像,最广泛使用的注释方案是对每个话语的边界框和字符串进行标记,并进一步指出每个字符/框属于哪个类别,如图1 (b).所示这样,需要一个启发式的标签分配过程来训练上述标记模型,其核心思想是将检测到的边框和识别的转录与给定的注释进行匹配,然后为OCR结果的每个字符/边框分配标签。然而,这一过程可能主要会遇到两个方面的问题。首先,错误的识别结果会给匹配操作带来麻烦,特别是对关键信息序列。第二,重复的内容会带来标签的歧义。如图1(a)和(b)所示,三个内容相同的值可以作为关键总量的答案。在大多数情况下,很难建立一个统一的注释规范来确定哪一个应该被视为ground truth。
为了解决上述局限性,本文提出了一种端到端弱监督学习框架,该框架可以直接利用目标密钥信息序列来监督解码过程。它带来的好处主要是两方面:一是大大节省了注释成本,如图1 (c)所示,通过跳过OCR结果与ground truth的匹配,缩短了训练过程;其次,作者的方法通过自动学习OCR结果与ground truth的对齐来解决标签模糊问题,可以自适应地区分重复内容中最可能的结果。此外,作者还提出了一种灵活的解码器,它与作者的弱监督训练策略相结合,有两种可切换的模式——复制或预测模式(TCPN-CP)和标签模式(TCPN-T),以平衡其有效性和效率。在TCPN-CP中,作者的解码器可以通过从输入中复制一个标记或在每个时间步中预测一个标记来生成关键信息序列,这既可以保留输入中的新内容,也可以纠正OCR错误。在TCPN-T中,解码器可以在一次正向传递中直接将每个字符的表示标记为一个特定的类别,从而保持快速的速度。值得注意的是,作者的解码器只需要训练一次就可以在不同的模式下工作。
此外,作者提出了一种二维文档表示方法TextLattice以及相应的轻量级编码器结构来同时建模二维OCR结果中的语义和布局信息。
三、方法介绍
首先,作者描述了生成TextLattice的方法,以及如何编码更高级别的特征。接下来,介绍可切换解码器和弱监督训练策略的细节。最后,作者解释了何时以及如何在不同的模式下进行推理。图2给出了作者的方法的概述。

3.1文档表示
将OCR结果重新组织为作者的2D文档表示——TextLattice的整个过程总结为:首先对检测框的y坐标归一化处理,将检测框按照从左上到右下的顺序排列并划分为多行;接着,将文本段级别的框切分成字符级别的框,并微调x坐标避免重叠;最后,初始化一个全0矩阵,并在相应位置填入字符级映射向量。具体步骤见附录。
3.2 特征编码
作者使用ResNet结合U-Net结构作为特征编码器部分,以捕获更全面的特征。同时,为了更好的感知整体版面信息,本文借鉴CoordConv[4]的思想,额外将x和y方向上的相对位置坐标信息拼接到TextLattice中。特征编码的整个过程可以表述为:

3.3弱监督训练
如图2所示,首先提出了实体类别映射向量的概念,来控制解码器输出的信息类别,而其本身也是从一个预定义好的可训练的查找表矩阵中随用随取。给定该向量,解码器可以在每个时间步考虑当前需要生成的实体类别,并迭代预测得到信息序列。这种新颖的设计避免了特定于类的解码器,缓解了单一类语料库的不足,并将传统序列标记模型中不同类别之间的序列相关性解耦为并行。
在生成序列时,作者需要模型能够在从输入中复制字符或直接预测字符之间进行切换。复制操作使模型能够再现准确的信息并保留新词,而预测操作则引入了纠正OCR错误的能力。

然后,计算固定字典中字符的概率分布,生成一个复制分数作为软开关,在每个时间步t的不同操作之间进行选择:

这样,论文的方法就获得了产生词汇表外(OOV)字符的能力,并能够自适应地执行最优操作。
到目前为止,作者的方法可以看作是一个经过序列级监督训练的序列生成模型。但是,值得注意的是,由于给出了实体类别c的映射向量,当模型决定每一步从输入中复制一个字符ki时,F中的ki特征向量也应该被线性分类器归类为实体类别c。更一般地说,作者的方法可以首先学习对齐关系,然后使用匹配的字符训练分类器。这个创新的想法使作者的方法能够监督序列标记模型。作者采用线性层对实体概率分布进行建模,可以表述为:

值得注意的是,方程(11)-(13)并不训练不属于任何关键信息序列的标记。忽略负样本可能会导致严重的缺陷,即所有的输入字符都将被归类为正样本。因此,作者构造了一个额外的辅助损失函数,用于负样本压制负样本被预测为正样本的数量:

该损失函数的主要目的是限制分类为c的输入字符的数量小于或等于实际数量。这种简单而有效的设计大大提高了模型在标签模式下的性能。综上所述,最终的综合损失函数是上述多个分量的加权和:

3.4推理
值得注意的是,由于映射向量以批的形式发送到解码器中,因此可以根据实体特定的语义特征,在不同的模式下生成同一文档中不同类别的关键信息序列。在大多数现实场景中,OCR的结果不可能是完美的。在这方面,用户可以将作者的解码器切换到公式(3) - (9)中所述的复制或预测模式,以补充缺失或错误的标记。该模式更适合于具有较强语义相关性的类别序列。由于所提出的弱监督训练策略的自动对齐特性,解码器还可以使用公式(14)在标记模式中直接进行序列标记。它更倾向于极少的OCR错误或相邻内容之间语义相关性较弱的类别
四、实验
4.1消融实验(Ablation Study)
作者首先将本文提出的文档编码方式和之前的主流方法进行对比,比较结果见表1。BiLSTM能很好地感知序列线索,但它不能有效地模拟一维形式的位置空间;GAT可以利用注意机制自适应地融合有用的特征。然而,捕获位置线索的能力很大程度上取决于特征嵌入的方式;BERT-like可以并行进行前向计算,由于加载了预训练的权值,取得了令人满意的性能;Chargrid采用更直接的方式建立输入矩阵,不能保证鲁棒性和效率。值得注意的是,TextLattice(作者的)取得了优越的性能和保持最快的速度,这充分证明了它的效率。比起位置嵌入GAT或BERT-like方法,作者的方法对位置线索的感知更直接和敏感,并确保了比Chargrid更高程度的信息集中度。

作者同样对编码器中的不同结构进行了消融实验。从表2中可以看出,每个设计对最终的性能都有重要的贡献。虽然CNN可以捕捉到相对位置关系,但CoordConv可以进一步提供相对于整个布局的全局位置线索,从而带来更高的分辨性;作者也尝试只在删除所有步幅和U-Net结构时使用ResNet来执行特征编码。但性能明显下降,说明了语义特征融合在不同接受域下的重要性;残差连接给了模型直接接收字符级语义嵌入的机会,进一步提高了性能。
4.2 与SOTA的比较
结果如表3所示,论文的方法在字符级全监督的情况下,在SROIE和EPHOIE上都表现出了优越的性能,这完全证明了作者的特征编码方法的有效性。此外,在序列级弱监督设置下的结果取得了竞争性能。这完全证实了作者的学习策略的优越性,它可以模拟输入字符和输出序列之间的对应关系。与SROIE相比,EPHOIE通常内容更少,字符类型更多,这减少了学习对齐的难度。相对而言,由于SROIE中的收据通常包含丰富的字符,而相同的字符可能会重复出现,这可能会导致对齐混淆,因此完全监督和弱监督之间的差距进一步扩大。

本文也在End-to-End Setting设置下进行了实验,结果如表4。作者的方法在每种模式下都显示了最先进的新性能。可以推断,选择TCPN-CP或TCPN-T模式的一个重要基础是语义和相应语料库的丰富性。在SROIE上,TCPN-CP的性能明显优于TCPN-T,这主要有利于纠错能力;然而,在EPHOIE上,尽管两种模式都优于TCPN-CP的TCPN-CP,主要原因应该是中文字符的多样性和由此导致的语料库的缺乏。

为了进一步探索作者的框架在现实世界的应用程序中的有效性,作者收集了一个内部的营业执照数据集。它包含了2331张由手机或相机拍摄的真实用户需求的照片,而且大部分图像都是倾斜、扭曲或亮度变化剧烈的。作者随机选择1863张图像进行训练,468张图像进行测试,其中有13种实体需要提取。此外,图片是由移动设备产生的,由于图像质量较差,它肯定包含OCR错误。具体结果见表5。作者的端到端弱监督学习框架大大优于传统的基于规则的匹配方法,这也大大降低了标注成本。与TCPN-T相比,TCPN-CP学习到的内隐语义相关性可以通过纠正OCR错误来进一步提高最终性能。一些定性的结果显示在附录中。

可视化结果如图:



五、总结与讨论
论文提出了一个统一的弱监督学习框架TCPN用于视觉信息提取,它引入了一种有效的编码器、一种新的训练策略和一种可切换的解码器。该方法在EPHOIE数据集上显示出了显著的提高和在SROIE数据集上的竞争性能,充分验证了其有效性。视觉信息提取任务处于自然语言处理和计算机视觉的跨领域,作者的方法旨在缓解对完整注释的过度依赖和OCR错误造成的负面影响。对于未来的研究,作者将通过大规模的无监督数据来探索作者的框架的潜力。这样,就可以进一步提高编码器的泛化、解码器的对齐能力和作者的TCPN-CP的性能。
相关文章:
论文解读TCPN
一、简要介绍视觉信息提取(VIE)近年来受到了越来越多的关注。现有的方法通常首先将光学字符识别(OCR)结果组织成纯文本,然后利用标记级实体注释作为监督来训练序列标记模型。但是,它花费大量的注释成本&…...
性能优化之防抖与节流
(一)防抖 (1)定义:单位事件内,频繁触发,只执行最后一次(像王者荣耀的回城操作) (2)使用场景:搜索输入框、手机号邮箱输入检测 &…...
数组模拟单链表
实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数; 删除第 k个插入的数后面的数; 在第 k个插入的数后插入一个数。 现在要对该链表进行 M次操作,进行完所有操作后,从头到尾输出整…...
蓝桥杯刷题第十四天
第二题:不同子串题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串 a, b, aa, ab, aaa, aa…...
面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了
包含的模块:本文分为十九个模块,分别是:软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以看文末获取方式…...
Activiti 工作流简介
1、什么是工作流 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 1.2、工作…...
【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】
文章目录 前言题目描述输入描述输出描述题目解析参考代码前言 《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…...
【C++】Google编码风格学习
Google规范线上地址:https://zh-google-styleguide.readthedocs.io/en/latest/ 文章目录1. 头文件2. 作用域3. 类4. 函数5. 其他C特性6. 命名约定7. 注释8. 格式1. 头文件 每个cpp/cc文件都对应一个h头文件,除单元测试代码和只包含main()的文件外。 所…...
JavaScript 中的Promise 函数
JavaScript 中的Promise 函数 目录JavaScript 中的Promise 函数1 创建Promise2 Promise的方法3 Promises的状态4 Promise的使用5 返回 Promise 类型6 Promise级联使用在现在的前端开发中我们常常会使用到 JavaScript Promise 函数,但是很多人都不能正确理解Promise …...
学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】
如果只靠学校学的东西去找工作,能找到工作吗? 今天给大家看一个粉丝的真实求职案例,想做Python方面的工作,投了二十几个简历却没人要,心态崩了。为什么没人要?我来告诉你答案。 然后我还会结合我的这些年的…...
快看!这只猫两次登上 Github Trending !!!
前几天我在逛 Github Trending,无意间发现这个Postcat 登上榜单 !好奇心驱使我去了解这个 Postcat。近期它上新了几个有意思的插件,其中 ChatGPT 插件,用户可以直接省去复杂的流程,直接体验 ChatGPT,懂的都懂ÿ…...
Linux->文件系统初识
目录 前言: 1 认识文件 2 文件使用 2.1 文件加载 2.2 外设文件使用 3 文件接口和文件描述符 3.1 文件系统调用接口 open: 3.2 文件描述符 4 缓冲区 前言: 在大家看这篇文章之前,我得提出几个问题: 1. 我们有多…...
InfluxDB和IotDB介绍与性能对比
InfluxDB简介 InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。用于存储和分析时间序列数据的开源数据库。 适合存储设备性能、日志、物联网传感器等带时间戳的数据,其设计目标是实现分布式和水平伸缩扩展。 InfluxDB 包括用于存储和…...
计算机体系结构(校验码+总线)
校验码计算机系统运行时,为了确保数据在传送过程中正确无误,一是提高硬件电路的可靠性;二就是是提高代码的校验能力,包括查错和纠错。通常使用校验码的方法检测传送的数据是否出错。这里的校验码主要是指循环冗余校验码࿰…...
JavaWeb《三》Request请求转发与Response响应
🍎道阻且长,行则将至。🍓 本文是javaweb的第三篇,介绍了Request请求转发与Response响应。 上一篇:JavaWeb《二》Servlet、Request请求 下一篇:敬请期待 目录一、Request请求转发🍏二、Response对…...
断言assert
assert作用:我们使用assert这个宏来调试代码语法:assert(bool表达式)如果表达式为false,会调用std::cout<<abort函数,弹出对话框,#include<iostream> #include<cassert> void…...
【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统
目录一、准备工作二、引入依赖三、创建必要的目录四、编写代码五/六、打包部署(直接基于 smart tomcat)七、验证代码正式编写服务器代码编写数据库相关的操作代码创建数据库/表结构(数据库设计)数据库代码封装数据库操作封装针对数据的增删改查!博客列表页约定前后端…...
详解结构体内存对齐
目录 前言 一、内存大小的计算 1.规则 2.练习 二、为什么要有内存对齐 1.移植原因 2.性能原因 三、修改默认对齐数 总结 前言 本文针对结构体大小的计算进行深度剖析。结构体的大小要遵守内存对齐,在绝大数情况下,会浪费空间。但是有其的价值&…...
指针:程序员的望远镜
指针:程序员的望远镜一、什么是指针1.1 指针的定义1.2 指针和普通变量的区别1.3 指针的作用1.4 指针的优点和缺点二、指针的基本操作2.1 取地址运算符"&"2.2 指针的声明与定义2.3 指针的初始化2.4 指针的解引用2.5 指针的赋值2.6 指针的运算2.7 指针的…...
【python实现学生选课系统】
一、要求: 选课系统 管理员: 创建老师:姓名、性别、年龄、资产 创建课程:课程名称、上课时间、课时费、关联老师 使用pickle保存在文件 学生: 学生:用户名、密码、性别、年龄、选课列表[]、上课记录{课程…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
