OCR+LLM vs VLM: 실무 판단 가이드¶
문서 이해 작업에서 전통적인 OCR+LLM 파이프라인과 VLM 중 어느 것을 선택해야 하는지 판단하는 기준.
두 접근법 비교¶
OCR + LLM 파이프라인¶
구성 요소: - OCR 엔진: Tesseract, EasyOCR, PaddleOCR, Google Document AI, AWS Textract - 후처리: 레이아웃 분석, 테이블 구조화 - LLM: GPT-4, Claude, 로컬 LLM
VLM (End-to-End)¶
모델: GPT-4V, Claude 3, Gemini Pro Vision, Qwen-VL, LLaVA
판단 기준 매트릭스¶
| 기준 | OCR+LLM 유리 | VLM 유리 |
|---|---|---|
| 텍스트 밀도 | 텍스트 위주 문서 | 혼합 콘텐츠 |
| 레이아웃 복잡도 | 단순, 정형화 | 복잡, 비정형 |
| 시각적 컨텍스트 | 불필요 | 필수 |
| 정확도 요구 | 글자 단위 정확도 | 의미 이해 |
| 처리량 | 대량 배치 | 소량, 실시간 |
| 비용 민감도 | 높음 | 낮음 |
| 오프라인 요구 | 필요 | 불필요 |
상세 분석¶
1. 문서 유형별 권장¶
OCR+LLM이 적합한 경우¶
순수 텍스트 문서:
+----------------------------------+
| 계약서 제1조 (목적) |
| 본 계약은 다음의 목적으로... |
| |
| 제2조 (기간) |
| 계약기간은 2024년 1월 1일부터... |
+----------------------------------+
- 계약서, 법률 문서
- 텍스트 위주 보고서
- 기사, 논문 본문
- 정형화된 양식
장점: - 글자 단위 정확도 높음 - 처리 비용 낮음 - 오프라인 처리 가능 - 대량 배치 효율적
VLM이 적합한 경우¶
시각적 컨텍스트가 중요한 문서:
- 인포그래픽
- 프레젠테이션 슬라이드
- 복잡한 차트/그래프
- 손글씨 혼합 문서
- 자유 형식 메모
장점: - 레이아웃 전체 이해 - 시각적 관계 파악 - 비정형 문서 처리 - 단일 API 호출
2. 작업 유형별 권장¶
| 작업 | 권장 | 이유 |
|---|---|---|
| 텍스트 추출 (정확한 복사) | OCR+LLM | 글자 단위 정확도 |
| 문서 요약 | VLM | 전체 맥락 이해 |
| 테이블 데이터 추출 | OCR+LLM | 구조화 필요 |
| 차트 해석 | VLM | 시각적 이해 필수 |
| 양식 필드 추출 | OCR+LLM | 좌표 기반 추출 |
| 문서 분류 | VLM | 빠른 전체 파악 |
| 비교 분석 | VLM | 여러 요소 동시 참조 |
| 법적 문서 검토 | OCR+LLM | 정확도 최우선 |
3. 기술적 고려사항¶
OCR+LLM의 한계¶
# OCR이 실패하는 케이스
# 1. 복잡한 레이아웃
"""
+-------+-------+
| 텍스트A | 텍스트B | ← OCR: "텍스트A 텍스트B" (순서 혼동)
+-------+-------+
| 텍스트C | 텍스트D |
+-------+-------+
"""
# 2. 시각적 맥락 손실
"""
원본: [위험 경고 아이콘] 주의사항
OCR: "주의사항" ← 아이콘 정보 손실
"""
# 3. 손글씨/비정형 텍스트
"""
원본: "약속 시간: 3시쯤?" (손글씨)
OCR: "약속 시간: 3시좀?" (인식 오류)
"""
VLM의 한계¶
# VLM이 어려워하는 케이스
# 1. 미세한 텍스트 차이
"""
원본: "계좌번호: 123-456-789012"
VLM: "계좌번호: 123-456-789012" 또는 "123-456-789O12"
→ 숫자 0과 영문 O 혼동 가능
"""
# 2. 긴 문서
"""
- 해상도 제한으로 작은 글씨 손실
- 여러 페이지 처리 비효율적
"""
# 3. 정형 데이터 추출
"""
원본: 1000행 엑셀 이미지
VLM: 모든 셀 정확히 추출 어려움
"""
실무 의사결정 플로우차트¶
하이브리드 접근법¶
실무에서는 두 방식을 결합하는 것이 효과적일 수 있음.
패턴 1: OCR 선처리 + VLM 분석¶
class HybridDocumentProcessor:
def __init__(self, ocr_engine, vlm_client):
self.ocr = ocr_engine
self.vlm = vlm_client
def process(self, image_path, task_type):
# 1. OCR로 텍스트 추출
ocr_result = self.ocr.extract(image_path)
# 2. 작업 유형에 따라 분기
if task_type == "exact_extraction":
# 정확한 추출은 OCR 결과 사용
return self.llm_process(ocr_result.text)
elif task_type == "understanding":
# 이해가 필요한 작업은 VLM 사용
return self.vlm.analyze(
image_path,
context=f"참고 텍스트: {ocr_result.text}"
)
elif task_type == "hybrid":
# 둘 다 필요한 경우
vlm_analysis = self.vlm.analyze(image_path)
return {
"raw_text": ocr_result.text,
"analysis": vlm_analysis,
"tables": ocr_result.tables
}
패턴 2: VLM 초벌 + OCR 검증¶
def extract_with_verification(image_path, vlm, ocr):
"""
VLM으로 빠르게 추출하고 OCR로 검증
"""
# VLM으로 핵심 정보 추출
vlm_result = vlm.extract(image_path, prompt="""
이 문서에서 다음 정보를 추출하세요:
- 계약번호
- 계약일자
- 계약금액
""")
# OCR로 원본 텍스트 확보
ocr_text = ocr.extract(image_path)
# 검증: VLM 결과가 OCR 텍스트에 있는지 확인
verified_result = {}
for field, value in vlm_result.items():
if value in ocr_text:
verified_result[field] = {"value": value, "verified": True}
else:
# OCR에서 유사한 값 찾기
similar = find_similar(value, ocr_text)
verified_result[field] = {
"vlm_value": value,
"ocr_value": similar,
"verified": False
}
return verified_result
패턴 3: 문서 유형별 라우팅¶
class DocumentRouter:
def __init__(self):
self.vlm = VLMClient()
self.ocr_pipeline = OCRPipeline()
def classify_and_route(self, image_path):
# 1. VLM으로 빠르게 문서 분류
doc_type = self.vlm.classify(image_path, categories=[
"text_heavy", # 텍스트 위주
"form", # 양식
"chart_heavy", # 차트/그래프 위주
"mixed_media", # 혼합
"handwritten" # 손글씨
])
# 2. 문서 유형별 처리 파이프라인 선택
routing_table = {
"text_heavy": self.ocr_pipeline,
"form": self.ocr_pipeline,
"chart_heavy": self.vlm,
"mixed_media": self.vlm,
"handwritten": self.vlm
}
processor = routing_table[doc_type]
return processor.process(image_path)
비용 분석¶
비용 구성 요소¶
| 항목 | OCR+LLM | VLM |
|---|---|---|
| OCR API 비용 | $0.001-0.01/페이지 | - |
| LLM 토큰 비용 | ~$0.01/1K tokens | - |
| VLM API 비용 | - | $0.01-0.05/이미지 |
| 총 비용 (페이지당) | ~$0.02-0.03 | ~$0.01-0.05 |
규모별 비용 비교 (월간)¶
| 처리량 | OCR+LLM | VLM | 권장 |
|---|---|---|---|
| 100 페이지 | ~$3 | ~$3 | 작업 특성에 따라 |
| 1,000 페이지 | ~$25 | ~$35 | OCR+LLM |
| 10,000 페이지 | ~$250 | ~$350 | OCR+LLM |
| 100,000 페이지 | ~$2,500 | ~$3,500 | OCR+LLM |
주의: 실제 비용은 사용 모델, 문서 복잡도, API 제공자에 따라 다름.
실무 체크리스트¶
OCR+LLM 선택 시¶
- [ ] 글자 단위 정확도가 필수인가?
- [ ] 문서 레이아웃이 정형화되어 있는가?
- [ ] 대량 배치 처리가 필요한가?
- [ ] 오프라인 처리가 필요한가?
- [ ] 비용 최적화가 중요한가?
- [ ] 테이블/양식 데이터 구조화가 필요한가?
VLM 선택 시¶
- [ ] 시각적 컨텍스트 이해가 필요한가?
- [ ] 차트/그래프 해석이 포함되는가?
- [ ] 문서 레이아웃이 복잡하거나 비정형인가?
- [ ] 빠른 프로토타이핑이 필요한가?
- [ ] 손글씨나 비정형 텍스트가 포함되는가?
- [ ] 여러 시각 요소 간 관계 파악이 필요한가?
주요 OCR 서비스 비교¶
| 서비스 | 강점 | 약점 | 가격대 |
|---|---|---|---|
| Google Document AI | 레이아웃 분석, 테이블 | 비용 | 높음 |
| AWS Textract | 양식, 테이블 | 복잡한 레이아웃 | 중간 |
| Azure Form Recognizer | 맞춤 모델 | 초기 설정 | 중간 |
| Tesseract | 무료, 오프라인 | 정확도 | 무료 |
| PaddleOCR | 다국어, 오프라인 | 영어 성능 | 무료 |
| EasyOCR | 사용 편의 | 속도 | 무료 |
주요 VLM 비교 (문서 이해)¶
| 모델 | 문서 이해 | 차트 분석 | 테이블 추출 | API 비용 |
|---|---|---|---|---|
| GPT-4V | 최상 | 최상 | 좋음 | 높음 |
| Claude 3 Opus | 최상 | 최상 | 좋음 | 높음 |
| Gemini Pro Vision | 좋음 | 좋음 | 보통 | 중간 |
| Qwen-VL | 좋음 | 좋음 | 좋음 | 낮음 |
| LLaVA | 보통 | 보통 | 보통 | 무료 |