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…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...
window 显示驱动开发-如何查询视频处理功能(三)
D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针,该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...

Spring是如何实现无代理对象的循环依赖
无代理对象的循环依赖 什么是循环依赖解决方案实现方式测试验证 引入代理对象的影响创建代理对象问题分析 源码见:mini-spring 什么是循环依赖 循环依赖是指在对象创建过程中,两个或多个对象相互依赖,导致创建过程陷入死循环。以下通过一个简…...

华为云Flexus+DeepSeek征文 | MaaS平台避坑指南:DeepSeek商用服务开通与成本控制
作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 作者简介 前言 一、技术架构概览 1.1 整体架构设…...