marker - PDF 转 markdown

news2024/11/24 5:21:28

文章目录

    • 一、关于 marker
      • 特点
      • 它是如何工作的
      • 例子
      • 性能
      • 商业用途
      • 托管API
      • 限制
    • 二、安装
      • Optional: OCRMyPDF
    • 三、用法
      • 1、配置
      • 转换单个文件
      • 转换多个文件
      • 在多个GPU上转换多个文件
    • 三、故障排除
    • 四、有用的设置
    • 五、基准测试
      • 速度
      • 精度
      • 吞吐量
    • 六、运行自己的基准测试
    • 七、感谢


一、关于 marker

Marker 快速准确地将PDF转换为 markdown。

  • github : https://github.com/VikParuchuri/marker
  • discord : https://discord.gg//KuZwXNGnfH
  • datalab 主页:https://www.datalab.to/

特点

  • 支持广泛的文档(针对书籍和科学论文进行了优化)
  • 支持所有语言
  • 删除页眉/页脚/其他工件
  • 格式化表和代码块
  • 提取和保存图像以及降价
  • 将大多数方程转换为乳胶
  • 适用于GPU、CPU或MPS

它是如何工作的

Marker是深度学习模型的管道:

  • 提取文本,必要时进行OCR(启发式、surya、tesseract)
  • 检测页面布局并查找阅读顺序(surya)
  • 清理和格式化每个块(启发式,texify
  • 组合块和后处理完整文本(启发式,pdf_postprocessor)

它只在必要时使用模型,从而提高速度和准确性。


例子

PDF类型marker牛轧糖
Think PythonTextbook查看查看
Think OSTextbook Textbook查看查看
Switch Transformersarxiv 论文查看查看
Multi-column CNNarxiv 论文查看查看

性能

Benchmark overall

上述结果带有marker和牛轧糖设置,因此它们各自在A6000上占用约4GB的VRAM。

有关详细的速度和精度基准测试以及如何运行您自己的基准测试的说明,请参阅下文。


商业用途

我希望marker尽可能广泛地使用,同时仍然资助我的开发/培训费用。研究和个人使用总是可以的,但是商业使用有一些限制。

模型的权重是cc-by-nc-sa-4.0许可的,但是对于最近12个月总收入低于500万美元和终身风险投资/天使基金筹集不到500万美元的任何组织,我将放弃这一点。
如果你想取消GPL许可要求(双许可)和/或在商业上使用超过收入限制的权重,请查看此处的选项。


托管API

这里有一个用于marker的托管API:

  • 支持PDF、word文档和幻灯片
  • 领先的基于云的竞争对手价格的1/4
  • 利用Modal实现高可靠性,没有延迟峰值

限制

PDF是一种棘手的格式,因此marker并不总是完美工作。以下是路线图上要解决的一些已知限制:

  • Marker不会将100%的方程转换为 LaTeX。这是因为它必须检测然后转换。
  • 表格格式并不总是100%正确-文本可能在错误的列中。
  • 空格和缩进并不总是得到尊重。
  • 并非所有行/跨度都将正确连接。
  • 这在不需要大量光学字符识别的数字PDF上效果最好。它针对速度进行了优化,有限的光学字符识别用于修复错误。

二、安装

您需要 python 3.9+ 和 PyTorch。如果您不使用Mac或GPU机器,您可能需要先安装torch的CPU版本。有关更多详细信息,请参阅此处。

Install with:

pip install marker-pdf

Optional: OCRMyPDF

仅当您想使用可选的ocrmypdf作为ocr后端时才需要。请注意,ocrmypdf包含Ghostscript,一个AGPL依赖项,但通过CLI调用它,因此它不会触发许可条款。

请参阅说明这里


三、用法

1、配置

首先,一些配置:

  • 检查marker/settings.py中的设置。您可以使用环境变量覆盖任何设置。
  • 您的 torch device 将被自动检测到,但您可以覆盖此设置。例如, TORCH_DEVICE=cuda
    • 如果使用GPU,请将INFERENCE_RAM设置为GPU VRAM(每个GPU)。例如,如果您有 16 GB的VRAM,则设置INFERENCE_RAM=16
    • 根据您的文档类型,marker 每个任务的平均内存使用量可能略有不同。如果您注意到任务失败并出现GPU内存溢出错误,您可以配置VRAM_PER_TASK进行调整。
  • 默认情况下,marker 将使用surya进行OCR。Surya 在CPU上速度较慢,但比tesseract更准确。
    如果您想要更快的OCR,请将OCR_ENGINE设置为ocrmypdf。这也需要外部依赖项(见上文)。
    如果您根本不想要OCR,请将OCR_ENGINE设置为None

转换单个文件

marker_single /path/to/file.pdf /path/to/output/folder --batch_multiplier 2 --max_pages 10 --langs English

  • --batch_multiplier是如果您有额外的VRAM,将默认批处理大小乘以多少。数字越高,需要更多的VRAM,但处理速度更快。默认设置为2。默认批处理大小将需要约3GB的VRAM。
  • --max_pages–是要处理的最大页数。省略此项以转换整个文档。
  • --langs是文档中以逗号分隔的语言列表,用于OCR

确保DEFAULT_LANG设置适合您的文档。OCR支持的语言列表在这里。
如果您需要更多语言,您可以使用Tesseract支持的任何语言,如果您将OCR_ENGINE设置为ocrmypdf
如果您不需要OCR,marker可以使用任何语言。


转换多个文件

marker /path/to/input/folder /path/to/output/folder --workers 10 --max 10 --metadata_file /path/to/metadata.json --min_length 10000

  • --workers是一次要转换的pdf数量。默认情况下设置为1,但您可以增加它以增加吞吐量,但代价是更多的 CPU/GPU 使用量。如果您使用的是GPU,并行性不会超过 INFERENCE_RAM / VRAM_PER_TASK
  • --max是要转换的pdf的最大数量。省略此项以转换文件夹中的所有pdf。
  • --min_length 是在考虑处理之前需要从pdf中提取的最小字符数。如果您正在处理大量pdf,我建议设置此设置以避免OCRing主要是图像的pdf。(减慢一切)
  • --metadata_file是一个json文件的可选路径,其中包含关于pdf的元数据。如果您提供它,它将用于设置每个pdf的语言。如果没有,将使用DEFAULT_LANG。格式为:
{
  "pdf1.pdf": {"languages": ["English"]},
  "pdf2.pdf": {"languages": ["Spanish", "Russian"]},
  ...
}

您可以使用语言名称或代码。确切的代码取决于OCR引擎。

有关surya代码的完整列表,请参阅此处,有关tesseract,请参阅此处。


在多个GPU上转换多个文件

MIN_LENGTH=10000 METADATA_FILE=../pdf_meta.json NUM_DEVICES=4 NUM_WORKERS=15 marker_chunk_convert ../pdf_in ../md_out

  • METADATA_FILE是json文件的可选路径,其中包含有关pdf的元数据。格式见上文。
  • NUM_DEVICES是要使用的GPU数量。应该是2或更大。
  • NUM_WORKERS是在每个GPU上运行的并行进程数。每个GPU的并行度不会超过INFERENCE_RAM / VRAM_PER_TASK
  • MIN_LENGTH是在考虑处理之前需要从pdf中提取的最小字符数。如果您正在处理大量pdf,我建议设置此设置以避免OCRing主要是图像的pdf。(减慢一切)

请注意,上面的env变量特定于此脚本,不能在local.env中设置。


三、故障排除

如果事情没有按照您期望的方式工作,您可能会发现一些设置很有用:

  • OCR_ALL_PAGES-将此设置为true以强制所有页面进行OCR。如果默认情况下无法正确识别表格布局,或者存在乱码文本,这将非常有用。
  • TORCH_DEVICE-将此设置为强制marker使用给定的手电筒设备进行推理。
  • OCR_ENGINE-可以将此设置为suryaocrmypdf
  • DEBUG-将此设置为True会在转换多个pdf时显示光线日志
  • 验证您是否正确设置了语言或传入了元数据文件。
  • 如果出现内存溢出错误,请减少工作计数(增加VRAM_PER_TASK设置)。您还可以尝试将长PDF拆分为多个文件。

一般来说,如果输出不是您所期望的,尝试OCR PDF是很好的第一步。并非所有PDF都嵌入了良好的文本/bbox。


四、有用的设置

这些设置可以提高/更改输出质量:

  • OCR_ALL_PAGES将强制OCR整个文档。由于使用较旧的OCR引擎,许多PDF嵌入了错误的文本。
  • PAGINATE_OUTPUT将在页面之间放置水平规则。默认值:假。
  • EXTRACT_IMAGES将提取图像并单独保存。默认值:真。
  • BAD_SPAN_TYPES指定要从降价输出中删除的布局块。

五、基准测试

基准PDF提取质量很难。我通过查找具有pdf版本和 latex 源的书籍和科学论文创建了一个测试集。我将 latex 转换为文本,并将引用与文本提取方法的输出进行比较。它很嘈杂,但至少方向正确。

基准测试表明,marker比 nougat 快4倍,并且在arxiv之外更准确(牛轧糖是在arxiv数据上训练的)。我们展示了朴素的文本提取(无需处理即可从pdf中提取文本)进行比较。


速度

方法平均得分时间每页时间每个文档
marker0.613721 0.63199158.1432
牛轧糖0.4066032.59702 238.926

精度

前3本是非arxiv书籍,后3本是arxiv论文。

方法multicolcnn. pdfswitch_trans.pdf thinkpython.pdfthinkos.pdfthinkdsp.pdf人群.pdf
marker0.5361760.5168330.705150.7106570.6900420.523467
牛轧糖0.440090.5889730.3227060.4013420.1608420.525663

基准测试期间,牛轧糖的GPU内存使用量峰值为4.2GB,marker为4.1GB。基准测试在A6000 Ada上运行。


吞吐量

Marker平均每个任务占用大约4GB的VRAM,因此您可以在A6000上并行转换12个文档。

Benchmark results


六、运行自己的基准测试

您可以在您的机器上对marker的性能进行基准测试。手动安装marker:

git clone https://github.com/VikParuchuri/marker.git
poetry install

在此处下载基准数据并解压缩。然后像这样运行benchmark.py

python benchmark.py data/pdfs data/references report.json --nougat

这将marker与其他文本提取方法进行基准测试。它为牛轧糖和marker设置批次大小,以便为每个设置使用相似数量的GPU RAM。

省略--nougat以从基准测试中排除nougat。我不建议在CPU上运行nougat,因为它非常慢。


七、感谢

如果没有惊人的开源模型和数据集,这项工作是不可能的,包括(但不限于):

  • Surya
  • Texify
  • pdfium2/pdfium
  • DocLayNet从IBM
  • 来自谷歌的ByT5

感谢这些模型和数据集的作者将它们提供给社区!


2024-08-02(五)

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

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

相关文章

C++初学(9)

9.1、结构简介 虽然数组能够和存储多个元素,但所有元素必须相同,也就是说,同一个数组不能既存放int类型也存放float类型,而C的结构可以满足要求。结构是一种比数组更灵活的数据格式,因为同一个结构可以存储多种类型的…

防御笔记第九天(持续更新)

注意:攻击可能只是一个点,而防御需要全方面进行。 1.IAE引擎 2.DPI DPI ----深度包检测 --- 针对完整的数据包,进行内容的识别和检测 3.基于特征字的检测技术 4,基于应用网关的检测技术 基于应用网关的检测技术 --- 有些应用控…

数据库方言

数据库方言,也称数据库领域特定语言(DSL),是针对特定数据库系统的专有扩展或子集,它允许用户在特定环境内使用更高效、更简洁的查询语句。 关键字(Keywords) 关键字是数据库方言中预定义的单词&…

Windows 安装Redis7.4版本图文教程

本章教程,主要介绍如何在Windows上安装Redis7.4版本的Redis,并以服务方式实现开机自启动。 1、下载安装包 通过百度网盘分享的文件:Redis-7.4.0-Windows-x64-cygwin-with-Service.zip 链接:https://pan.baidu.com/s/1NFGXrCwumDzl…

【计算机毕业设计】703学生考勤管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

软件测试 -- 黑盒、灰盒、白盒测试,冒烟测试、回归测试

软件测试目的:查找软件中缺陷(bug),保障软件质量。

IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)

首先是防火墙的常规配置和区域配置 标的有点乱但是选项含义都做了解释,看不懂可以直接按图抄作业。 其次是对需要访问的端口做访问放通 情况1 DDNS位于openwrt网关上,外网访问openwrt,通过端口转发访问内部服务器。此情况需要设置端口转发。 …

6-4 填充和步幅

在前面的例子 图6.2.1中,输入的高度和宽度都为 3 3 3,卷积核的高度和宽度都为 2 2 2,生成的输出表征的维数为 2 2 2\times 2 22。 正如我们在 6-2节中所概括的那样,假设输入形状为 n h n w n_{h}\times n_{w} nh​nw​&#xff…

大象机器人水星MercuryX1轮式人形机器人基于物体标记建模的键盘点按操作!

引言 在现代科技的推动下,机器人在日常生活和工作场景中的应用越来越广泛。本文将介绍MercuryX1,这款先进的机器人如何通过其手臂末端的摄像头识别并确定键盘的键位,从而进行精确的打字操作。通过这一案例,我们将展示MercuryX1在自…

xcode使用

1. 界面 1.1. Build Settings,Build Phases和Build Rules三个设置项 Build Settings(编译设置): 每个选项由标题(Title)和定义(Definition)组成。这里主要定义了Xcode在编译项目时的一些具体配置 Build Phases(编译资源):用于指定编译过程中项目所链接的原文件,依赖对象,库…

安装 electron 报错解决

1. 报错 大概率由镜像问题导致 2. 解决 2.1 打开 npm 配置 npm config edit 2.2 添加配置 registryhttps://registry.npmmirror.comelectron_mirrorhttps://cdn.npmmirror.com/binaries/electron/electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron…

Tensor安装和测试

1: 打开git官方 https://github.com/NVIDIA/TensorRT 2: 下载得到:TensorRT-10.2.0.19.Linux.x86_64-gnu.cuda-11.8.tar.gz 3: 下载后配置环境变量,上面地址记得改成真实地址。 4: 如果想python使用tensorrt,那么 解压后目录&#xff0c…

深入理解单元测试与JUnit:从基础概念到实践操作

文章目录 前言一、单元测试是什么?单元测试的特点单元测试的好处 二、junit是什么?三、操作步骤1.junit安装2.maven新建项目3. 新建java文件4. 生成测试类5. 编写测试方法6. 测试结果 总结 前言 随着软件开发行业的不断发展,测试的重要性日益…

清华和字节联合推出的视频理解大模型video-SALMONN(ICML 2024)

video-SALMONN: Speech-Enhanced Audio-Visual Large Language Models 论文信息 paper:https://arxiv.org/abs/2406.15704 code:https://github.com/bytedance/SALMONN/ AI也会「刷抖音」!清华领衔发布短视频全模态理解新模型 | ICML 2024 …

Python数值计算(10)——PPoly对象

在scipy中,scipy.interpolate下还有一个PPoly的类,用于表示插值多项式,很多插值算法的结果,都以该类的实例返回,因此有必要了解该类的使用方法。要使用该类,首先要引入相应的模块: from scipy.…

基于docker的 nacos安装部署

一、拉取镜像 拉取nacos官方镜像,这里使用默认命令 docker pull nacos/nacos-server二、创建挂载目录 创建本地的映射文件application.properties mkdir -p /home/docker/nacos/conf /home/docker/nacos/logstouch /home/docker/nacos/conf/application.propert…

举个栗子!Tableau 技巧(280):创建点象限图( Dot Quadrant Chart )

之前分享过 🌰 :四象限图 和 葡萄干布丁图。今天,我们将两者的呈现方式结合起来,创建如下的点象限图( Dot Quadrant Chart ),可以帮助数据粉在有限的看板区域内展示更多的数据信息。 那么,如何在 Tableau 中…

一文弄清Java的四大引用及其两大传递

开场白 Hello大家好呀,我是CodeCodeBond✊最近在复习很多很多的基础知识,有了很多新的感悟~ 话不多说,直接发车✈ 四大引用 问题切入点 在学习 Thread线程利用ThreadLocalMap实现线程的本地内存(变量副本)的时候&…

简单的docker学习 第1章 docker 概述

Docker 学习笔记 本文是b站动力节点docker学习视频的笔记整理,主要用于自己学习复习使用,视频具体地址为 : 动力节点docker 第一章 docker 概述 1.1 课程引人入 1.1.1 开发/运维互掐 ​ 开发与测试和运维间的矛盾,主要是由于环境的不同而…

flutter 做代码混淆

第一种、手动混淆 修改代码中出现次数多的 类目 方法 。修改静态资源的名字,转静态资源为webp 第二种、使用flutter 自带的命令行工具进行混淆 混淆 Dart 代码 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 使用pragma(vm:entry-point) 装饰器修改方…