(출처: arXiv:2609.26638, Figure 4)
논문: Diffusion Drafts, AR Verifies: Accelerating Document OCR with Self-Speculative Decoding
저자: Dohyun Kim, Sungjun Han, Hyungguk Kim, Yusik Kim, Jamin Shin, Paul Hongsuck Seo, Hongjoon Ahn
소속: Trillion Labs, Korea University, Seoul National University
공개일: 2026년 9월 22일
arXiv: https://arxiv.org/abs/2609.26638
코드: https://github.com/trillion-labs/GravityOCR
모델 가중치: https://huggingface.co/trillionlabs/GravityOCR
분류: Document AI · OCR · Vision-Language Model · Diffusion LM · Speculative Decoding
[M]의 임베딩 하나뿐이다.한 줄 요약: 확산 모델이 초안을 쓰고 자기회귀 경로가 그걸 검증하는 "셀프 스펙큘레이티브" 구조로, 문서 OCR VLM의 품질을 거의 그대로 둔 채 디코딩 병렬성을 끌어올린 연구다.
자기회귀(autoregressive) OCR 비전-언어 모델은 문서 이미지를 텍스트와 구조화된 마크업으로 정확하게 변환하지만, 출력 토큰 하나마다 순차적인 디코딩 단계를 한 번씩 요구하기 때문에 추론 속도에 제약이 있다. 열린 형태의 텍스트 생성과 달리 OCR 출력은 입력 이미지에 강하게 근거(grounded)하고 있어, 확산 기반 병렬 생성이 유망하다. 그러나 하나의 확산 단계에서 여러 토큰을 동시에 예측할 때, 각 토큰은 나머지 토큰이 무엇인지 알기 전에 예측된다. 따라서 이를 곧바로 커밋하면 오류가 발생할 수 있다. 그래서 우리는 병렬 드래프팅과 인과적(causal) AR 검증을 위해 함께 학습된, 파라미터를 공유하는 AR-블록확산 모델 GravityOCR을 제안한다. 커밋 전에 초안을 검증하도록 하면, 별도의 드래프팅 네트워크 없이도 한 라운드에 여러 출력 토큰을 커밋할 수 있다. 또한 인과적 AR 경로는 확산 궤적 우도 추정을 피하면서 시퀀스 수준 및 구조 수준 OCR 보상으로 GRPO를 수행할 수 있게 하며, 이때 공유된 드래프터 파라미터도 함께 갱신된다. OmniDocBench v1.6에서 AR 경로 GRPO는 확산 드래프팅 효율을 떨어뜨리지 않으면서 Overall 점수를 94.92에서 95.16으로 향상시키고, 최종 모델은 원래 GLM-OCR 점수 95.48에 가깝게 유지된다. SGLang 서빙 배포 환경에서 GravityOCR은 forward 당 평균 9.7개의 출력 토큰을 커밋하며, 영역 크롭에서 AR 디코딩 대비 3.94배의 디코딩 전용 속도 향상과 1.32배의 엔드투엔드 페이지 처리 속도 향상을 달성한다.
요약: OCR 출력은 이미지에 강하게 묶여 있어서 원칙적으로는 여러 토큰을 병렬로 뽑아도 될 것 같지만, 병렬 예측은 서로를 보지 못한 채 결정되기 때문에 그냥 커밋하면 누락·반복 같은 사고가 난다. 이 논문은 "병렬로 뽑는 것"과 "커밋하는 것"을 분리해서, 확산 경로가 초안을 만들고 인과적 AR 경로가 그것을 검증하게 만든다. 두 경로가 같은 파라미터를 쓰기 때문에 드래프터를 따로 학습시킬 필요가 없고, 검증 경로가 정확한 우도를 제공하므로 강화학습도 평범하게 붙는다.
문서 파싱 VLM은 최근 몇 년간 품질 경쟁이 상당히 수렴했다. OmniDocBench 같은 벤치마크에서 상위권 모델들은 Overall 95점 근처에 몰려 있고, 이 구간에서 0.3점을 더 얻는 일은 점점 어려워지고 있다. 그래서 실무의 관심은 자연스럽게 "같은 품질을 얼마나 싸고 빠르게 낼 수 있나" 로 옮겨간다. 수십만 페이지짜리 문서 아카이브를 한 번 파싱하는 비용, 사용자가 PDF를 올린 뒤 결과를 기다리는 지연 시간이 실제 서비스의 제약이 되기 때문이다.
문제는 AR 디코딩의 구조적 한계다. 출력 토큰 한 개마다 모델 forward가 한 번씩 필요하고, 표처럼 출력이 긴 영역에서는 이 순차성이 그대로 벽이 된다. 논문의 측정에서도 표 영역의 평균 출력 길이는 872토큰으로 텍스트 영역(73토큰)의 열 배를 넘는다.
여기서 확산 언어모델이 매력적인 대안으로 등장한다. 확산 계열은 여러 위치를 동시에 예측할 수 있고, 특히 OCR은 "이미지에 적힌 것을 그대로 옮기는" 과제라 열린 생성보다 병렬화에 유리하다. 실제로 확산 기반 문서 파서(MinerU-Diffusion)는 forward 당 5.2토큰을 커밋한다. 그런데 품질을 보면 Overall 89.87로 AR 모델들에 확연히 뒤진다.
(출처: arXiv:2609.26638, Figure 2)
왜 그럴까. 확산 디코딩의 통상적인 방식은 신뢰도 임계값(τ_c) 을 두고, 한 스텝에서 확신이 높은 위치들을 골라 확정하는 것이다. 문제는 동시에 확정되는 토큰들이 서로를 보지 못한다는 점이다. 위 그림의 예를 보면, τ_c = 0.7에서 commercial과 enter가 함께 확정되는데 그 사이 위치는 아직 미결이고, 결국 vehicles가 통째로 누락된다. 또 마지막 the가 왼쪽 두 위치보다 먼저 확정되면서 to the the처럼 반복이 생긴다. 표나 수식의 마크업에서는 이런 국소적 사고 하나가 구조 전체를 깨뜨린다.
즉 문제의 본질은 "병렬로 예측하는 것"이 아니라 "검증 없이 커밋하는 것" 이다. 이 진단이 이 논문의 출발점이다.
GravityOCR은 스펙큘레이티브 디코딩의 아이디어를 차용한다. 원래 스펙큘레이티브 디코딩은 작고 빠른 드래프터 모델이 후보 토큰들을 제안하고, 크고 정확한 타깃 모델이 한 번의 forward로 검증해 일치하는 접두사만 받아들이는 기법이다. 여기서는 드래프터를 별도 모델로 두지 않고, 같은 모델의 확산 경로가 드래프터 역할을, 같은 모델의 AR 경로가 검증자 역할을 한다. 그래서 "셀프(self-)" 스펙큘레이티브다.
구조적으로 추가되는 것은 거의 없다. 비전 인코더, 언어 디코더, LM 헤드를 두 경로가 모두 공유하고, 새로 생기는 파라미터는 마스크 토큰 [M]의 임베딩 한 행뿐이다. 이 임베딩은 기존 임베딩의 통계에 맞춘 정규분포에서 초기화된다. 보조 예측 헤드도, 별도 드래프팅 네트워크도 없다.
(출처: arXiv:2609.26638, Figure 3)
학습 스텝마다 모델은 같은 이미지와 프롬프트를 조건으로 세 개의 응답 스트림을 한 번의 forward에서 처리한다.
t ~ U(0,1)을 뽑아, 각 응답 토큰을 확률 t로 마스킹한다. 첫 번째 스트림은 마스킹된 위치 집합을 쓰고, 두 번째 스트림은 그 여집합을 마스킹한다. 기대 마스킹 비율이 각각 t와 1−t가 되고, 두 마스크가 상보적이므로 모든 응답 토큰이 정확히 한 스트림에서 한 번씩 supervision을 받는다. (이 상보적 마스킹은 Fast-dLLM v2의 방식을 따른다.)어텐션 패턴이 두 종류로 갈린다. 깨끗한 스트림은 순수 인과적이다. 손상된 스트림은 같은 블록 안에서는 양방향, 앞선 깨끗한 블록에 대해서는 인과적으로 붙고, 현재·미래의 깨끗한 블록은 보지 않는다. 확산 supervision은 마스킹된 타깃에만 적용된다.
학습 목표는 두 손실의 합이다.
L = L_AR + λ · L_diff
말로 풀면, 깨끗한 스트림의 인과적 다음 토큰 교차엔트로피에, 두 손상 스트림에 걸친 마스크 토큰 디노이징 교차엔트로피를 λ배 해서 더한다. 타임스텝 재가중은 쓰지 않고(w(t)=1), λ = 1로 두고 전체를 1+λ로 정규화하므로 실질적으로 각 항의 가중치가 0.5씩이다.
한 가지 디테일이 재미있다. 모든 응답 뒤에 정확히 B개의 EOS 토큰을 채워 넣는데, AR 손실은 각 EOS 런의 첫 EOS만 세고 확산 스트림은 전부 supervision한다. 이 제한을 걸지 않으면 AR 경로가 EOS를 과다 예측해서 Overall이 4점 이상 떨어진다고 한다.
한 라운드의 동작은 이렇다 (기본 블록 크기 B = 32).
x₀만 예외다. x₀는 직전 라운드의 검증자 예측으로 만들어졌고 아직 입력으로 들어간 적이 없다.x₀ 뒤에 [M] 토큰 B개를 붙여 한 번 forward한다. 마스크 위치들은 캐시에 인과적으로, 윈도우 안에서는 양방향으로 어텐션한다. 이 한 번의 forward에서 경계 로짓으로부터 a₀(AR 예측과 동일)를, 마스크 로짓들로부터 초안 d_{1:B}를 얻는다. 신뢰도 임계값을 쓰지 않는다 — 원샷 드래프트가 모든 위치를 무조건 제안한다.[a₀, d_{1:B}]를 토큰 단위 인과 어텐션으로 한 번 통과시켜 a_{1:B+1}을 얻는다. 이 패스가 드래프트의 KV 슬롯을 재사용하면서 양방향 상태를 인과 상태로 덮어쓰기 때문에, 캐시 재구성을 위한 추가 forward가 필요 없다.1 ≤ j ≤ A 전 구간에서 d_j = a_j인 가장 긴 접두사 길이 A를 찾는다. 라운드는 a₀, d_{1:A}, 그리고 a_{A+1}을 커밋한다. 중요한 점은 커밋되는 토큰이 모든 위치에서 검증자 자신의 예측이라는 것이다.a_{A+1}이 다음 경계 토큰이 된다. A = B면 초안이 전부 수락된 것이고 a_{A+1}은 보너스 토큰이다.따라서 한 라운드가 커밋하는 토큰 수는 최소 2개(a₀, a₁)에서 최대 B+2개다.
여기서 나오는 성질이 이 논문의 안전장치다. top-1 디코딩에서 커밋되는 모든 토큰은 커밋된 접두사가 주어졌을 때 검증자의 argmax이므로, 귀납적으로 정확한 산술 하에서 출력이 단독 AR greedy 디코딩과 동일하다. 실제 bf16 서빙 환경에서는 영어 OmniDocBench 크롭 8,922개 중 96.6% 가 완전히 동일했고, 불일치가 처음 생긴 지점의 상위 두 로짓 마진 중앙값은 0.14 nats였다. 그 305개 지점을 fp32로 재평가하니 228개는 AR 토큰, 77개는 셀프 스펙 토큰과 일치했고 그중 65개는 마진 0.05 nats 미만의 사실상 동점이었다. 즉 차이는 알고리즘이 아니라 커널 수치 오차에서 온다.
다단계 마스킹 확산 모델에 강화학습을 붙이기 어려운 이유는 정확한 시퀀스 우도를 싸게 계산할 방법이 없다는 것이다. 언마스킹 궤적 전체를 주변화해야 한다. 그런데 GravityOCR에서는 출력을 최종 결정하는 주체가 인과적 AR 검증자이므로, 그 경로의 정확한 자기회귀 우도를 써서 표준 GRPO를 그대로 돌릴 수 있다. 확산 드래프터는 파라미터 공유를 통해서만 갱신되고, 확산 전용 목적함수는 전혀 쓰지 않는다.
보상은 과제 특성에 맞춰 설계됐고 모두 [0,1] 범위다. 예측과 정답 모두 OmniDocBench 공식 마크업 정규화를 먼저 거친다.
1 − NED.r_table = clip_[0,1]( (0.45·TEDS_s + 0.55·s_cell) · (1 − p_row) · (1 − p_loop) ). TEDS_s는 구조만 보는 TEDS, s_cell은 읽기 순서대로 이어붙인 셀 문자열의 정규화 편집 유사도다. p_row는 행 수 과다/부족에 대한 벌점, p_loop는 같은 행 키를 과도하게 반복했을 때의 벌점이다. 행·열 수가 정답과 맞으면 각각 0.05의 보너스가 붙고, <table>이 닫히지 않으면 0점, 파싱 불가면 편집 유사도의 0.15배만 준다.r_formula = sim(canon(ŷ), canon(y)) · 0.3^v. canon은 수식 구분자 제거, \dfrac/\tfrac → \frac 치환, \left/\right·공백 명령·중괄호 제거 등을 수행한다. v는 정답은 통과하는데 예측은 실패한 well-formedness 검사(괄호 균형, \begin/\end 환경, $ 짝 등)의 개수다. 렌더링 없이 CDM을 근사하는 프록시다.g = min(ρ₈, max(0, 1 − (L_run − 20)/200))을 곱한다. ρ₈은 서로 다른 8-gram 비율, L_run은 같은 문자가 연속되는 최대 길이다. 반복 루프에 빠진 출력을 걸러낸다.최적화는 LoRA 없는 풀 파인튜닝으로, 스텝마다 프롬프트 24개 × 롤아웃 28개 = 672개 completion을 쓴다. 비대칭 클리핑(ε_low = 0.2, ε_high = 0.28), KL 계수 β = 10⁻³, 학습률 3×10⁻⁶ 코사인 감쇠, 8-bit AdamW. 보고된 결과는 500 스텝 체크포인트다. 프롬프트 풀은 영역 크롭 7,723개로, 구성은 표 92% / 텍스트 6% / 수식 2%이고 벤치마크 이미지는 들어 있지 않다.
기반 모델은 공개된 GLM-OCR 체크포인트이고, 레이아웃 검출기(PP-DocLayout-V3)와 조립 파이프라인은 그대로 둔 채 영역 단위 OCR 모델에만 AR→확산 적응을 적용했다. 학습은 H100 16장에서 40,000 스텝, 지역 단위 예제 12.3M개를 60/20/20(텍스트/표/수식) 비율로 10.8M개로 맞춰 사용했다.
| 모델 | 디코딩 | Text↓ | TEDS↑ | CDM↑ | Order↓ | Overall↑ | TPF↑ | tok/s↑ | pages/s↑ |
|---|---|---|---|---|---|---|---|---|---|
| MinerU2.5 | AR | 0.045 | 0.881 | 0.959 | 0.130 | 93.18 | 1.0 | 559 | 0.407 |
| MinerU2.5-Pro | AR | 0.037 | 0.935 | 0.969 | 0.124 | 95.57 | 1.0 | 545 | 0.399 |
| MinerU-Diffusion | diff | 0.073 | 0.853 | 0.916 | 0.154 | 89.87 | 5.2 | 79 | 0.059 |
| PaddleOCR-VL-1.5 | AR | 0.042 | 0.919 | 0.969 | 0.129 | 94.86 | 1.0 | 741 | 0.389 |
| dots.ocr | AR | 0.048 | 0.865 | 0.917 | 0.140 | 91.14 | 1.0 | 149 | 0.116 |
| DeepSeek-OCR-2 | AR | 0.049 | 0.859 | 0.933 | 0.144 | 91.42 | 1.0 | 24 | 0.022 |
| HunyuanOCR-1.5 | AR | 0.036 | 0.952 | 0.949 | 0.125 | 95.52 | 1.0 | 390 | 0.313 |
| HunyuanOCR-1.5 | DFlash | 0.036 | 0.952 | 0.949 | 0.125 | 95.52 | 9.9† | 720 | 0.579 |
| GLM-OCR (base) | AR | 0.040 | 0.934 | 0.970 | 0.141 | 95.48 | 1.0 | 807 | 0.571 |
| GLM-OCR (base) | MTP | 0.040 | 0.934 | 0.970 | 0.141 | 95.48 | 3.7† | 667 | 0.472 |
| GravityOCR | AR | 0.040 | 0.928 | 0.967 | 0.141 | 95.16 | 1.0 | 794 | 0.554 |
| GravityOCR | self-spec | 0.040 | 0.928 | 0.967 | 0.141 | 95.16 | 9.7 | 1,047 | 0.730 |
† 별도 드래프트 파라미터를 쓰는 모드. TPF는 기반 모델 검증당 수락 토큰 수로 계산되며 드래프팅 연산은 제외한다.
읽어야 할 숫자는 세 가지다.
첫째, 품질 손실이 0.32점이다. GravityOCR Overall 95.16 vs 기반 GLM-OCR 95.48. 항목별로는 TEDS 0.934 → 0.928, CDM 0.970 → 0.967이고 Text와 Order는 동일하다. 평가된 파서 중 이보다 높은 것은 MinerU2.5-Pro(95.57)와 HunyuanOCR-1.5(95.52)뿐이다.
둘째, 확산 단독 디코딩과 격이 다르다. MinerU-Diffusion은 TPF 5.2를 얻는 대가로 Overall 89.87까지 내려간다. GravityOCR은 TPF 9.7에서 95.16을 유지한다. 논문의 Figure 5는 이 격차를 병렬성 축에서 직접 보여주는데, 같은 GravityOCR을 직접 블록 확산으로 돌려 약 10토큰/forward를 뽑으면 Overall이 92.53으로 떨어진다. 동일 병렬성에서 검증을 붙이는 것만으로 2.6점 이상이 회복된다는 뜻이다.
셋째, 기존 가속 모드들이 실제 서빙에서 의외로 약하다. GLM-OCR의 MTP 모드는 TPF 3.7을 기록하지만 페이지 처리량은 0.472 pages/s로 오히려 AR(0.571)보다 느리다. 드래프팅 연산 자체가 비용이기 때문이다. GravityOCR의 0.730 pages/s는 표에서 가장 높은 값이다.
| 모델 | PubTabNet TEDS↑ | TEDS-struct↑ | UniMER CDM↑ |
|---|---|---|---|
| MinerU2.5 | 0.854 | 0.909 | 0.927 |
| MinerU2.5-Pro | 0.866 | 0.913 | 0.956 |
| MinerU-Diffusion | 0.734 | 0.858 | 0.952 |
| PaddleOCR-VL-1.5 | 0.828 | 0.900 | 0.956 |
| dots.ocr | 0.893 | 0.935 | 0.910 |
| DeepSeek-OCR-2 | 0.849 | 0.896 | 0.863 |
| HunyuanOCR-1.5 | 0.852 | 0.903 | 0.942 |
| GLM-OCR (base, AR) | 0.803 | 0.858 | 0.963 |
| GravityOCR | 0.871 | 0.916 | 0.962 |
여기서는 오히려 기반 모델을 앞선다. PubTabNet TEDS가 0.803 → 0.871, TEDS-struct가 0.858 → 0.916으로 올랐다. 표 데이터를 대량으로(그리고 약 39%는 셀 단위 원본 주석으로) 다시 학습시킨 효과이자, GRPO 프롬프트 풀의 92%가 표였던 결과로 보인다. UniMER CDM은 0.962로 기반 모델(0.963)과 사실상 동일하며 평가된 외부 시스템 전부를 넘는다.
| 백엔드 | 디코딩 | decode-only | end-to-end | 가속비 |
|---|---|---|---|---|
| Transformers | AR | 53 | 51 | — |
| Transformers | self-spec | 293 | 161 | 5.53× / 3.20× |
| SGLang | AR | 777 | 486 | — |
| SGLang | self-spec | 3,057 | 844 | 3.94× / 1.74× |
eager Transformers는 커널 런치에 묶여 있어서 가속비가 TPF 비율(9.7배)에 가깝게 올라가고, SGLang은 퓨즈된 커널이 처리 토큰 수에 비례해 스케일하므로 순수 디코딩 가속은 3.94배로 줄어든다. 그리고 엔드투엔드로 내려오면 1.74배다. 크롭 하나당 비전 인코딩과 프롬프트 프리필이라는 고정 비용이 있고, 디코딩이 빨라질수록 그 고정 비용의 비중이 커지기 때문이다. 페이지 단위로 레이아웃 단계까지 포함하면 1.32배가 된다.
| 유형 | 크롭 수 | 평균 출력 토큰 | 수락 토큰↑ | TPF↑ | AR tok/s | self-spec tok/s | 가속비 |
|---|---|---|---|---|---|---|---|
| 텍스트 | 7,019 | 73 | 15.0 | 8.5 | 419 | 647 | 1.54× |
| 수식 | 1,660 | 95 | 18.9 | 10.5 | 520 | 947 | 1.82× |
| 표 | 243 | 872 | 25.0 | 13.5 | 732 | 2,462 | 3.36× |
| 전체 | 8,922 | 99 | 17.4 | 9.7 | 486 | 844 | 1.74× |
표 영역은 32개 초안 중 평균 25.0개가 수락되고 3.36배 빨라진다. 텍스트는 15.0개에 1.54배다. 다만 논문은 이 차이를 "콘텐츠 유형의 차이"라기보다 출력 길이 효과가 형태를 바꿔 나타난 것이라고 해석한다. 출력 길이별로 끊어 보면 근거가 분명하다.
| 출력 길이 | n | 수락 토큰↑ | TPF↑ | AR tok/s | self-spec tok/s | 가속비 |
|---|---|---|---|---|---|---|
| <128 | 7,257 | 14.8 | 8.4 | 357 | 510 | 1.43× |
| 128–511 | 1,496 | 18.1 | 10.1 | 583 | 1,176 | 2.02× |
| 512–1023 | 92 | 18.4 | 10.2 | 737 | 2,033 | 2.76× |
| ≥1024 | 77 | 23.9 | 12.9 | 761 | 2,805 | 3.68× |
수락 길이가 14.8 → 23.9로 단조 증가한다. 그런데 OmniDocBench 크롭의 5분의 4가 128토큰 미만 구간에 몰려 있어서, 평균 가속비가 1.74배로 눌린다.
| OmniDocBench Overall↑ | TPF↑ | |
|---|---|---|
| AR 손실 없음 | 93.64 | 6.96 |
| AR 손실 있음 | 95.02 | 6.75 |
10k 스텝 체크포인트 비교다. AR supervision을 제거하면 TPF는 6.96 vs 6.75로 사실상 같은데 Overall이 1.38점 떨어진다. 검증자 품질이 곧 최종 출력 품질이므로, AR 경로를 계속 학습시키는 것이 공짜가 아니라 필수라는 뜻이다.
| 디코딩 | τ_c | Overall 전 | Overall 후 | Δ | TPF 전 | TPF 후 |
|---|---|---|---|---|---|---|
| 블록 확산 | 0.7 | 86.17 | 86.06 | −0.11 | 14.85 | 15.43 |
| 블록 확산 | 0.9 | 91.55 | 91.54 | −0.01 | 11.89 | 11.72 |
| 블록 확산 | 0.95 | 89.62 | 92.53 | +2.91 | 10.20 | 9.97 |
| 블록 확산 | 0.99 | 93.23 | 93.57 | +0.34 | 7.18 | 7.28 |
| 셀프 스펙 | — | 94.92 | 95.16 | +0.24 | 9.61 | 9.68 |
목표했던 셀프 스펙 경로는 +0.24점(94.92 → 95.16)이고 TPF는 9.61 → 9.68로 오히려 미세하게 올랐다. 품질을 올리면서 병렬성을 잃지 않았다는 것이 이 표의 요지다.
흥미로운 부수 효과는 τ_c = 0.95 행이다. GRPO 이전 모델이 유독 이 설정에서 무너졌는데(수식 2,352개 중 CDM 0점이 116개, 다른 설정에서는 37개), 강화학습 후 이 구멍이 메워져 +2.91점이 나왔다. 퇴화 방지 게이트와 수식 well-formedness 벌점이 작동한 결과로 읽힌다.
한 가지 더. 마스킹 스케줄 비교에서 전부 마스킹(all-mask) 학습은 더 좋은 드래프터를 만들지 못했다. 균등 t 샘플링 쪽이 6개 체크포인트 전부에서 TPF가 높고(10k에서 6.75 vs 6.66), 정확도도 6개 중 5개에서 앞선다.
논문에 별도의 Limitations 절은 없지만, 본문에서 스스로 인정하는 제약이 여러 개 있고 꽤 솔직하다.
이 논문의 기여를 한 문장으로 줄이면, 확산 언어모델의 병렬성을 "커밋 정책"에서 분리해 안전하게 쓰는 방법이다. 확산 디코딩이 품질을 잃는 원인은 병렬 예측 자체가 아니라 서로를 보지 못한 예측을 그대로 확정하는 데 있었고, 같은 모델의 인과 경로를 검증자로 세우는 것만으로 동일 병렬성에서 2.6점 이상을 회복한다.
실용적으로 눈에 띄는 점은 비용이 거의 들지 않는 구조라는 것이다. 별도 드래프터 모델도, 보조 헤드도 없고 추가 파라미터는 마스크 임베딩 하나다. 기존 AR OCR 체크포인트에서 출발하는 적응 레시피이므로, 이미 잘 만들어 둔 문서 파서를 버리지 않고 가속만 얹을 수 있다. 검증 패스가 KV 캐시를 그 자리에서 인과 상태로 덮어써 별도 캐시 재구성 forward를 없앤 것도 구현 관점에서 깔끔하다.
동시에 정직하게 봐야 할 부분도 분명하다. 인상적인 3.94배는 디코딩만 떼어낸 숫자이고, 실제 페이지 파이프라인에서는 1.32배다. 배치를 키우는 대량 처리에서는 이득이 1.13배까지 줄어든다. 그러니 이 기법이 가장 잘 맞는 자리는 사용자가 결과를 기다리는 저동시성·저지연 경로, 그리고 출력이 긴 표 위주 문서다. 실제로 표 영역은 3.36배, 1,024토큰 이상 출력은 3.68배가 나온다. 재무제표나 실험 결과표가 빽빽한 문서를 다루는 쪽이라면 체감 차이가 클 것이다.
한국 연구 조직(Trillion Labs, 고려대, 서울대)에서 나온 문서 OCR 가속 연구라는 점, 그리고 코드와 가중치가 모두 공개됐다는 점도 덧붙일 만하다. 남은 숙제는 명확하다. 영어 밖에서의 수락률, 배치 서빙과의 양립, 그리고 확산 경로를 직접 최적화하는 강화학습이다.
본문에 사용한 이미지는 모두 원논문에서 인용한 것이며, 저작권은 원저자에게 있습니다.
본 글은 학습·공유 목적의 개인 리뷰이며, 수치와 해석에 오류가 있을 수 있습니다. 정확한 내용은 원논문을 확인해 주세요.