olmOCR은 PDF 안의 모든 구조를 자동으로 완벽히 복원하는 도구가 아닙니다. born-digital 문서와 scan, 표, 수식, 다단 편집을 나눠 평가하고 변환 뒤 원문 대조와 실패 페이지 보관 절차를 둬야 합니다.
olmOCR: 비전-언어 모델로 PDF 문서의 한계를 뛰어넘다
olmOCR: PDF 문서 처리를 혁신하는 비전-언어 모델
olmOCR GitHub: allenai/olmocr olmOCR Demo: olmOCR Demo
1. 개요
PDF 문서는 방대한 정보가 포함된 주요 디지털 문서 형식이지만, 기존 언어 모델(LLM)에서는 이를 효과적으로 활용하기 어려웠습니다. PDF 문서의 레이아웃, 표, 다이어그램, 수식 등을 정확하게 유지하며 변환하는 것은 큰 도전 과제입니다.
olmOCR은 비전-언어 모델(VLM, Vision-Language Model)을 활용하여 PDF 문서를 자연스럽고 읽기 쉬운 텍스트로 변환하는 오픈소스 OCR 툴킷입니다. olmOCR은 단순한 OCR을 넘어 문서의 레이아웃을 분석하고, 표와 수식을 구조적으로 복원하며, AI 기반 텍스트 정렬을 수행합니다.
2. 기존 OCR 기술의 한계와 olmOCR의 차별점
기존 OCR 도구의 문제점
기존의 PDF 텍스트 추출 도구(예: Tesseract, Grobid, Adobe Acrobat OCR)는 다음과 같은 문제를 가지고 있습니다.
- 레이아웃 보존 어려움:
- 표, 리스트, 다이어그램, 각주 등의 구조를 무너뜨리며 단순한 텍스트로 변환
- 읽기 순서 문제:
- PDF 내 텍스트 순서가 뒤섞여 문서의 흐름을 유지하기 어려움
- 고품질 데이터 생성 한계:
- AI 모델 학습에 필요한 깨끗한 텍스트 데이터를 생성하기 어려움
olmOCR이 해결하는 문제
olmOCR은 비전-언어 모델(VLM) 을 활용하여 기존 OCR 도구의 한계를 극복합니다.
- 지원: 문서 구조를 유지한 상태로 변환 → 표, 리스트, 이미지 캡션, 제목 등을 보존
- 지원: 문서의 논리적 흐름을 유지 → 읽기 순서를 AI가 정렬하여 정확한 텍스트 제공
- 지원: Markdown 형식으로 변환 지원 → AI 학습 및 데이터 분석을 위한 고품질 텍스트 출력
- 지원: 대규모 PDF 처리 가능 → 100만 페이지 변환 비용이 단 190달러
3. olmOCR의 동작 원리
olmOCR은 비전-언어 모델(VLM)을 활용한 OCR 파이프라인을 따르며, 기존 OCR 방식과는 근본적으로 다른 접근법을 사용합니다.
1 PDF 문서 입력 및 전처리
olmOCR이 PDF를 처리하는 첫 번째 단계는 페이지별 이미지와 텍스트 추출입니다.
- PDF 문서를 페이지별 이미지로 변환
poppler-utils를 활용하여 PDF를 래스터화하여 고해상도 이미지로 변환
- 기본적인 OCR을 수행하여 초기 텍스트 추출
pdf2text또는Tesseract를 사용하여 기계 판독이 가능한 텍스트를 먼저 가져옴
- 텍스트 블록을 위치 기반으로 분석
- 페이지 내 텍스트 위치, 폰트 크기, 스타일 정보를 추출
- 표, 캡션, 제목, 본문 등 문서 요소를 식별
2 문서 앵커링(Document Anchoring) 적용
olmOCR의 핵심 기술 중 하나는 “문서 앵커링(Document Anchoring)” 입니다. 이는 텍스트 블록을 물리적 위치와 연결하여, 문서의 읽기 순서를 유지하는 방법입니다.
- 문서의 텍스트 블록을 위치 기반으로 정렬
- 문서 내 텍스트 박스를 인식하여 페이지 내 논리적 순서로 정렬
- 제목, 본문, 표, 캡션 등의 요소를 자동 인식하여 문서 구조를 복원
- 다중 열(multi-column) 문서에서도 자연스러운 읽기 흐름을 유지
3 비전-언어 모델(VLM) 기반 변환
olmOCR은 일반적인 OCR 모델이 아닌, Qwen2-VL-7B-Instruct와 같은 비전-언어 모델을 활용하여 OCR을 수행합니다.
- PDF 이미지와 텍스트를 비전-언어 모델에 입력
- Qwen2-VL, Llava, Qwen2-VL-Chat 등의 대형 멀티모달 모델을 활용
- 모델이 문서를 이해하고 정확한 텍스트와 레이아웃을 복원
- 텍스트 위치와 문서의 논리적 구조를 결합하여 Markdown 형식으로 변환
- 표, 다이어그램, 수식 등의 시각적 요소도 구조를 유지하며 변환
기존 OCR 도구는 단순한 문자 인식만 수행하지만, olmOCR은 문서의 맥락을 이해하고 구조를 유지한 상태로 변환한다는 점이 핵심 차별점입니다.
4 최종 변환 및 출력
olmOCR은 PDF 문서를 Markdown, JSON, TXT 등의 형식으로 출력하여 AI 학습 및 데이터 분석에 최적화된 형태로 변환합니다.
- 지원: Markdown 변환 → 표, 리스트, 제목, 본문을 유지하며 정리된 텍스트 출력
- 지원: JSON 변환 → AI 학습을 위한 데이터 포맷으로 활용 가능
- 지원: TXT 변환 → 단순한 텍스트 파일 형태로 저장 가능
4. 성능 비교 및 벤치마크 결과
olmOCR은 기존 OCR 기술과 비교하여 더 낮은 비용으로 더 높은 정확도를 제공합니다.
** 비용 비교 (100만 페이지 변환 기준)**
| 모델 | 처리 속도 (tokens/sec) | 100만 페이지 변환 비용 |
|---|---|---|
| GPT-4o API | 80 | $12,480 |
| GPT-4o (배치 모드) | 160 | $6,240 |
| Marker API | 800 | $1,250 |
| olmOCR (A100 GPU) | 1,487 | $270 |
| olmOCR (H100 GPU) | 3,050 | $190 |
- 지원: olmOCR은 GPT-4o 대비 32배 저렴하며, 성능도 우수
** OCR 품질 평가 (정렬 정확도)**
olmOCR은 기존 OCR 도구보다 더 정확한 문서 변환 품질을 보여줍니다.
| 모델 | 정렬 정확도(Alignment Score) |
|---|---|
| GPT-4o | 0.954 |
| GPT-4o Mini | 0.833 |
| olmOCR | 0.875 |
6. olmOCR 설치 및 사용법
olmOCR은 오픈소스로 제공되며, 누구나 쉽게 설치하고 사용할 수 있습니다.
** 설치 방법**
1
2
3
4
5
6
7
8
9
10
11
12
# 필수 패키지 설치
sudo apt-get update
sudo apt-get install poppler-utils ttf-mscorefonts-installer
# Conda 환경 설정
conda create -n olmocr python=3.11
conda activate olmocr
# GitHub에서 olmOCR 클론 후 설치
git clone https://github.com/allenai/olmocr.git
cd olmocr
pip install -e .
** PDF 변환 실행**
1
2
3
4
5
# 단일 PDF 변환
python -m olmocr.pipeline ./workspace --pdfs example.pdf
# 여러 개의 PDF 변환
python -m olmocr.pipeline ./workspace --pdfs documents/*.pdf
** 결과 확인**
1
2
3
4
5
# 변환된 JSON 파일 확인
cat workspace/results/output_*.jsonl
# 원본 PDF와 변환 결과 비교
python -m olmocr.viewer.dolmaviewer workspace/results/output_*.jsonl
PDF를 페이지 이미지로 읽는 이유와 대가
PDF의 text layer가 깨졌거나 scan image만 있는 문서는 일반 parser가 읽기 순서와 문자를 얻기 어렵습니다. 비전-언어 모델은 페이지 전체를 보며 column, 표, 수식과 caption의 관계를 추정할 수 있습니다. 그러나 같은 시각 추론 때문에 작은 글자나 숫자를 그럴듯하게 바꾸는 오류도 생길 수 있습니다.
문서 유형을 단일 정확도로 합치지 않습니다. 일반 문단은 문자 누락과 읽기 순서, 표는 행, 열과 숫자, 수식은 기호, 첨자, 그림은 caption 연결을 따로 채점합니다. 법률, 재무처럼 한 글자 오류의 영향이 큰 문서는 표본 비율을 높이고 핵심 숫자를 원본과 자동 대조해야 합니다.
대규모 변환 전에 작은 Batch를 검증한다
서로 다른 PDF 생성기, scan 품질, 언어, page layout을 대표하는 문서를 고릅니다. 입력 page 수와 출력 page 수, 빈 page, 처리 실패, 평균, p95 시간, GPU memory를 기록합니다. 성공으로 표시됐지만 출력이 짧거나 같은 문장이 반복된 page도 실패로 탐지해야 합니다.
Markdown이나 text 출력은 다시 renderer에 넣어 heading, table, equation이 의도대로 보이는지 확인합니다. line break가 많은 PDF는 단어가 잘리고, 다단 문서는 column 순서가 섞일 수 있습니다. 원문 page와 변환 page를 나란히 보는 검수 화면이 있어야 사람이 빠르게 승인할 수 있습니다.
RAG용 문서로 쓸 때 추가로 볼 것
OCR 결과를 바로 chunking하면 잘못된 heading과 page 순서가 검색 단위를 망칠 수 있습니다. page 번호와 source file, 원문 좌표를 metadata에 남겨 답변에서 근거를 되찾을 수 있게 합니다. 표와 본문을 분리할지, 수식을 plain text로 바꿀지도 검색 목적에 맞춰 정합니다.
모델이 읽지 못한 영역을 빈칸으로 남기는 것과 내용을 지어내는 것은 위험도가 다릅니다. confidence나 검수 규칙으로 숫자, 고유명사, 수식이 많은 chunk를 우선 확인하고, 원문으로 연결할 수 없는 결과는 검색 index에 넣지 않는 편이 안전합니다.
함께 읽으면 이해가 이어지는 글
- 차트 OCR은 글자만 맞으면 될까? OCRVerse의 문서, 웹, 수치 보상 분리 — OCRVerse가 문서의 줄바꿈, 차트의 수치, 웹의 계층 구조를 같은 기준으로 채점하지 않고 SFT 뒤 도메인별 보상 RL로 다듬는 이유와 실제 검수 포인트를 정리합니다.
- Claude for Legal이 법률 환각을 끝낼까: 출처, 권한, 승인 설계 — Claude for Legal의 도구 연결 구조를 법률 검색, 문서 수정, 외부 전송으로 나눠 보고 환각, 권한, 감사 위험을 통제하는 기준을 정리합니다.
- 차트, 흐름도를 바로 읽지 말고 다시 그리면 나아질까: Thinking with Drafting — TwD가 이미지의 객체와 관계를 Logic Graphic DSL로 재구성한 뒤 검증하는 방식, VisAlg 성과와 OCR, DSL 범위 한계를 설명합니다.
자주 묻는 질문
olmOCR은 모든 PDF에서 기존 parser보다 좋은가요?
보장되지 않습니다. 깨끗한 text layer 문서는 일반 parser가 더 빠르고 정확할 수 있으며 scan, 복잡한 layout에서 비전 방식의 이득을 따로 비교해야 합니다.
표와 수식은 어떻게 검수해야 하나요?
표의 행, 열, 숫자, 수식의 기호, 첨자와 읽기 순서를 원문 page와 별도로 대조해야 합니다.
RAG에 바로 넣어도 되나요?
먼저 page, source metadata를 보존하고 빈 출력, 반복, 잘못된 heading과 핵심 숫자를 검수한 뒤 index에 넣어야 합니다.
←→ 키와 좌우 스와이프를 지원합니다. 읽던 페이지는 이 기기에 저장됩니다.