← Go back
Paper ReviewMar 23, 20268 min read

Nougat

Document UnderstandingMath Recognition
Nougat: Neural Optical Understanding for Academic DocumentsLukas Blecher, Guillem Cucurull, Thomas Scialom, Robert Stojnic
ICLR 2024·arXiv ↗

Scientific knowledge is predominantly stored in books and scientific journals, often in the form of PDFs. However, the PDF format leads to a loss of semantic information, particularly for mathematical expressions. We propose Nougat (Neural Optical Understanding for Academic Documents), a Visual Transformer model that performs an Optical Character Recognition (OCR) task for processing scientific documents into a markup language, and demonstrate the effectiveness of our model on a new dataset of scientific documents. The proposed approach offers a promising solution to enhance the accessibility of scientific knowledge in the digital age, by bridging the gap between human-readable documents and machine-readable text. We release the models and code to accelerate future work on scientific text recognition.

TL;DR

Nougat은 문서 페이지 이미지 하나를 입력으로 받아 수식과 표까지 포함한 markup(Markdown 계열) 토큰 시퀀스를 예측하는 encoder-decoder Transformer다. Donut 아키텍처(Swin encoder + mBART decoder)를 그대로 가져와 학술 PDF를 대상으로 학습했으며, OCR engine이나 PDF embedded text 같은 외부 입력 없이 rasterize한 페이지 픽셀만으로 동작한다. 이 논문의 실질적 기여는 데이터 파이프라인 쪽인데, arXiv의 LaTeX source와 컴파일된 PDF를 페이지 단위로 자동 정렬해 paired dataset을 만드는 과정이 핵심이다. arXiv test set에서 기존 GROBID 대비 큰 폭으로 앞서며, 특히 GROBID가 거의 못 잡는 수식(math) modality에서 차이가 크다고 한다. 다만 greedy decoding에서의 repetition collapse, 페이지 단위 독립 처리, 영어/Latin script 편중이 한계로 남는다.

Background

과학 지식의 상당 부분은 PDF로 저장돼 있는데, PDF는 렌더링된 시각 산출물이라 의미 구조가 보존되지 않는다. 특히 수식이 문제로, fraction, exponent, matrix처럼 문자의 상대적 위치가 의미를 결정하는 표기에서 정보가 소실된다.

Tesseract 같은 전통적 OCR engine은 개별 문자와 단어를 검출·분류하는 데는 강하지만 line-by-line 접근이라 문자 간 관계를 이해하지 못한다. superscript와 subscript를 주변 텍스트와 동일하게 취급해, 수식의 구조 자체를 복원할 수단이 없다. S2ORC처럼 GROBID로 수백만 편 논문의 본문을 추출한 대규모 corpus가 있지만 수식의 의미 있는 표현은 빠져 있다.

이 논문 직전의 흐름은 OCR-free VDU인데, LayoutLM 계열은 외부 OCR이 뽑은 text와 layout을 함께 모델링하는 방향이었던 반면, Donut과 Dessurt 같은 연구는 외부 OCR engine 없이도 competitive한 VDU가 가능함을 보였다. Nougat은 이 OCR-free 계열을 receipt나 form 같은 정형 문서가 아니라 수식이 빽빽한 학술 문서 전체의 full-page transcription으로 끌고 간 것이다.

Method

Donut과 동일한 아키텍처.Donut과 동일한 아키텍처.

아키텍처 자체는 Donut을 따른다. 시각 encoder로 Swin Transformer를 쓰고, decoder로 mBART 구현을 가져온다. 입력 이미지 xR3×H0×W0\mathbf{x} \in \mathbb{R}^{3 \times H_0 \times W_0}는 margin을 crop하고 고정 크기 (H,W)(H, W)에 맞게 resize·pad된 뒤, Swin encoder가 patch embedding 시퀀스 zRd×N\mathbf{z} \in \mathbb{R}^{d \times N}로 변환한다. decoder는 cross-attention으로 z\mathbf{z}를 참조하면서 token을 auto-regressive하게 생성하고, 마지막에 vocabulary 크기 vv로 projection해 logit Rv\boldsymbol{\ell} \in \mathbb{R}^v를 낸다.

입력 해상도부터 학술 문서 도메인에 맞춰져 있다. 96 DPI에 (H,W)=(896,672)(H, W) = (896, 672)로 두는데, 이 종횡비는 US letter와 A4 사이(2217<43<2\frac{22}{17} < \frac{4}{3} < \sqrt{2})에 들어가도록 잡은 것이다. decoder의 최대 sequence length는 S=4096S = 4096으로 상당히 큰데, 학술 논문 본문이 조밀하고 특히 표 syntax가 token을 많이 차지하기 때문이라고 한다. 전체 모델은 350M parameter(base)이고, 4 decoder layer에 S=3584S = 3584인 250M small 버전도 함께 둔다. tokenizer는 Galactica의 것을 그대로 쓰는데, 같은 과학 텍스트 도메인에 특화된 tokenizer라는 이유다.

데이터 파이프라인

Data processing.Data processing.

이 논문에서 실제로 어려운 부분은 paired dataset 생성인데, PDF 페이지 이미지와 그에 대응하는 source markup의 쌍이 기존에 없었기 때문에 직접 만들어야 했다.

arXiv에서 1,748,201편의 source code와 컴파일된 PDF를 모은 뒤, source를 바로 쓰지 않고 LaTeXML로 HTML5를 거쳐 경량 markup으로 변환한다. 이 우회는 의도된 것으로, user-defined macro 치환, whitespace 표준화, optional bracket 추가, 표 정규화, reference/citation 번호 치환 같은 정규화로 LaTeX source의 표기 ambiguity를 줄이려는 것이다. 같은 수식을 여러 방식으로 쓸 수 있는 LaTeX 특성상, 정규화 없이 raw source를 target으로 두면 모델이 표면 표기 variance까지 외우게 되므로 합리적인 결정이다.

난점은 페이지 분할인데, LaTeX source를 매번 재컴파일하지 않기 때문에 source 어느 지점이 PDF의 어느 페이지에 대응하는지를 heuristic하게 맞춰야 한다. 정렬은 coarse-to-fine으로 진행되며, 먼저 PDF의 각 라인 텍스트에 대해 page number를 label로 하는 TF-IDF + linear SVM을 학습시키고, source를 paragraph로 쪼개 각 paragraph의 page number를 예측한다. 이상적이면 예측이 계단 함수가 되지만 실제 신호는 noisy하므로, decision tree와 유사하게 Gini impurity 기반 측도를 최소화해 경계를 찾는다.

G[a,b](i)=(ba)(1p[a,b]2(i)p[a,b]2(i+1))G_{[a, b]}(i) = (b - a) \cdot \left( 1 - p_{[a, b]}^2(i) - p_{[a, b]}^2(i+1) \right)

여기서 p[a,b](i)p_{[a, b]}(i)는 구간 [a,b][a, b] 안에서 예측 page number가 ii인 element를 뽑을 확률이고, iii+1i+1 두 페이지로 갈리는 경계 부근의 순도를 본다. 최적 분할 위치는 두 구간의 측도 합을 최소화하는 지점으로 정한다.

t^i=arg mint(G[a,t](i)+G[t,b](i))\hat{t}_i = \argmin_t \left( G_{[a, t]}(i) + G_{[t, b]}(i) \right)

이렇게 coarse 경계를 잡은 뒤, fuzzy matching으로 paragraph 내부의 정확한 위치를 찾는다. 예측 분할 지점 부근의 source text를 직전 페이지 마지막 문장·다음 페이지 첫 문장의 embedded PDF text와 비교해, 양쪽 분할점이 일치하면 score 1, 어긋나면 normalized Levenshtein distance를 뺀 값을 준다. 두 page break 모두 평균 0.9 이상이어야 데이터셋에 들어가는데, 이 기준을 통과하는 페이지가 전체의 약 47%다. 절반 이상을 버리고도 800만 페이지 규모를 확보했다는 건 source가 그만큼 풍부했다는 뜻이지만, 동시에 acceptance 기준이 만든 selection bias가 데이터에 들어 있다는 의미이기도 하다.

레이아웃 다양성을 위해 PMC와 IDL도 섞는데, PMC는 XML semantic 정보가 있지만 수식·표가 이미지로 저장된 경우가 많아 pretraining 단계로만 제한하고, IDL은 formatting 없는 고품질 OCR text라 스캔 문서의 기본 OCR 감각을 주입하는 pretraining 용도로만 쓴다. corpus의 91.5% 이상은 arXiv가 차지한다.

Repetition 억제

일반적인 erosion, dilation, gaussian noise, blur, grid distortion 같은 스캔 모사 변환에 더해, 학습 시 ground truth token을 무작위로 다른 token으로 치환하는 perturbation을 넣는다. 이 target 측 augmentation이 도메인 특수적인데, 입력이 아니라 target 측 noise로 잘못 예측된 token 이후 상황을 모델이 학습 중에 겪게 해 repetition collapse를 줄이려는 것이다. out-of-domain 문서에서 실패한 페이지 변환이 32% 감소했다고 한다.

repetition은 inference 시에도 직접 검출하는데, greedy decoding에서 모델이 같은 문장을 반복하며 스스로 빠져나오지 못하는 현상이 test set의 1.5% 페이지에서 관찰되고 out-of-domain에서 빈도가 올라간다. 검출은 각 token의 최대 logit i=maxi\ell_i = \max \boldsymbol{\ell}_i 신호에 기반하며, 먼저 크기 B=15B = 15인 sliding window의 logit 분산을 구하고,

VarWinB[](x)=1Bi=xx+B(i1Bj=xx+Bj)2\operatorname{VarWin}_B[\boldsymbol{\ell}](x) = \frac{1}{B} \sum_{i=x}^{x+B} \left( \ell_i - \frac{1}{B} \sum_{j=x}^{x+B} \ell_j \right)^2

이 새 신호에 대해 위치 xx부터 시퀀스 끝까지의 분산을 다시 계산한다.

VarEndB[](x)=1Sxi=xS(VarWinB[](i)1Sxj=xSVarWinB[](i))2\operatorname{VarEnd}_B[\boldsymbol{\ell}](x) = \frac{1}{S-x} \sum_{i=x}^{S} \left( \operatorname{VarWin}_B[\boldsymbol{\ell}](i) - \frac{1}{S-x} \sum_{j=x}^{S} \operatorname{VarWin}_B[\boldsymbol{\ell}](i) \right)^2

직관은 collapse 이후 logit이 단조롭고 분산이 작은 패턴으로 떨어진다는 것이다. 이 VarEnd\operatorname{VarEnd} 신호가 임계값(6.75) 아래로 내려가 끝까지 유지되면 repetition으로 분류한다. 다만 inference 중에는 시퀀스 끝까지의 통계를 미리 알 수 없으므로, 마지막 200 token subset과 절반 임계값으로 조기 판정하고 생성 종료 후 전체 시퀀스로 다시 검사한다.

Logit 기반 repetition 검출 예시. 상단: repetition이 발생한 샘플, 하단: 정상 샘플. 좌측: 토큰별 최대 logit $\ell_i$, 중앙: 슬라이딩 윈도우 분산 $\operatorname{VarWin}_B\boldsymbol{\ell}$, 우측: 위치 $x$
부터 끝까지의 분산의 분산 $\operatorname{VarEnd}_B\boldsymbol{\ell}$. Collapse 이후 logit이 단조로워지며 $\operatorname{VarEnd}$ 신호가 임계값 아래로 떨어지는 양상을 확인할 수 있음.Logit 기반 repetition 검출 예시. 상단: repetition이 발생한 샘플, 하단: 정상 샘플. 좌측: 토큰별 최대 logit i\ell_i, 중앙: 슬라이딩 윈도우 분산 VarWinB\operatorname{VarWin}_B\boldsymbol{\ell}, 우측: 위치 xx 부터 끝까지의 분산의 분산 VarEndB\operatorname{VarEnd}_B\boldsymbol{\ell}. Collapse 이후 logit이 단조로워지며 VarEnd\operatorname{VarEnd} 신호가 임계값 아래로 떨어지는 양상을 확인할 수 있음.

Results

평가는 plain text, math, table 세 modality를 나눠서 본다. 분리가 필요한 이유는 LaTeX에서 같은 수식을 여러 방식으로 쓸 수 있어, 렌더링 결과가 동일해도 prediction과 ground truth의 문자열이 다를 수 있기 때문이다. frac/over, bm/mathbf/boldsymbol 같은 치환 가능한 명령, bracket 층위, whitespace 명령 등이 그대로 점수를 깎는다. inline math가 어디서 끝나고 text가 시작하는지 모호한 경우(H0\mathrm{H}_{0}1, 같은 표기)도 math와 plain text 점수를 동시에 떨어뜨린다. 그래서 math 점수가 plain text보다 낮게 나오는 것은 구조적이다.

arXiv test set 주요 수치는 다음과 같다.

MethodModalityEdit dist ↓BLEU ↑METEOR ↑F1 ↑
PDF (embedded)All0.25565.882.179.2
GROBIDAll0.31255.671.973.0
GROBID + LaTeX-OCRMath0.7270.35.09.7
Nougat small (250M)All0.07388.992.892.9
Nougat base (350M)All0.07189.193.093.1
Nougat base (350M)Math0.12856.975.476.5
Nougat base (350M)Plain text0.05891.294.695.7

math modality에서 차이가 가장 큰데, GROBID에 LaTeX-OCR을 붙여도 BLEU 0.3, F1 9.7로 사실상 수식을 복원하지 못하고, 이는 GROBID가 수식을 PDF embedded Unicode로만 저장하고 작은 inline 수식을 text로 오분류하며, LaTeX-OCR에 넘기는 bounding box 품질에도 좌우되기 때문이다. 같은 항목에서 Nougat base가 F1 76.5를 내는 것은 full-page를 end-to-end로 읽는 접근이 수식 modality 자체를 다룰 수 있게 됐음을 보여준다고 볼 수 있다.

small과 base의 차이도 거의 없는데, 250M과 350M이 All modality에서 F1 92.9 대 93.1로 사실상 동률이고, 이는 이 task의 병목이 decoder 용량보다 데이터 정렬 품질과 입력 해상도 쪽에 있을 가능성을 시사한다. 다만 논문은 이를 직접 ablation으로 분리하지는 않았다.

Limitations

논문이 자인하는 한계부터 보면, repetition collapse는 anti-repetition augmentation과 logit 기반 검출로 완화했을 뿐 근본 해결은 아니며, out-of-domain과 비Latin script에서 더 자주 나타난다고 한다. 저자도 이 collapse를 가장 해결해야 할 과제로 future work에 남긴다.

생성 속도는 실사용에서 병목이 되는데, A10G 24GB에서 6페이지를 병렬로 처리해 페이지당 평균 약 1400 token에 base 모델 batch당 평균 19.5초가 걸린다. GROBID의 10.6 PDF/s와 비교하면 매우 느린 편인데, auto-regressive full-page decoding의 비용이 그대로 드러나는 부분이다. digital-born PDF에 국한되지 않고 수식까지 파싱한다는 이점과 맞바꾼 trade-off다.

언어 편중도 구조적인데, 데이터셋이 거의 영어이고, 다른 Latin 기반 언어는 special character가 가장 가까운 Latin 문자로 치환되며, 비Latin script는 즉시 repetition으로 빠진다고 한다. 학술 문서 전반이라기보다 영어 STEM 논문 도메인에 맞춰진 모델로 읽는 편이 정확하다.

데이터 정렬의 47% acceptance가 만드는 selection bias가 평가에 그대로 반영됐을 수 있다. test set 자체가 0.9 이상 정렬 기준을 통과한 페이지들로 구성되므로, 정렬이 어려운 복잡한 레이아웃 페이지는 학습뿐 아니라 평가에서도 과소대표된다. 보고된 수치가 실제 임의 PDF 분포에서의 성능보다 낙관적일 여지가 있다는 뜻이다. 또한 table modality는 Nougat base에서도 edit distance 0.211, BLEU 69.7로 plain text와 math 양쪽보다 약한데, token-intensive한 표 syntax에 대해서는 별도 분석이나 개선책이 거의 다뤄지지 않았다.

페이지 단위 독립 처리는 확장성을 위한 선택이지만 문서 수준 일관성에는 손해다. 모델이 한 번에 한 페이지만 보고 다른 페이지를 모르기 때문에, 참고문헌 스타일이나 섹션 번호가 페이지마다 어긋나거나 hallucinate되며, 병렬화에는 유리하나 병합된 문서 품질에는 손해다.

Thoughts

Nougat의 위치는 Donut이 연 OCR-free VDU 흐름을 정형 문서에서 full-page document transcription으로 일반화한 부분이다. Donut이 receipt·form에서 JSON IE를 풀었다면, Nougat은 같은 encoder-decoder 골격으로 수식이 포함된 임의 학술 페이지를 markup으로 옮기는 더 어려운 generation task를 푼 셈이고, 이후 PDF-to-markdown 계열 도구와 VLM 기반 document parsing의 baseline으로 널리 참조됐다.

데이터 파이프라인이 이 논문에서 재사용 가치가 큰데, LaTeXML 정규화로 target ambiguity를 줄이고, SVM coarse split과 fuzzy matching의 coarse-to-fine 정렬로 supervision을 자동 생성하는 구성은 paired ground truth가 없는 다른 문서 도메인에도 옮길 수 있는 레시피다. 정렬 품질을 score로 정량화해 acceptance threshold로 데이터 품질을 통제한 점도 재사용 가능한 설계다.

repetition 문제를 보면, logit variance 기반 검출은 사후 검출 heuristic이지 원인 해결이 아니다. greedy decoding에 의존하는 한 collapse 가능성이 남으므로, 이후 연구들이 더 강한 decoding 전략이나 페이지 간 context를 주는 방향으로 간 것은 자연스러운 귀결이다. 페이지 단위 독립 처리가 만든 문서 수준 비일관성도 마찬가지로, 장문 context window를 가진 VLM이 등장한 뒤에는 multi-page를 한 번에 보는 접근으로 상당 부분 대체될 여지가 있는 한계다.