13.6.1 OCR 전처리: 노이즈 제거 및 텍스트 레이아웃 정보(Bounding Box) 보존의 중요성
최근 GPT-4o나 Claude 3 Opus와 같은 최첨단 멀티모달(Multimodal) Vision LLM은, 별도의 복잡한 텍스트 파싱 처리 없이 이미지 파일(PNG, JPEG) 그 자체를 입력받아 픽셀 수준에서 텍스트를 추론해 내는 경이로운 시각적 이해 능력을 지니고 있다.
그러나 이 마법 같은 ‘종단 간(End-to-End)’ 비전 추론 능력에만 기업 데이터 파이프라인의 생사를 전적으로 백지위임하는 것은, 엔터프라이즈 환경 시스템 아키텍처 관점에서 매우 무모하고 위험한 도박이다.
스캔된 재무 문서 이미지 위에 커피 자국이나 펀치 구멍이 뚫려 있거나 거대한 워터마크가 진하게 찍혀 있는 경우, 혹은 지류 영수증이 구겨져 텍스트 그리드가 등고선처럼 심하게 휘어져 있는 경우, 딥러닝 기반의 Vision LLM은 순식간에 폰트 지오메트리(Font Geometry)의 문맥을 상실하고 시각적 어텐션 붕괴(Visual Attention Collapse) 현상을 일으킨다. 그리고는 문서에 존재하지도 않는 엉뚱한 숫자를 창조해 내는 치명적인 **‘공간 환각(Spatial Hallucination)’**의 늪으로 빠지게 된다.
이를 근본적으로 방어하기 위해 파이프라인의 가장 앞단(Upstream)에는, 고전적이지만 극도로 결정론적이고 안정적인 OCR(Optical Character Recognition, 광학 문자 판독) 전처리 엔진 모듈이 LLM의 눈을 대신하여 선제적으로 등판해야만 한다.
1. 1차원 텍스트 직렬화(Serialization)가 불러오는 파괴적 한계
과거 초창기 파이프라인에서는 Tesseract 같은 단방향 OCR 엔진을 돌려 얻어낸 텍스트 결괏값들을 단순히 \n (줄바꿈) 문자로 무식하게 엮어 1차원의 긴 끈적한 문자열(String)로 뭉개버린 뒤, 이를 LLM 텍스트 프롬프트 안에 통째로 생고기처럼 던져 넣는 방식을 주로 사용했다.
# 기하학적 문맥이 완전히 파괴된 1차원 OCR 추출 텍스트 예시 페이로드
Apple Store
Date: 2023-01-01
Total Invoice Amount
Tax
$100.00
$10.00
$110.00
이렇게 텍스트 글자의 배열 순서(1차원)만 LLM에게 전달하게 되면 치명적인 문제가 발생한다. 파라미터 지능이 제아무리 높은 LLM일지라도, 바닥에 뒹구는 저 $100.00와 $110.00 중 도대체 어떤 숫자가 Total Invoice Amount이고 어떤 숫자가 Tax 인지 직관적으로 확신하여 매핑할 수 있는 기하학적 근거가 없기 때문이다.
원래의 2D 종이 평면상에서는 “Total Invoice Amount“라는 영문 텍스트 ’바로 우측 옆’에 $110.00이 수평으로 가지런히 적혀 있었지만, 텍스트가 1차원 배열로 직렬화(Serialization) 되는 그 물리적 변환의 순간, 문서 디자인의 핵심인 **‘공간 기하학적(Spatial Geometric) 문맥’**이 영구적으로 파괴되어 버렸기 때문이다.
이런 개판인 상태로 프롬프트를 주입하면 LLM은 반드시 키(Key)와 값(Value)을 엉뚱하게 엮어버리는 논리적 환각을 반복적으로 일으킨다.
2. Bounding Box 좌표 보존을 통한 2D 공간 정보의 입체적 주입
따라서 방어적 전처리(Pre-processing) 아키텍처의 핵심은, 단순히 이미지 픽셀의 필터링 노이즈를 제거하여 글자만 예쁘게 뽑아내는 것을 아득히 넘어서야 한다.
이미지 내의 각 단어가 문서 2D 평면상 픽셀 그리드 어디에 정확히 위치하고 있었는지(X, Y 좌표)를 나타내는 바운딩 박스(Bounding Box, 혹은 Polygon) 기하학 정보를, 텍스트와 함께 묶어서 LLM에게 유실 없이 입체적으로 살려서 전달해 주어야 한다.
최신 Azure Document Intelligence나 AWS Textract 같은 고성능 클라우드 비전 OCR 엔진은 추출 텍스트와 함께 그 폴리곤 좌표를 세밀하게 JSON으로 반환한다. 우리는 이 형태를 유지하여 LLM 프롬프트 안에 구조화된 마크다운 표나 XML 형태로 기하학적 정보를 강제로 주입해 주는 전처리를 수행해야 한다.
<!-- 파이프라인 전처리기를 통해 2D 공간 정보가 복원 주입된 XML 프롬프트 페이로드 -->
<document_layout>
<row y_pos="150" y_tolerance="5">
<!-- 동일한 Y축(150) 선상에 핵심 Key와 Value가 놓여있음을 모델에게 공간적으로 암시함 -->
<text x_start="10" x_end="120">Total Invoice Amount:</text>
<text x_start="300" x_end="350">$110.00</text>
</row>
<row y_pos="170" y_tolerance="5">
<text x_start="10" x_end="50">Tax:</text>
<text x_start="300" x_end="350">$10.00</text>
</row>
</document_layout>
이렇게 영리하게 전처리된 ’구조화 텍스트 페이로드’를 입력 프롬프트로 쏘아주게 되면, LLM 내부의 거대한 매트릭스 어텐션 헤드(Attention Head)는 y_pos="150"이라는 동일한 문서 수평선(Horizon) 벡터 위에 고스란히 놓인 Total Invoice Amount와 $110.00 간의 강력한 의미론적 유대(Semantic Tie)를 찰나의 순간에 즉각적이고 수학적으로 계산해 낸다.
결과적으로, 애초에 LLM이 필드의 키와 값을 착각하여 잘못 엮어 추출하는 악명 높은 ‘구문-의미 매핑 환각 에러’ 자체가 업스트림 모델 연산 단에서 원천적으로 강력하게 봉쇄된다. 이는 곧 파이프라인 후방 하류(Downstream)에서 고생하며 버티고 있는 우리의 ’2단계 산술 검증 오라클(13.4절)’로 더러운 쓰레기 값이 날아가는 빈도를 극적으로 0에 가깝게 낮추어 주는 최전방의 완벽한 억제선(Deterrence Line)으로 기능하게 되는 것이다.