스캔이 문서가 아닌 이유
요약
스캔된 문서가 단순한 OCR을 넘어 실제 데이터 구조를 복원하기 어려운 이유를 분석합니다. 특히 수치 데이터가 포함된 표(table)에서 발생하는 OCR의 '그럴듯한 오류'와 구조적 결함의 위험성을 경고합니다.
핵심 포인트
- OCR은 픽셀을 문자로 변환할 뿐, 문서의 논리적 구조를 재구성하지 못함
- OCR 오류는 무작위가 아니라 그럴듯한 문자로 대체되어 식별이 어려움
- 표 데이터에서 열 드리프트, 페이지 분할, 셀 병합 오류는 치명적임
- 수치 데이터는 산문과 달리 문맥적 중복성이 없어 오류에 매우 취약함
이전 글에서 저는 PDF가 글리프 (glyphs)가 위치한 곳은 유지하지만, 그것들이 무엇을 의미했는지는 버린다고 주장했습니다. 스캔은 더 어려운 사례인데, 스캔에는 글리프 (glyphs)조차 없기 때문입니다. 스캔에는 픽셀 (pixels)만 있습니다. 그 외의 모든 것은 추측하는 소프트웨어에 의해 재구성되며, 이 추측 능력은 예전보다 훨씬 좋아졌습니다. 그리고 바로 그 점이 스캔을 위험하게 만듭니다.
23년 동안 과학 서적을 편집하며 저는 표 (table)가 실제로 무엇인지 배웠습니다. 표는 행과 열의 그림이 아닙니다. 그것은 관계의 그리드 (grid)입니다. 이 숫자는 이 행 레이블 (row label)과 이 열 헤더 (column header)에 속하며, 어느 하나라도 분리되면 아무런 의미도 갖지 못합니다. 출판사들은 이미지가 형태로 들어온 표를 수작업으로 다시 만드는데, 이는 정직한 지름길이 없기 때문입니다.
이것이 이 포스트의 핵심 논지입니다. OCR (광학 문자 인식)은 픽셀 (pixels)을 문자로 변환합니다. 하지만 페이지를 다시 문서로 변환하는 것은 아닙니다.
OCR 오류는 무작위가 아니며, 그것이 문제입니다
만약 OCR이 소음이 섞인 방식으로 실패한다면, 이는 이미 해결된 문제일 것입니다. 쓰레기 같은 결과가 보일 것이고, 당신은 그것을 알 수 있을 테니까요.
하지만 OCR은 그런 방식으로 실패하지 않습니다. 그들은 그럴듯함 (plausibility)을 향해 실패합니다. 6이 8이 됩니다. 1이 7이 됩니다. 5가 S가 됩니다. 쉼표가 마침표가 되기도 하는데, 이는 유럽의 금융 문서에서 1.234를 1,244로 바꾸거나 그 반대로 바꾸기도 합니다. 엔진은 모양을 바탕으로 가장 가능성 높은 문자를 선택하며, 가장 가능성 높은 문자는 거의 항상 실제 존재하는 문자입니다.
산문 (prose)에서는 이것이 견딜 만합니다. 글자 하나가 틀린 문장을 읽더라도 당신의 뇌는 멈추지 않고 그것을 교정합니다. 이것이 OCR이 매우 정확하게 느껴지는 이유입니다. 당신은 스스로가 오류 교정 역할을 수행하는 텍스트를 통해 OCR을 테스트하고 있는 것입니다.
수치 표 (table of figures)에는 그러한 중복성 (redundancy)이 없습니다. 모든 숫자는 하중을 견디는 역할을 합니다. 주변 문맥 중 그 무엇도 여백이 8.2가 아니라 6.2여야 한다고 알려주지 않습니다. 틀린 숫자는 맞는 숫자만큼이나 읽기 쉽고, 동일한 신뢰도를 가지며, 똑같이 사실처럼 보입니다.
스캔된 표가 실제로 망가지는 지점
네 가지 실패 모드 (failure modes)가 있으며, 저는 실제 문서에서 이 네 가지를 모두 목격했습니다.
열 드리프트 (Column drift). 값이 원래 있어야 할 위치에서 왼쪽이나 오른쪽으로 한 열씩 밀려나는 현상입니다. 2024년의 매출이 이제 2023년 아래에 위치하게 됩니다. 동일한 숫자들이 존재하기 때문에 합계는 여전히 맞을 수 있지만, 단지 잘못된 기간에 할당되었을 뿐입니다. 누군가가 이를 바탕으로 성장률 (growth rate)을 계산하기 전까지는 아무것도 잘못된 것처럼 보이지 않습니다.
페이지를 가로질러 이어지는 표 (Tables that continue across pages). 인쇄된 책에서는 헤더를 반복하고 연속 표시 규칙을 추가하여 이를 처리합니다. 하지만 OCR은 두 개의 별개 페이지에서 두 개의 별개 덩어리 (blobs)로 인식하며, 명시적으로 이를 결합해 주는 장치가 없다면 표의 절반이 조용히 사라지거나 헤더가 전혀 없는 고립된 표 (orphan table)가 되어 버립니다.
병합 및 확장된 셀 (Merged and spanning cells). 세 개의 열을 가로지르는 헤더나 두 개의 행을 차지하는 행 레이블은 순수하게 기하학적 구조를 통해 표현되는 관계입니다. 이를 평면화 (flatten)하면 그 관계는 사라집니다. 세 개의 하위 열 모두에 속했던 값은 이제 그중 하나에만 속하거나, 혹은 어느 곳에도 속하지 않게 됩니다.
문자처럼 읽히는 구분선 (Rule lines read as characters). 가는 수직 구분선이 숫자 1이나 파이프 (|) 기호로 인식됩니다. 수평 구분선은 파서 (parser)가 콘텐츠로 취급하는 대시 (-) 또는 언더스코어 (_) 행이 됩니다. 이는 직접 눈으로 볼 때는 쉽게 발견할 수 있지만, 보지 않을 때는 발견하는 것이 불가능합니다.
신뢰도 점수 (Confidence score)가 당신을 구원하지 못할 것입니다
대부분의 OCR 엔진은 신뢰도 값 (confidence value)을 반환하며, 이를 기준으로 필터링하고 싶은 유혹에 빠지기 쉽습니다. 특정 임계값 (threshold) 미만이면 플래그를 표시하고, 그 이상이면 신뢰하는 방식입니다.
하지만 이는 검색 (retrieval)에서 작동하지 않는 것과 같은 이유로 효과가 없습니다. 신뢰도는 문자 단위 (per-character)이며, 엔진이 본 모양이 얼마나 확실한지를 측정할 뿐, 결과물인 문서가 논리적으로 말이 되는지를 측정하는 것이 아니기 때문입니다. 실제로는 6이었지만 아주 선명하고 깨끗하게 인식된 높은 신뢰도의 8은 훌륭한 점수를 받습니다. 반면 약간 번졌지만 정확하게 읽힌 숫자는 더 낮은 점수를 받습니다. 즉, 점수는 당신이 실제로 신경 써야 하는 요소와는 직교 (orthogonal)합니다.
저는 다른 맥락에서 이 문제의 한 버전을 측정하여 그 결과를 발표했습니다. 검색 유사도 점수(retrieval similarity scores)는 답변 가능한 질문과 답변 불가능한 질문을 구분할 수 없었는데, 두 집단이 서로 중첩되었기 때문입니다. 여기서 얻는 교훈도 동일합니다. 정답을 얻기 전에 계산된 그 어떤 것도 정답이 맞는지 알려줄 수 없습니다. 검증은 반드시 정답을 얻은 후, 소스(source)를 대상으로 이루어져야 합니다.
대신 해야 할 일
이 습관은 제가 만드는 다른 모든 것을 지배하는 습관과 같습니다. 스캔본을 문서 그 자체가 아니라, 문서의 **증거 (evidence of)**로 취급하십시오.
페이지 이미지는 항상 보관하십시오. 만약 도표(figure)에 대해 의문이 제기된다면, 그 답은 로그 라인(log line)이 아니라 그것이 추출된 페이지의 사진이어야 합니다. 이것이 스캔된 문서 버전의 인용(citation)입니다.
표(table)는 표로서 재구축하고, 전체 파이프라인(pipeline) 동안 그 상태를 유지하십시오. 산문(prose)으로 평탄화된 표는 표가 존재했던 유일한 이유인 행과 열의 관계를 상실하게 됩니다.
모든 숫자는 소스에서 찾아낼 수 있어야 합니다. 의역되거나 대략적으로 존재해서는 안 됩니다. 찾아낼 수 있어야 합니다. 만약 해당 숫자가 출처라고 주장하는 페이지에서 글자 그대로(verbatim) 위치를 찾을 수 없다면, 반복해서 적지 마십시오.
입력이 스캔본이었다면 이를 명시하십시오. 아무도 열어보지 않는 로그가 아니라, 독자가 볼 수 있는 출력물에 이를 포함하십시오. 깨끗한 디지털 생성 PDF(born-digital PDFs)로 만든 보고서와 복사된 팩스로 만든 보고서는 서로 다른 수준의 신뢰를 받을 자격이 있으며, 독자는 자신이 무엇을 읽고 있는지 알 권리가 있습니다.
숫자를 조용히 수정하지 마십시오. 무언가 잘못되어 보인다면, 이를 표시(flag)하고 소스를 보여주십시오. 보이지 않게 수정하는 것은 다음 사람이 당신의 추측을 사실로 물려받게 된다는 것을 의미합니다.
출판 외 분야에서 이것이 중요한 이유
출판업자들은 이미 이 모든 것을 알고 있습니다. 그들은 이를 위해 예산을 책정하고, 표를 수작업으로 재구축하는 인력을 고용하며, 스캔된 원고를 편의가 아닌 비용으로 취급합니다.
피해를 입는 사람들은 PDF가 곧 PDF라고 가정하는 사람들입니다. 출력물을 스캔한 경영 보고서 (management accounts)를 읽고 있는 인수자, 사진으로 찍은 명세서 세트를 바탕으로 작업하는 대출 기관, 그리고 가장 중요한 숫자가 숫자의 이미지 형태로 전달된 모든 사람이 그 대상입니다.
당신이 받은 문서와 당신의 소프트웨어가 읽은 문서가 항상 같은 문서는 아닙니다. 디지털로 생성된 파일 (born-digital file)의 경우 그 격차는 작습니다. 하지만 스캔된 문서의 경우, 존재하지도 않았던 숫자를 바탕으로 의사결정이 내려질 수 있습니다.
출처를 인용하거나, 그렇지 않다면 주장을 철회하십시오. 그리고 출처가 페이지를 촬영한 사진이었다면, 이를 분명하게 밝히십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기