{"notes":[{"id":"text-spotting/nougat","category":"text-spotting","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Nougat","subtitle":"堂々巡り","author":"Z. Yuan","paperDate":"2023-08-25","publishedOn":"2026-04-14","world":"external/nougat","paperTitle":"Nougat: Neural Optical Understanding for Academic Documents","paperUrl":"https://arxiv.org/abs/2308.13418","bibliography":{"title":"Nougat: Neural Optical Understanding for Academic Documents","authors":["Lukas Blecher","Guillem Cucurull","Thomas Scialom","Robert Stojnic"],"url":"https://arxiv.org/abs/2308.13418","pdfUrl":"https://arxiv.org/pdf/2308.13418v1","codeUrl":"https://github.com/facebookresearch/nougat","preprint":{"id":"2308.13418","submittedOn":"2023-08-25","url":"https://arxiv.org/abs/2308.13418"},"publication":null,"citation":"@misc{textspottingnougat2023,\n  title = {{Nougat: Neural Optical Understanding for Academic Documents}},\n  author = {Lukas Blecher and Guillem Cucurull and Thomas Scialom and Robert Stojnic},\n  year = {2023},\n  eprint = {2308.13418},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2308.13418}\n}\n","citationPath":"/content/papers/citations/text-spotting/nougat.1d66a2aca861.bib"},"thumbnail":{"src":"/content/papers/assets/73888d5b579ab68d56551dc59d69ebcd0bf97704d288425f0341c9a9aa012138.png","width":1283,"height":288},"locale":"ja","path":"/content/papers/ja/text-spotting/nougat.2e74fb58ba9f.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"アーキテクチャdonutを踏襲","text":"アーキテクチャ：Donutを踏襲","depth":3},{"id":"データlatexソースを1ページずつに切り分ける","text":"データ：LaTeXソースを1ページずつに切り分ける","depth":3},{"id":"デジタルpdfをスキャン画像のように見せる","text":"デジタルPDFをスキャン画像のように見せる","depth":3},{"id":"考察","text":"考察","depth":2},{"id":"arxivテストセットでの成績","text":"arXivテストセットでの成績","depth":3},{"id":"繰り返しに陥る","text":"繰り返しに陥る","depth":3},{"id":"繰り返しを検出する","text":"繰り返しを検出する","depth":3},{"id":"コミュニティでの実際の経験","text":"コミュニティでの実際の経験","depth":3},{"id":"この論文を読むときの注意点","text":"この論文を読むときの注意点","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[]}],"text":"論文のPDFを一般的なOCRエンジンにかけると、テキストはおおむね読み取れます。ところが数式は、しばしば記号の山に崩れてしまいます。\n\n原因は想像に難くありません。$x_i^2$では、下付きの$i$と上付きの$2$が$x$の右側に重なっています。分数の分子と分母は上下に並びます。1行ずつ走査するOCRはこれらを普通のテキストとして扱うので、位置関係が失われます。PDF自体もあまり助けになりません。PDFが記録しているのは「どの文字をページのどこに描くか」で、数式の元のLaTeX構造はコンパイルの時点で捨てられています。\n\nMeta AIが2023年8月に発表したNougatは、これを一度に解決しようとします。論文1ページの画像を入力し、LaTeXの数式と表を含むマークアップテキストを直接出力するのです。本稿はarXiv v1に基づきます。コードはMITライセンスで公開され、モデルの重みはCC BY-NCです。\n\n## 問題の定義\n\n当時の既存ツールには、それぞれ欠けているところがありました。\n\n- **Tesseract**のようなOCRエンジンは、個々の文字や単語の検出と分類は得意です。ただ、行単位で処理するため、上付き・下付きのような位置関係を理解できません。\n- **GROBID**は、デジタルで作られた論文PDFをXMLに解析できます。書誌情報の処理は優秀ですが、数式はPDF内のUnicode文字しか残りません。\n- **pdf2htmlEX**は、PDFを見た目の同じHTMLに変換できます。しかし、やはり数式の意味は取り戻せません。\n\n著者らが目指したのは、ページ画像だけを見るモデルです。画像だけを見るなら、スキャンされた古い論文や書籍も扱えます。マークアップ言語を直接出力するなら、数式や表の構造を保てます。\n\n## 問題の解決\n\n### アーキテクチャ：Donutを踏襲\n\n[![Nougatのアーキテクチャ：文書ページの画像をSwin Transformerで潜在表現zに符号化し、Transformerデコーダーが自己回帰的にトークンを出力する。右側は出力テキストの例](/content/papers/assets/73888d5b579ab68d56551dc59d69ebcd0bf97704d288425f0341c9a9aa012138.png)](/content/papers/assets/73888d5b579ab68d56551dc59d69ebcd0bf97704d288425f0341c9a9aa012138.png)\n\n*原論文Figure 1。[**v1 PDFの2ページ**](https://arxiv.org/pdf/2308.13418v1#page=2)から抜粋、CC BY-SA 4.0。*\n\nアーキテクチャは単純で、2021年のDonutを踏襲しています。\n\n1. **エンコーダー**：ページの余白を切り落とし、縮小とパディングで896×672の固定サイズ（US LetterとA4の中間の比率）にして、Swin Transformerでパッチベクトルの列$z$に変換します。\n2. **デコーダー**：10層のmBARTデコーダーがcross-attentionで$z$を読み、自己回帰的にトークンを出力します。最大4,096トークンです。トークナイザーは、科学テキスト専用のGalacticaのものを借りています。\n\nモデル全体は約3.5億パラメータです。著者らは、デコーダーが4層だけの2.5億パラメータの小型版も試しています。推論は貪欲デコーディングです。\n\nここにはテキスト検出も、OCRの前処理も一切ありません。文字をどう読み取るかは、すべてネットワーク自身の学習に任されています。\n\n### データ：LaTeXソースを1ページずつに切り分ける\n\n最大の作業はデータでした。「ページ画像 → マークアップテキスト」を学習するには大量の対データが必要ですが、当時は既成のものがありませんでした。\n\n著者らはarXivから1,748,201本の論文のLaTeXソースとコンパイル済みPDFを集め、PubMed Centralのオープンな論文も一部加えました。事前学習では、さらにIndustry Documents LibraryのOCRテキストも加えています。\n\n処理の流れは次のとおりです。\n\n1. LaTeXMLでLaTeXをHTMLに変換する。その過程で、独自マクロの展開、空白の統一、表の標準化、引用の正しい番号への置き換えも行う。\n2. HTMLを軽量なマークアップ言語に変換し、見出し、太字・斜体、アルゴリズム、インラインと別行立てのLaTeX数式、LaTeXの表を保持する。\n3. ソース全体を1ページずつに切り分け、PDFの各ページの画像に対応させる。\n\nいちばん厄介なのは3つ目です。LaTeXの改ページはコンパイラが決めるもので、ソースには改ページの印がありません。図表のPDF上の位置も、ソース上の位置としばしば異なります。著者らの方法は二段構えです。\n\n- **粗い分割**：まずMuPDFでPDFの各ページからテキストを抽出し、TF-IDFと線形SVMの分類器を学習して、ソースの各段落が何ページ目に属するかを予測します。理想的には階段状のページ番号列が得られますが、実際にはノイズが多いため、決定木で使うようなGini不純度で最適な改ページ位置を探します。\n- **細かい分割**：予測した改ページ位置の付近で、ソースを、PDFの前ページの末尾数文、次ページの冒頭数文とあいまい照合し、正確な位置を見つけます。二つの改ページ位置の平均スコアが0.9に達したページだけを、データセットに入れます。\n\n最終的に、約47%のページが選別を通過しました。\n\n### デジタルPDFをスキャン画像のように見せる\n\n学習データはすべてデジタルで作られた論文ですが、モデルはスキャン画像も扱わなければなりません。著者らはAlbumentationsで、一連の画像摂動を加えました。収縮（erosion）、膨張（dilation）、ガウスノイズ、ぼかし、二値化、圧縮、グリッド歪み、弾性変形です。\n\nさらに**テキスト側**にも摂動を加えています。その役割は後で取り上げます。\n\n## 考察\n\n### arXivテストセットでの成績\n\n| 手法 | カテゴリ | 編集距離 ↓ | BLEU ↑ | F1 ↑ |\n| --- | --- | ---: | ---: | ---: |\n| PDF埋め込みテキスト | すべて | 0.255 | 65.8 | 79.2 |\n| GROBID | すべて | 0.312 | 55.6 | 73.0 |\n| Nougat base | すべて | 0.071 | 89.1 | 93.1 |\n| Nougat base | 一般テキスト | 0.058 | 91.2 | 95.7 |\n| Nougat base | 数式 | 0.128 | 56.9 | 76.5 |\n| Nougat base | 表 | 0.211 | 69.7 | 78.0 |\n\n*表：原論文Table 1から抜粋。*\n\n全体として、Nougatの編集距離はGROBIDのおよそ4分の1です。3種類の内容では数式が最も難しく、編集距離は一般テキストの2倍以上です。\n\n著者らの説明では、数式の点数はもともと低く出やすいものです。同じ式でも、LaTeXには多くの書き方があります。たとえば上付きと下付きの順序、`\\frac`と`\\over`、`\\mathbf`と`\\boldsymbol`。レンダリング結果は同じでも、文字列は異なります。\n\n小型モデル（2.5億パラメータ）と大型モデルの成績は、ほぼ同じです。\n\n### 繰り返しに陥る\n\nこの論文でいちばん読む価値があるのは、著者らが失敗の様子を率直に記録していることです。\n\nモデルはときどき繰り返しに陥ります。最も単純なのは、同じ文や段落を出力し続けるケースです。二つの文の間を行き来しながら毎回数語ずつ変え、厳密な重複検出をすり抜けることもあります。参考文献の部分では、モデルが自分で番号を数えながら、ひたすら書き続けることさえあります。いったんこの状態に入ると、モデルは戻ってこられません。\n\nテストセットでは、約1.5%のページでこれが起きました。学習した領域以外の文書では、さらに頻繁です。著者らは、繰り返しがたいていモデルが一つ間違えた後に起きることに気づきました。\n\nここに解決の方向がありました。**学習中に、自分の誤りをモデルに見せておく**ことです。学習時に、正しいトークンの一部をランダムに任意のトークンへ置き換えます。置き換えは、引いた乱数が10%を超えるまで続けます。これでモデルは、それまでのテキストに誤りがあっても、誤字に引きずられずに読み進めることを覚えます。著者らによれば、全体の性能は下がらず、繰り返しは目に見えて減りました。領域外の文書では、変換に失敗するページが32%減っています。\n\n### 繰り返しを検出する\n\n減らすだけでは足りません。デコーダーは最大4,096トークンまで生成するので、繰り返しに陥ると上限まで無駄に走り続けます。そこで著者らは、検出方法も設計しました。\n\n[![繰り返し検出の例2組、各3枚の図：各トークンの最大logit、スライディングウィンドウの分散、その位置から末尾までの分散。上段は約1,000トークン目以降に繰り返しに陥り、分散が急落してしきい値を下回る。下段は正常なサンプルで、分散はずっと高いまま](/content/papers/assets/1a40149c71166aacbd2c464be00126a4ae00240e18bac1afb5a04502192d89a2.png)](/content/papers/assets/1a40149c71166aacbd2c464be00126a4ae00240e18bac1afb5a04502192d89a2.png)\n\n*原論文Figure 6。[**v1 PDFの8ページ**](https://arxiv.org/pdf/2308.13418v1#page=8)から抜粋、CC BY-SA 4.0。上段が繰り返しの起きたサンプル、下段が正常なサンプルです。破線は、それぞれ繰り返しの開始位置と判定のしきい値です。*\n\nまず上段の左端を見てください。横軸は生成した何番目のトークンか、縦軸は各ステップの最大logitです。約1,000トークン目までは点が大きく散らばっていますが、その後はすべて17〜18の間の帯に詰まっています。下段の正常なサンプルは、ずっと散らばったままです。\n\n直感的には、普通のテキストでは、各ステップの確信度が高くなったり低くなったりします。繰り返しに陥ると、モデルは次のトークンにどんどん確信を深め、最大logitが平らになります。著者らはこれを2段階の計算にしました。\n\n1. 最大logitの系列$\\ell$にサイズ$B=15$のスライディングウィンドウをかけ、各ウィンドウ内の分散$\\mathrm{VarWin}_B$を計算する（中央の図）。\n2. 次に、各位置から系列の末尾まで、それらの分散の分散$\\mathrm{VarEnd}_B$を計算する（右の図）。\n\n$\\mathrm{VarEnd}_B$が6.75を下回り、そのまま末尾まで続けば、繰り返しと判定します。\n\n3つの数字で感覚をつかんでみましょう（説明用の数字で、論文のデータではありません）。普通の区間で最大logitが20、25、18なら、分散は約8.67です。繰り返しのときに17.0、17.2、16.9なら、分散はわずか0.016です。数百倍の差があるので、簡単に見分けられます。\n\n推論時にはまだ「末尾」が見えないので、著者らは直近の200トークンだけを使い、しきい値を半分にして、生成しながら判定します。生成が終わったら、系列全体でもう一度計算します。\n\n### コミュニティでの実際の経験\n\nNougatのGitHubでは、11番のissueが2023年8月30日の報告です。ユーザーが1935年のPhysical Reviewに載ったEPR論文のスキャンで試したところ、1ページ目は正常でしたが、2〜4ページ目ではいずれも「Found repetitions」の警告が出て、出力は`[MISSING_PAGE_EMPTY:1]`だけになりました。[facebookresearch/nougat#11](https://github.com/facebookresearch/nougat/issues/11)\n\nこれはまさに、繰り返し検出が働いた結果です。失敗と判定されたページは、繰り返しのテキストを1ページ分出力する代わりに、欠落ページとして印が付けられます。ユーザーは欠落ページの印を見れば、少なくともそのページを別に処理すべきだとわかります。\n\n公式READMEも、対応言語の範囲をはっきり書いています。英語の論文で最も効果が高く、ほかのラテン文字の言語ならうまくいくかもしれませんが、中国語、ロシア語、日本語などは扱えません。\n\n### この論文を読むときの注意点\n\n著者らは限界の節で、いくつかの点を挙げています。\n\n1. **繰り返しは依然として最大の問題**で、論文はこれを今後の課題として残しています。\n2. **ほぼ英語のみ**。ほかのラテン文字言語の特殊文字は、最も近い英字に置き換えられます。非ラテン文字では、すぐに繰り返しに陥ります。\n3. **一度に1ページしか見ない**。ページをまたぐ一貫性は保証されません。最も目立つのは参考文献で、番号が飛んだり、原文にない番号が増えたりします。\n4. **とても遅い**。A10G 1枚で一度に6ページを処理すると、1バッチ平均19.5秒かかります。GROBIDは1秒に10.6本のPDFを処理できます。\n\n## 結論\n\nNougatは、学術論文のOCRを「1ページ見て、1ページ分のマークアップテキストを書く」生成タスクに書き換えました。\n\n1. **アーキテクチャは単純**：Swin TransformerエンコーダーとmBARTデコーダーだけで、OCRの前処理はありません。\n2. **主役はデータエンジニアリング**：175万本のarXiv論文のLaTeXソースから、分類器とあいまい照合でページ単位の学習データを切り出しました。\n3. **数式が初めてエンドツーエンドでLaTeXとして読めるようになった**：全体の編集距離は、GROBIDよりずっと低くなっています。\n\n同時にNougatは、生成型OCRの典型的な弱点を早い段階でさらけ出しました。繰り返しに陥る、珍しい文字をありふれた英字に置き換える、参考文献に存在しない番号を補う。著者らは成績を報告するだけでなく、学習時に誤りを注入し、推論時に繰り返しを検出する対策も講じています。\n\n1ページの文字を言語モデルに「書かせる」と、モデルはできるだけ滑らかに書こうとします。書けなくなったときは、書き続けさせるより、止まらせたほうがいいのです。\n","imageSizes":{"/content/papers/assets/73888d5b579ab68d56551dc59d69ebcd0bf97704d288425f0341c9a9aa012138.png":{"width":1283,"height":288},"/content/papers/assets/1a40149c71166aacbd2c464be00126a4ae00240e18bac1afb5a04502192d89a2.png":{"width":1233,"height":800}}}
