多模态: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.mfbz.cn/a/788601.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UML建模工具Draw.io简介

新书速览|《UML 2.5基础、建模与设计实践 Draw.io是一个非常出色的免费、开源、简洁、方便的绘图软件,利用这款软件可以绘制出生动有趣的图形,包括流程图、地图、网络架构图、UML用例图、流程图等。它支持各种快捷键,免费提供了1000多张画图…

【基于深度学习方法的激光雷达点云配准系列之GeoTransformer】——粗配准

【GeoTransformer系列】——粗配准 1.coarse_matching1.1 概要1.2 功能1.3 超参1.4 input1.5 output2 coarse_target2.1 概要2.2 功能2.3 input2.4 output在模型部分有了初步了解之后, 接下来我们对后续的粗配准、精配准等部分依次进行解读. 本篇主要来看粗配准部分, 代码是在G…

机器人三定律及伦理分析

全世界的机器人定律并没有一个统一的标准或体系,但是在科学文献中,最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础,分析现有的机器人伦理和实际应用中的问题,给出若干实例,并对相…

贴脸细看Mixtral 8x7B- 稀疏混合专家模型(MoE)的创新与推动

贴脸细看Mixtral 8x7B- 稀疏混合专家模型(MoE)的创新与推动 原创 一路到底孟子敬 上堵吟 2024年01月15日 20:05 美国 I. 引言 A. Mixtral 8x7B的背景和目的 • 背景:随着大型语言模型在自然语言处理(NLP)领域的广泛…

类型“RouteRecordName”上不存在属性“includes”。 类型“symbol”上不存在属性“includes”

确定 route.name 运行时是 字符串,强制转换 为字符串。 removeRoute(id: string) { this.dynamRoute this.dynamRoute.filter(route > !(route.name as string).includes(id)) localStorage.setItem(dynamRoute, JSON.stringify(this.dynamRoute)) delete this.t…

Linux驱动开发-03字符设备驱动框架搭建

一、字符设备驱动开发步骤 驱动模块的加载和卸载(将驱动编译模块,insmod加载驱动运行)字符设备注册与注销(我们的驱动实际上是去操作底层的硬件,所以需要向系统注册一个设备,告诉Linux系统,我有…

寂静孤独的404页面源码

寂静孤独的404页面源码,灯光闪烁动态效果,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 寂静孤独的404页面源…

普中51单片机:中断系统与寄存器解析(六)

文章目录 引言中断流程图中断优先级下降沿中断结构图中断相关寄存器IE中断允许寄存器(可位寻址)XICON辅助中断控制寄存器(可位寻址)TCON标志控制寄存器SCON串行口控制寄存器 中断号中断响应条件中断函数代码模板电路图开发板IO连接…

Spin Image(旋转图像)

Spin Image特征描述子原理 Spin Image是Johnson于1999年提出,Lazebnik于2005年完善的基于点云空间分布的特征描述方法,其思想是将一定区域的点云分布转换成二维的Spin Image,然后对场景和模型的Spin Image进行相似性度量。Spin Image方法与通…

OJhelper一款帮助你获取各大oj信息的软件

项目地址 应用功能 目前应用支持:查询、自定义、收藏各大oj比赛信息,跳转比赛界面。查询各大oj的Rating分以及题量,查看题量饼状图。 应用环境 windows和安卓端 应用预览: 维护概况 后期会提供持续更新,具体可以…

无法访问。你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限。【解决办法】

问题描述 新建好一台windows虚拟机,两台设备网络是互通的,但是物理机在访问虚拟机的网络共享文件资源时,出现图下所示的报错:XXX无法访问。你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限。用户…

在FPGA程序中Handshake(握手)和Register(寄存器)区别

在FPGA程序中,Handshake(握手)和Register(寄存器)是两种不同的通信和数据传输机制。它们各有特点和适用场景。以下是它们的区别和应用场景的详细解释: Register(寄存器) 特点&#…

RFID智能锁控系统在物流安全运输中的应用与效益分析

一、物流锁控系统现状与挑战 1.1 传统锁控系统的局限性 安全性不足:机械锁容易被撬开或钥匙被复制,导致货物在运输过程中面临被盗风险。 无法实时追踪:一旦货物离开发货点,物流公司无法实时监控货物状态,增加了货物…

全终端自动化测试框架wyTest

突然有一些觉悟,程序猿不能只会吭哧吭哧的低头做事,应该学会怎么去展示自己,怎么去宣传自己,怎么把自己想做的事表述清楚。 于是,这两天一直在整理自己的作品,也为接下来的找工作多做点准备。接下来…

初始化线程的4种方式

1. 继承Thread 缺点:无法获取线程的运算结果。 public class ThreadTest{public static void main(String[] args){Thread01 thread new Thread01();thread.start();}public static class Thread01 extends Thread{public void run(){System.out.println("当前…

基于蓝牙iBeacon定位技术的商场3D楼层导视软件功能详解与实施效益

在现代商场的繁华与复杂中,寻找目的地往往令人头疼。维小帮3D楼层导视软件以其创新技术,为顾客带来无缝、直观的跨楼层导航体验,让每一次商场消费都成为享受。 商场3D楼层导视软件功能服务 3D多楼层导视地图,商场布局一览无遗 …

数字经济时代,你有数商吗?

引言:随着科技的飞速发展,我们正步入一个全新的数字经济时代。在这个时代里,数据成为了新的石油,是推动经济增长和社会进步的关键要素。而在这个数据洪流中,一个新兴的概念——“数商”,正逐渐进入公众的视…

C#创建windows服务程序

步骤 1: 创建Windows服务项目 打开Visual Studio。选择“创建新项目”。在项目类型中搜索“Windows Service”并选择一个C#模板(如“Windows Service (.NET Framework)”),点击下一步。输入项目名称、位置和其他选项,然后点击“创…

C#中简单Socket编程

C#中简单Socket编程 Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。 接下来,我用C#语言来进行简单的TCP通信和UDP通信。 一、TCP通信 新建项目SocketTest,首先添加TCP通信的客户端代…

6.MkDocs附录

安装插件 在 MkDocs 中,插件通常是通过 pip​ 工具安装的。你可以使用以下步骤来安装和配置 MkDocs 插件。 1.使用 pip​ 命令安装你需要的插件。例如 pip install pymdown-extensions‍ 2.更新 mkdocs.yml​ 文件。 ‍ 3.使用 mkdocs serve​ 命令本地预览你…