콘텐츠로 이동
Data Prep
상세

OCR+LLM vs VLM: 실무 판단 가이드

문서 이해 작업에서 전통적인 OCR+LLM 파이프라인과 VLM 중 어느 것을 선택해야 하는지 판단하는 기준.

두 접근법 비교

OCR + LLM 파이프라인

ocr-vs-vlm diagram 1

구성 요소: - OCR 엔진: Tesseract, EasyOCR, PaddleOCR, Google Document AI, AWS Textract - 후처리: 레이아웃 분석, 테이블 구조화 - LLM: GPT-4, Claude, 로컬 LLM

VLM (End-to-End)

ocr-vs-vlm diagram 2

모델: GPT-4V, Claude 3, Gemini Pro Vision, Qwen-VL, LLaVA

판단 기준 매트릭스

기준 OCR+LLM 유리 VLM 유리
텍스트 밀도 텍스트 위주 문서 혼합 콘텐츠
레이아웃 복잡도 단순, 정형화 복잡, 비정형
시각적 컨텍스트 불필요 필수
정확도 요구 글자 단위 정확도 의미 이해
처리량 대량 배치 소량, 실시간
비용 민감도 높음 낮음
오프라인 요구 필요 불필요

상세 분석

1. 문서 유형별 권장

OCR+LLM이 적합한 경우

순수 텍스트 문서:

+----------------------------------+
|  계약서 제1조 (목적)              |
|  본 계약은 다음의 목적으로...      |
|                                  |
|  제2조 (기간)                    |
|  계약기간은 2024년 1월 1일부터... |
+----------------------------------+

  • 계약서, 법률 문서
  • 텍스트 위주 보고서
  • 기사, 논문 본문
  • 정형화된 양식

장점: - 글자 단위 정확도 높음 - 처리 비용 낮음 - 오프라인 처리 가능 - 대량 배치 효율적

VLM이 적합한 경우

시각적 컨텍스트가 중요한 문서: ocr-vs-vlm diagram 3

  • 인포그래픽
  • 프레젠테이션 슬라이드
  • 복잡한 차트/그래프
  • 손글씨 혼합 문서
  • 자유 형식 메모

장점: - 레이아웃 전체 이해 - 시각적 관계 파악 - 비정형 문서 처리 - 단일 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: 모든 셀 정확히 추출 어려움
"""

실무 의사결정 플로우차트

ocr-vs-vlm diagram 4

하이브리드 접근법

실무에서는 두 방식을 결합하는 것이 효과적일 수 있음.

패턴 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 보통 보통 보통 무료

참고 자료