Nougat来了,能否成为pdf格式转换的新神器?
Nougat来了,能否成为pdf格式转换的新神器?
论文链接:https://arxiv.org/pdf/2308.13418v1.pdf
项目地址:https://github.com/facebookresearch/nougat
What happened?🤨
科学知识主要存储在书籍和科学期刊中,通常是 PDF 格式。然而,PDF 格式会导致语义信息丢失,尤其是数学表达式。为此,MetaAI最新提出了Nougat (Neural Optical Understanding for Academic Documents),这是一个Visual Transformer,可执行光学字符识别(OCR)任务,将科学文档处理成标记语言。MetaAI在一个新的科学文档数据集上演示了Nougat的有效性。通过弥合人类可读文档与机器可读文本之间的鸿沟,所提出的方法为在数字时代提高科学知识的可访问性提供了一个前景广阔的解决方案。同时,MetaAI也发布了模型和代码,以加速未来的科学文本识别工作,Nougat在github上相应repo的star数在这几天也是一路疯涨:
下面,我们一起来瞅一瞅Nougat的一些情况吧~
为什么要做?😳
在数字化信息高速发展的今天,学术界对于高效、准确的数据转换工具的需求日益增加。作为科研打工仔(bushi),我们平时在阅读论文或者科学文献时见到的文件格式基本上是 PDF(Portable Document Format)。据论文介绍,PDF 也已经成为互联网上第二重要的数据格式,占总访问量的 2.4%。
然而,存储在 PDF 等文件中的信息很难转成其他格式,尤其对数学公式更是显得无能为力,因为转换过程中很大程度上会丢失信息。就像下图所展示的深度学习经典论文《Attention is All you Need》这类带有数学公式的 PDF,转换起来就比较麻烦。
为此,MetaAI便推出了这款OCR工具————Nougat。Nougat 基于 Transformer 模型构建而成,可以轻松的将 PDF 文档转换为 MultiMarkdown,扫描版的 PDF 也能转换,上面这些让人头疼的数学公式也不在话下。
甚至,可以往更大的方向吹一吹“Nougat将科学文档处理成标记语言,在人类可读文档和机器可读文本之间架起了一座桥梁。”
真的有用?——效果展示🗒️
读到这里,详细应该有很多读者已经迫不及待的想看看这玩意儿的实际效果了,MetaAI也在项目主页上放出了一些Nougat的[Example Paper Conversions]示例,下面让我们一起来看看:
首先让我们看看Nougat対最近火热的《LLaMA: Open and Efficient Foundation Language Models》这篇论文的转换效果:
首先是最平常的文本内容,没有任何的难度
-
原pdf
-
转换后
再看看对表格和公式的处理,也是十分完美
-
原pdf
-
转换后
同时,不仅是正常的pdf文档,扫描件也一样可以处理:
怎么样,总的看下来Nougat的效果还是十分惊艳的。同时,MetaAI也在Huggingface上开放了Community Demo: https://huggingface.co/spaces/ysharma/nougat,大家有想亲自体验的也可以直接上手去玩一玩~😉 笔者这里也是上手以Nougat自己这篇论文本身作为输入上手体验了一下(禁止套娃😂),结果还真是不错:
怎么做到的?——模型概览💻
限于篇幅原因,我们这里只大概瞄一眼Nougat的整体结构,如果有对这个领域或者是模型细节感兴趣同学,可以去GitHub上查看代码和论文,进一步学习和使用Nougat。
整体结构
如下图所示,Nougat是一个编码器 - 解码器 的Transformer 架构,允许端到端的训练,并以 Donut 架构为基础。该模型不需要任何 OCR 相关输入或模块,文本由网络隐式识别。
Encoder:视觉编码器接收文档图像 x ∈ R3×H0 ×W0 ,裁剪边距并调整图像大小以适应大小为 (H, W) 的固定矩形。如果图像小于矩形,则添加额外的填充以确保每个图像具有相同的维度。我们使用 Swin Transformer,这是一种分层视觉转换器 ,它将图像分割为固定大小的非重叠窗口,并应用一系列自注意力层来聚合这些窗口的信息。该模型输出一个嵌入补丁序列 z ∈ Rd×N,其中 d 是潜在维度,N 是补丁的数量。
Decoder:使用具有交叉注意的变压器解码器架构将编码后的图像 z 解码为一系列标记。令牌以自回归方式生成,使用自注意力和交叉注意力分别关注输入序列和编码器输出的不同部分。最后,输出被投影到词汇表 v 的大小,产生 logits ℓ ∈ Rv。
独特的数据增强
在图像识别任务中,使用数据增强技术来提高泛化能力往往是有益的。由于本文只研究数字化的学术研究论文,因此需要使用一些变换来模拟扫描文件的不完美和多变性。这些变换包括侵蚀、扩张、高斯噪声、高斯模糊、位图转换、图像压缩、网格变形和弹性变换 。每种变换都有固定的概率应用于给定的图像。这些变换在 Albumentations 库中实现。在训练过程中,这里也会通过随机替换 token 的方式,对实际文本添加扰动。
总结
总的来说,Nougat为我们提供了一种新的解决方案,可以将科学文献转化为机器可读的格式,从而提高了科学知识的可访问性和可搜索性。这款工具特别适用于学术界,尤其是那些需要频繁互动和转换学术文章和研究论文的研究人员和学者(科研打工仔)。通过Nougat,他们可以轻松地将包含复杂数学公式的PDF文件转换为其他格式,而不会丢失关键信息。这在很大程度上提高了研究效率和数据准确性。
关于Nougat能否成为pdf格式转换的新神器,纳入更多科研工作者的日常研究工作流程,从而彻底改变我们处理学术数据的方式,还需要更多的时间来沉淀与观察。
据准确性。
关于Nougat能否成为pdf格式转换的新神器,纳入更多科研工作者的日常研究工作流程,从而彻底改变我们处理学术数据的方式,还需要更多的时间来沉淀与观察。
同时,作为业界领先的基于 PyTorch 和 mmdetection 的开源工具箱,MMOCR(open-mmlab/mmocr: OpenMMLab Text Detection, Recognition and Understanding Toolbox (github.com))一直以来都专注于文本检测,文本识别以及相应的下游任务,我们也期待着MMOCR对Nougat相关工作的进一步跟进~
相关文章:

Nougat来了,能否成为pdf格式转换的新神器?
Nougat来了,能否成为pdf格式转换的新神器? 论文链接:https://arxiv.org/pdf/2308.13418v1.pdf 项目地址:https://github.com/facebookresearch/nougat What happened?🤨 科学知识主要存储在书籍和科学期…...

C++文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C 中另一个标准库 fstream,它定义了三个新的数据类型&#x…...
代码随想录算法训练营第23期day31|贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
目录 一、贪心算法理论基础 二、(leetcode 455)分发饼干 三、(leetcode 376)摆动序列 四、(leetcode 53)最大子序和 一、贪心算法理论基础 1.什么是贪心 贪心的本质是选择每一阶段的局部最优…...
mdadm命令详解及实验过程
mdadm命令详解及实验过程 ⼀.概念 mdadm是multiple devices admin的简称,它是Linux下的⼀款标准的软件 RAID 管理⼯具,作者是Neil Brown ⼆.特点 mdadm能够诊断、监控和收集详细的阵列信息 mdadm是⼀个单独集成化的程序⽽不是⼀些分散程序的集合&#…...

推荐几个程序员必逛的个人技术博客网站
1、美团技术团队 地 址: 美团技术团队简 介:美团技术团队的博客,干货满满。推荐指数:⭐⭐⭐⭐⭐ 2、阮一峰的网络日志 地 址: 阮一峰的个人网站 - Ruan YiFengs Personal Website简 介:大神阮一峰,博客风格真正…...

Python桌面应用之XX学院水卡报表查询系统(Tkinter+cx_Oracle)
一、功能样式 Python桌面应用之XX学院水卡报表查询系统功能: 连接Oracle数据库,查询XX学院水卡操作总明细报表,汇总数据报表,个人明细报表,进行预览并且支持导出报表 1.总明细报表样式 2.汇总明细样式 3.个人明细…...

ubuntu 中使用Qt连接MMSQl,报错libqsqlodbc.so: undefined symbol: SQLAllocHandle
Qt4.8.7的源码编译出来的libqsqlodbc.so,在使用时报错libqsqlodbc.so: undefined symbol: SQLAllocHandle,需要在编译libqsqlodbc.so 的项目pro文件加上LIBS -L/usr/local/lib -lodbc。 这里的路径根据自己的实际情况填写。 编辑: 使用uni…...
笔试,猴子吃香蕉,多线程写法
package demo;import java.util.concurrent.CountDownLatch;/*** description: 猴子吃香蕉* author: wxm* create: 2023-10-23 14:01**/ public class Main {public static void main(String[] args) throws InterruptedException {Monkey[] m new Monkey[3];Resource r new …...

安装docker ,更换docker版本
docker dockerd & containerd Dockerd(Docker 守护进程)在其底层使用 Containerd 来管理容器。Containerd 是一个开源的容器运行时管理器,由 Docker 公司于2017年开发并开源,它负责实际的容器生命周期管理。 以下是 Docker 守…...

英语小作文写作模板及步骤(1)
...

编写hello驱动程序
hello的驱动编写 编写驱动程序的步骤 1.确定主设备号,也可以让内核分配 2.定义自己的 file_operations 结构体 3.实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构 体 4.把 file_operations 结构体告诉内核:regist…...
ZYNQ中断例程
GPIO 中断系统初始化流程: 第一步:初始化 cpu 的异常处理功能 第二步:初始化中断控制器 第三步:向 CPU 注册异常处理回调函数; 第四步:将中断控制器中的对应中断 ID 的中断与中断控制器相连接 第五步:设置 …...

常用linux命令 linux_cmd_sheet
查看文件大小 ls -al 显示每个文件的kb大小 查看系统日志 dmesg -T | tail 在 top 命令中,RES 和 VIRT(或者 total-vm)是用来表示进程内存使用的两个不同指标,它们之间有以下区别: RES(Resident Set Size…...

【proteus】8086 写一个汇编程序并调试
参考书籍:微机原理与接口技术——基于8086和Proteus仿真(第3版)p103-105,p119-122. 参考程序是p70,例4-1 在上一篇的基础上: 创建项目和汇编文件 写一个汇编程序并编译 双击8086的元件图: …...
大数据之LibrA数据库常见术语(四)
Failover 指当某个节点出现故障时,自动切换到备节点上的过程。反之,从备节点上切换回来的过程称为Failback。 Freeze 在事务ID耗尽时由AutoVacuum Worker进程自动执行的操作。FusionInsight LibrA会把事务ID记在行头,在一个事务取得一行时&…...
Docker基础知识
文章目录 Docker Docker 一次构建,处处运行,类似于JVM 虚拟机是软件硬件(需要Hypervisors实现硬件资源虚拟化): 资源占用大启动慢(虚拟机是分钟级,Docker是秒级)冗余步骤多 sha2…...
swoole 是什么?
Swoole是一个为PHP用C和C编写的基于事件的高性能异步& 协程并行网络通信引擎; 使 PHP 开发人员可以编写高性能的协程 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IO…...
我想要一个勋章
目录 一、背景二、过程三、总结 一、背景 十年前结缘,也许是冥冥中自有天注定,注定要给自己多加一个今天的节日。 二、过程 一个勋章,一个有意义的标志。 一个勋章,一个时间轮上的帧。 一个勋章,一个二进制的节点。…...

微信小程序设计之主体文件app-json-pages
一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…...

C语言-面试题实现有序序列合并
要求: a.输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。 数据范围: 1≤n,m≤1000 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 输入描述: 1.输入包含三行, 2.第一行包含两个正整数n, m&am…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...