文章目录
一、关于 Nougat
Nougat (N eural O ptical U nderstanding for A cademic Documents)
Nougat是理解LaTeX数学和表格的 学术文档PDF解析器。
二、安装
来自pip:
shell
pip install nougat-ocr
来自存储库:
shell
pip install git+https://github.com/facebookresearch/nougat
注意,在Windows上:如果您想使用GPU,请确保首先安装正确的PyTorch版本。按照这里的说明
如果要从API调用模型或生成数据集,则存在额外的依赖项。通过
shell
pip install "nougat-ocr[api]"`或`pip install "nougat-ocr[dataset]"
三、获取PDF的预测
1、CLI
获取PDF运行的预测
shell
$ nougat path/to/file.pdf -o output_directory
目录或文件的路径,其中每一行都是PDF的路径,也可以作为位置参数传递
shell
$ nougat path/to/directory -o output_directory
shell
usage: nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--model MODEL] [--out OUT]
[--recompute] [--markdown] [--no-skipping] pdf [pdf ...]
positional arguments:
pdf PDF(s) to process.
options:
-h, --help show this help message and exit
--batchsize BATCHSIZE, -b BATCHSIZE
Batch size to use.
--checkpoint CHECKPOINT, -c CHECKPOINT
Path to checkpoint directory.
--model MODEL_TAG, -m MODEL_TAG
Model tag to use.
--out OUT, -o OUT Output directory.
--recompute Recompute already computed PDF, discarding previous predictions.
--full-precision Use float32 instead of bfloat16. Can speed up CPU conversion for some setups.
--no-markdown Do not add postprocessing step for markdown compatibility.
--markdown Add postprocessing step for markdown compatibility (default).
--no-skipping Don't apply failure detection heuristic.
--pages PAGES, -p PAGES
Provide page numbers like '1-4,7' for pages 1 through 4 and page 7. Only works for single PDFs.
默认模型标记为0.1.0-small
。如果要使用基本模型,请使用0.1.0-base
。
shell
$ nougat path/to/file.pdf -o output_directory -m 0.1.0-base
在输出目录中,每个PDF都将保存为.mmd
文件,轻量级置标语言,主要与MathpixMarkdown兼容(我们使用LaTeX表)。
注意:在某些设备上,故障检测启发式无法正常工作。如果您遇到很多
[MISSING_PAGE]
响应,请尝试使用--no-skipping
标志运行。相关:#11,#67
2、API
使用app.py
启动API的额外依赖项。调用
shell
$ nougat_api
通过向http://127.0.0.1:8503/predict/发出POST请求来获得PDF文件的预测。它还接受参数`start`和`stop`以限制选择页码的计算(包括边界)。
响应是带有文档降价文本的字符串。
shell
curl -X 'POST' \
'http://127.0.0.1:8503/predict/' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@<PDFFILE.pdf>;type=application/pdf'
要将转换限制为第1页到第5页,请使用请求URL中的start/stop参数:http://127.0.0.1:8503/predict/?start=1\&stop=5
四、数据集
生成数据集
要生成您需要的数据集
- 包含PDF的目录
- 包含具有相同文件夹结构的
.html
文件(LaTeXML处理的.tex
文件)的目录 - 二进制文件pdffigures2和相应的环境变量
export PDFFIGURES_PATH="/path/to/binary.jar"
然后运行
shell
python -m nougat.dataset.split_htmls_to_pages --html path/html/root --pdfs path/pdf/root --out path/paired/output --figure path/pdffigures/outputs
其他参数包括
参数 | 描述 |
---|---|
--recompute |
所有拆分 |
--markdown MARKDOWN |
Markdown输出目录 |
--workers WORKERS |
使用多少进程 |
--dpi DPI |
页面将保存在什么分辨率 |
--timeout TIMEOUT |
最大每张纸的时间(以秒为单位) |
--tesseract |
Tesseract每页的OCR预测 |
最后创建一个jsonl
文件,其中包含所有图像路径、markdown文本和元信息。
shell
python -m nougat.dataset.create_index --dir path/paired/output --out index.jsonl
对于每个jsonl
文件,您还需要生成一个查找映射以加快数据加载速度:
shell
python -m nougat.dataset.gen_seek file.jsonl
生成的目录结构如下所示:
shell
root/
├── images
├── train.jsonl
├── train.seek.map
├── test.jsonl
├── test.seek.map
├── validation.jsonl
└── validation.seek.map
请注意,path/paired/output
中的.mmd
和.json
文件(此处为images
)不再需要。 这对于通过将文件量减半推送到S3存储桶很有用。
五、训练
要训练或微调Nougat模型,请运行
shell
python train.py --config config/train_nougat.yaml
六、评估
运行
shell
python test.py --checkpoint path/to/checkpoint --dataset path/to/test.jsonl --save_path path/to/results.json
要获取不同文本模式的结果,请运行
shell
python -m nougat.metrics path/to/results.json
七、其它
1、常见问题解答
-
为什么我只得到
[MISSING_PAGE]
?Nougat 接受了在arxiv和PMC上发现的科学论文的培训。你正在处理的文件与此相似吗? 文件用什么语言?Nougat 最适合英文文件,其他拉丁语言可能也可以。中文、俄文、日文等将不起作用 。 如果满足这些要求,可能是因为在CPU或较旧的GPU上计算时故障检测中的误报(#11)。现在尝试传递
--no-skipping
标志。 -
我可以从哪里下载模型检查点。
它们在这里上传到GitHub的发布部分,您也可以在程序第一次执行期间下载它们通过传递选择首选的首选模型
--model 0.1.0-{base,small}
2、引文
shell
@misc{blecher2023nougat,
title={Nougat: Neural Optical Understanding for Academic Documents},
author={Lukas Blecher and Guillem Cucurull and Thomas Scialom and Robert Stojnic},
year={2023},
eprint={2308.13418},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
3、致谢
此存储库建立在Donut存储库之上。
4、许可证
Nougat 代码库在麻省理工学院获得许可。
Nougat 模型重量在CC-BY-NC下获得许可。
2024-07-21(日)