多模态:Nougat详解

文章目录

  • 前言
  • 一、模型结构
    • 1. encoder
    • 2. decoder
    • 3. set
  • 二、数据增强
  • 三、数据
    • splitting the pages
  • 四、实验评估
    • repetitions during inference
  • 五、代码
    • 1. 环境安装
    • 2. Dataset(dataset.py)
    • 3. Model(model.py)
  • 总结


前言

科学知识主要存储在书籍和科学期刊中,通常以PDF的形式。然而PDF格式会导致语义信息的损失,特别是对于数学表达式。文章提出Nougat,一种视觉transformer模型,它执行OCR任务,用于将科学文档处理成标记语言

paper:https://arxiv.org/pdf/2308.13418
github:https://github.com/facebookresearch/nougat/tree/main

一、模型结构

模型是一个encoder-decoder模型,允许端到端的训练。请添加图片描述

1. encoder

视觉encoder首先接受一张文档图像,裁剪边距并调整图像大小成固定的尺寸(H,W);如果图像小于矩形,那么增加额外的填充以确保每个图像具有相同的维度。encoder使用了Swin Transformer,将图像分为不重叠的固定大小的窗口,然后应用一系列的自注意力层来聚集跨窗口的信息。该模型输出一个embedding patch(d*N),其中d是隐层维度,N是patch的数目。

2. decoder

使用带有cross-attention的mBART解码器解码(d*N),生成一系列tokens,tokens以自回归方式生成,使用自注意力和交叉注意力分别关注输入序列和编码器输出的不同部分,最后tokens被投影到vocabulary的大小,产生logits。

3. set

以 96 DPI 的分辨率渲染文档图像。由于 Swin Transformer 的限制性可能输入维度,选择输入大小 (H, W ) = (896, 672)。使用预训练的权重初始化模型。Transformer decoder的最大序列长度为 S = 4096。这种相对较大的尺寸是由于学术研究论文的文本可能是密集的,尤其是表格的语法是token密集型的。BART 解码器是一个具有 10 层的仅解码器Transformer。整个架构共有 350M 参数。此外还使用较小的模型 (250M 参数) 进行实验,序列长度略小 S = 3584,只有 4 个解码器层。

训练:使用AdamW优化器训练3个epoch,batch_size是192;由于训练的不稳定性,选择lr init = 5·10−5的学习率,每15次更新减少0.9996倍,直到达到lrend = 7.5·10−6

二、数据增强

在图像识别任务中,使用数据增强来提高泛化性是有效的。文章应用一系列的transformation来模拟扫描文档的缺陷和可变性。这些变换包括:腐蚀,膨胀,高斯噪声,高斯模糊,位图转换,图像压缩,网格失真和弹性变换(这些变换可以借鉴一下,几乎包括了所有图像领域常用的变换)每个都有一个固定的概率来应用给给定图像(这一步在训练前完成)。转换效果如下
请添加图片描述
在训练过程中,会用随机替换token的方式给groud truth增加扰动

三、数据

目前没有pdf页面和其对应的source code的成对数据集。
根据arxiv上的开源文章,建立了自己的数据集。对于layout多样性,我们引入了PMC开源非商业数据集的子集。在预训练过程中,也引入了一部分行业文档库数据。

ARXIV
我们从arxiv上收集了174w+的pape,收集其源代码并编译pdf。为了保证格式的一致性,首先用latex2html处理源文件,并将他们转为html文件。然后解析html文件,并将他们转换为轻量级标记语言,支持标题,粗体和斜体文本、公式,表等各种元素。这样,我们能保证源代码格式是正确的,方便后续处理。整个过程如图
请添加图片描述

PMC
我们还处理了来自PMC的文章,其中除了PDF文件之外,还可以获得具有语义信息的XML文件。我们将这些文件解析为与arxiv文章相同的标记语言格式,我们选择使用PMC少得多的文章,因为XML文件并不总是具有丰富的语义信息。通常,方程和表格存储为图像,这些情况检测起来并非易事,这导致我们决定将PMC文字的使用限制在预训练阶段。

IDL
IDL是行业产生的文档集合。这个仅用在预训练阶段,用于教模型基本的OCR;

splitting the pages

我们根据pdf的页中断来分割markdown标记,然后将每个pdf页面转为图像,来获得图像-标记pair。在编译过程中,Latex会自动确定pdf的页面中断。由于我们没有重新编译每篇论文的Latex源,我们必须启发式地将源文件拆分为对应不同页面的部分。为了实现这一点,我们使用PDF页面上的嵌入文本和源文本进行匹配。

然而,PDF中的图像和表格可能不对应他们在源代码中的位置。为了解决这个问题,我们在预处理阶段去掉了这些元素。然后将识别的标题和XML文件中的标题进行比较,并根据他们的Levenshtein距离进行匹配。一旦源文档被分成单个页面,删除的图形和表格就会在每个页面的末尾重新插入。

四、实验评估

请添加图片描述

在一篇科研文章中,存在三种不同类型的文本:1) 纯文本,占文档的大部分;2) 数学表达式;3) 表格。在评估过程中,检查这三个部分中的每一个都很重要。这是因为在LaTeX中,表达同一个数学表达式有多种方式。尽管在LaTeXML预处理步骤中消除了一些可变性,但仍然存在大量歧义,这种歧义降低了数学和纯文本的得分。数学表达式的预期得分低于纯文本

repetitions during inference

我们观察到模型会退化为一遍又一遍地重复相同的句子。模型无法自行从这种状态中恢复过来。在最简单的情况下,最后一个句子或段落被不断地重复(在大模型中也经常出现)。我们在测试集中的1.5%页面观察到了这种行为,但领域外文档的频率会增加。陷入重复循环是使用贪婪解码采样时基于Transformer模型的一个已知问题。模型也可能在两个句子之间交替,但有时会改变一些单词,因此严格的重复检测是不够的。作者提出在训练过程中引入随机扰动以增强模型对错误预测标记的处理能力,以及在推理时检测和处理重复的方法,但是仍然无法根本解决这类问题,这也让模型的实用性受到限制

个人认为有两种方法可以降低重复和幻觉

1. 输出添加位置信息的预测,比如TextMonkey和mPlug-DocOwl1.5都把text grounding任务做为下游任务进行微调,在消融实验里也提到了增加文本位置预测可以显著降低模型输出的幻觉;2. 降低图像里文本的数量,在图片中文本数量较少时,一般不容易出现重复和幻觉,所以可以按上篇文章提到的办法,将图片划分为多个block,再对单个block训练对应的端到端识别模型,这样也可以解决模型输出的重复问题

五、代码

1. 环境安装

按照github教程安装即可,但注意transformer库的版本, 如果transformer版本可能会报错:
TypeError: BARTDecoder.prepare_inputs_for_inference() got an unexpected keyword argument ‘cache_position’

由于Nougat自己写了“prepare_inputs_for_generation”,而与最新版本的transformers实现不同。因此应该在Nougat中安装旧版本的transformers,例如transformers==4.38.2是没有问题的。

2. Dataset(dataset.py)

主要函数:NougatDataset —— return input_tensor, input_ids, attention_mask

input_tensor: 图像经过预处理后的输入编码
input_ids: 文本信息经过tokenizer处理后的id
attention_mask: input_ids对应的mask

依赖函数:SciPDFDataset——return {“image”: img, “ground_truth”: data.pop(“markdown”), “meta”: data}

数据格式
请添加图片描述

简单来说,SciPDFDataset输出一个样本的基本信息,NougatDatase则输出模型可直接训练的信息

3. Model(model.py)

Swintransformer基于timm构建,Bart基于transformer构建。有个小技巧,如果训练显存太大,可以尝试在编码器解码器中添加一个参数

编码器中添加 —— use_checkpoint=True
请添加图片描述
解码器中添加 —— gradient_checkpointing=True
请添加图片描述


总结

Nougat尝试用一个端到端的方式来实现过去无数小模型+策略配合的结果。确实效果很惊艳,但其缺点也十分明显:

推理速度慢。虽然过去的pipeline设计多个模型,但每个模型都非常轻量化,组合起来的参数量甚至不到Nougat的1/10。
定制化难。
数据集构建成本高。(但是nougat的数据工程确实也很惊艳,非常值得学习!!!)
训练成本高。主要体现在机器成本,需要更多的GPU,更长的训练时间。
优化成本高。Nougat作为一种端到端的解决方法无法针对特定的badcase进行优化。比如在传统方案中,如果表格OCR这个模块效果较差单独优化即可,不会影响到其它模块。但用端到端的方案,当构建倾向表格的数据时,可能会导致其它场景出现新的badcase。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一网统管/视频汇聚/安防监控平台EasyCVR启动后无法访问是什么原因?

智慧城市/一网统管/视频汇聚/安防监控平台EasyCVR兼容性强,支持多协议接入,包括国标GB/T 28181协议、GA/T 1400协议、部标JT808协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等,并能对外分…

接口测试课程结构

课程大纲 如图,接下来的阶段课程,依次专项讲解如下专题,能力级别为中级,进阶后基本为中高级: 1.接口基础知识; 2.抓包工具; 3.接口工具; 4.mock服务搭建(数据模拟服务&am…

Git使用——首次创建本地仓库、配置、初始化、关联远程仓库

1、安装 Git软件 官网:git-scm.com 有时候官网打不开,这里留存个之前下载过的安装包: https://download.csdn.net/download/weixin_43908355/89502977 2、配置本地仓库 在准备建仓库的文件夹里,右键点击:Git Bash …

鸿蒙系统创建签名文件及使用创建签名文件打包并安装

* 第一步 第二步:创建.p12文件,点击New如果有的话就Choose Existing 填好下面信息 点击Next进入到下面界面 开始生成csr文件如下图 点击OK–>Finish 文件保存在了下面目录 第三步 1.访问华为开发者平台,登录开发者账号,进…

【linux服务器篇】-Redis-RDM远程连接redis

redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说: Redis Desktop Manager 简单的来讲就是Redis可视化工具,可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…

【面试八股总结】面向对象三大特性、虚函数、纯虚函数、虚继承

参考资料:阿秀 一、面向对象三大特性 封装:将数据和代码捆绑在一起,避免外界干扰和不确定性访问 继承:让某种类型对象获得另一个类型对象的属性和方法 多态:同一种事务表现出不同事务的能力,即&#xf…

数据库课设---学生宿舍管理系统(sql server+C#)

1.引言 1.1 内容及要求 设计内容:设计学生宿舍管理系统。 设计要求: (1)数据库应用系统开发的需求分析,写出比较完善系统功能。 (2)数据库概念模型设计、逻辑模型设计以及物理模型设计。 …

yolov8 人体姿态识别

引言 在计算机视觉的各种应用中,人体姿态检测是一项极具挑战性的任务,它能够帮助我们理解人体各部位的空间位置。本文将详细介绍如何使用 YOLOv8 和 Python 实现一个人体姿态检测系统,涵盖模型加载、图像预处理、姿态预测到结果可视化的全流…

Echarts水球图(liquidFill)添加文字

效果 代码 {type: liquidFill,shape: shapes[0].value,radius: 90%,data: [{name: 独立百货,value: 0}],center: [50%, 50%],color: [{type: linear,x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: #446bf5},{offset: 1,color: #2ca3e2}],globalCoord: false}],backgro…

JSP实现简单的登录和注册

JSP实现登录和注册(Map集合模拟数据库) 1、login.jsp2、 loginSelect.jsp3、register.jsp4、 RegisterSelect.jsp5、 index.jsp 1、login.jsp login.jsp中username和password在LoginSelect.jsp验证是否一致使用session.setAttribute("login_msg&quo…

【RHCE】dns实验0707

题目: 做法: 1.创建两个虚拟机 张三:且有加密 李四: 设置zhangsan/lisi对应的html网页 主服务器测试: 证书验证 2.配置dns 主服务器: 区域文件(zs/lisi) 从服务器: 且dns为主服务…

OZON生活家居用品爆款新品

OZON生活家居用品爆款新品涵盖了多个方面,这些产品不仅满足了消费者对生活品质的追求,也反映了当前市场的热门趋势。以下是一些在OZON平台上备受关注的生活家居用品爆款新品: OZON生活家居用品爆款新品工具:D。DDqbt。COm/74rD T…

Midway Serverless 发布 2

可以看看优化后的开发情况,不仅和应用一样,速度还比较快,也不会生成临时目录,修改实时生效。 这是 v2.0 和 v1.0 的根本性变化,也是整体架构升级带来的巨大优势。 当然,这一块并不是功能的新增&#xff0c…

电脑清理c盘内存空间怎么清理免费 怎么清理c盘的垃圾文件又不删除有用文件

在计算机使用过程中,随着时间的推移,C盘空间可能会被各种临时文件、缓存和无用的注册表项占用。这不仅会导致C盘空间不足,还可能影响计算机的性能。那么怎么样清理C盘内存空间,怎么样清理C盘的垃圾避开系统文件呢? 一…

数据分析案例-2024 年全电动汽车数据集可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Navicat BI 教程 | 图表设计和仪表板

商业智能(Business Intelligence,BI)是将数据转化为可操作的洞察力的实践,使组织能够简化生产力和实现更好的整体绩效。本博客最近介绍了新的 Navicat BI,这是一个帮助 BI 专业人员通过创建数据可视化(如图…

侯捷C++面向对象高级编程(上)-11-虚函数与多态

1.虚函数 2.virtual 3.继承+复合关系下的构造和析构 4.委托+继承

C语言 | Leetcode C语言题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int dp[301][301]{0};int wid0;if(matrixSize0&&matrixColSize[0]0){return 0;}for(int i0;i<matrixSize;i){for(int j0;j<matrixColSize[0];j){if(m…

Docker进入MongoDB

先是命令行开启docker镜像&#xff0c;然后进入docker镜像&#xff0c;这是两步 进入之后&#xff0c;开头会变成root&#xff0c;我的理解是进入了另一个linux系统了&#xff0c;直接执行相应的软件 这里直接use databse就是进入了&#xff0c;据说MongoDB是慢启动&#xff0c…

MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 MMGPL: Multimodal Medical Data Analysis with Graph Prompt Learning MMGPL: 多模态医学数据分析与图提示学习 01 文献速递介绍 神经学障碍&#xff0c;包括自闭症谱系障碍&#xff08;ASD&#xff09;&#xff08;Lord等&#xff0c;2018年&#xff09;和阿…