Meta AIの数式対応OCR『Nougat』を試してみた
Nougat とは
Nougat(Neural Optical Understanding for Academic Documents)は、Meta AI が開発した英語の論文解析に特化した OCR です。Nougat を使うと、論文 PDF を Mathpix Markdown と互換性がある形式(.mmd
)に変換できます。
Nougat の最大の特徴は、数式に対応していることです。実際、Nougat の Example Pages には衝撃的な例が示されています。分数や、
この記事では、実際に Nougat でいくつか PDF を読み取り、Demo 以外の PDF だとどうなるか確かめていきます。
Nougat の使い方
動作環境
Nougat を使うためには高性能の GPU が必要です。CPU だけでも一応動作はしますが、非常に遅く大抵クラッシュします。そのため、GPU を積んだ計算機を有していない人には、Google Colab のようなサービスを推奨します。
手っ取り早く試したい人には、Huggingface Community Demo がおすすめです。
インストール
Google Colab を使っている場合は、まず GPU を有効にしましょう。また、下記コマンドの行頭に !
をつけてください。
pip
でインストールできます。
$ pip install nougat-ocr
レポジトリからも可能です。
$ pip install git+https://github.com/facebookresearch/nougat
API や dataset の機能を使う場合には少し変わります。
$ pip install "nougat-ocr[api]"
または
$ pip install "nougat-ocr[dataset]"
使用方法
nougat
の後に PDF のパスを入力するだけです。
$ nougat path/to/file.pdf
オプションは以下の通りです。たとえば、--out .
をつけるとカレントディレクトリに結果が出力されます。
usage: nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--out OUT] [--recompute] [--markdown] 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.
--out OUT, -o OUT Output directory.
--recompute Recompute already computed PDF, discarding previous predictions.
--markdown Add postprocessing step for markdown compatibility.
出力形式は Mathpix Markdown と互換性がある .mmd
です。.md
) では対応していない記法が使用されているため、.md
では正確にプレビューができません。
.mmd
は Snip Notes や VS Code のプラグイン などを使用することでプレビューできます。Snip Notes の場合、拡張子を .md
にして読み込む必要があります。
検証
実際に Nougat で様々な PDF を変換してみました。左が Nougat による変換後の Markdown、右が元の PDF です。
最近の論文 PDF
"Attention Is All You Need" (Vaswani et al., 2017)
Google Colab (T4) での実行時間:1 分 57 秒
ページ数:15
全体を見ると、所々正しく認識されていませんが、十分な精度だと思います。特に、図のキャプションが本来の位置ではなく、 Figure 2 について言及している箇所に移動していることが驚きです。
"A Grand Unification of Quantum Algorithms" (Martyn et al., 2021)
Google Colab (T4) での実行時間:5 分 38 秒
ページ数:39
二段組の PDF でも上手く認識できました。
古い論文 PDF
"Simulating Physics with Computers" (Feynman, 1981)
Google Colab (T4) での実行時間:1 分 25 秒
ページ数:22
精度はやや落ちていますが、ある程度正確に認識できています。
ですが、p.10 はエラーになっていました。
"Riemann's hypothesis and tests for primality*" (Miller, 1976)
Google Colab (T4) での実行時間:1 分 47 秒
ページ数:18
最近の論文 PDF と比べると誤変換が目立ちますが、ページによっては上手くいっていました。
最近の書籍 PDF
全ページを変換すると非常に時間がかかるため、適当に 1-2 ページを切り出して変換しました。
"The Elements of Statistical Learning Second Edition" (Hastie et al., 2009)
単純なレイアウトのページだと、ほとんど完璧に変換できています。
"Pattern Recognition and Machine Learning" (Bishop, 2006)
同様にほとんど完璧に変換出来ています。
古い書籍 PDF
"Mechanics" (Landau and Lifshitz, 1976)
数式だけでなく英語のスペルすら怪しい箇所が多いです。なぜか大量にバーがついています。
"The Principles of Quantum Mechanics" (Dirac, 1930)
ページによっては一切認識しませんでした。さきほどの "Mechanics" もページの切り出し方によっては同様のことが起きました。
所感
あくまで個人の所感なので、参考程度にしてください。
- 既存の OCR と比べるとかなりよさそう
- 最近の論文 PDF についてはかなり精度高い
- 古い論文 PDF だとスキャンの質と組版次第では悪くない
- 最近の書籍 PDF についても、レイアウトが単純なら十分な精度
- 古い書籍 PDF については難あり
- 認識不可なページが多々ある
SNS 上では昔の論文や技術文書への適用が期待されていましたが、そういった用途だと今の Nougat は非実用的でしょう。ですが、今後の OCR に期待させてくれる手法だと思います。
参考
- Nougat
- facebookresearch/nougat - github
- ysharma/nougat - Huggingface Community Demo
- Nougat: Neural Optical Understanding for Academic Documents
Discussion