70권의 과학 서적이 알려준 AI가 PDF를 잘못 읽는 이유
요약
PDF 문서가 가진 구조적 정보의 부재가 AI의 문서 이해를 방해하는 근본적인 원인을 설명합니다. PDF는 의미론적 구조 대신 좌표 기반의 글리프 배치 정보만 유지하기 때문에, AI가 문서를 읽을 때 발생하는 추측과 오류의 문제를 다룹니다.
핵심 포인트
- PDF는 문서의 의미론적 구조를 버리고 시각적 좌표 정보만 유지함
- 조판 과정에서 부여된 위치와 스타일은 중요한 의미론적 정보를 포함함
- AI는 PDF를 읽을 때 구조를 재구성하기 위해 끊임없이 추측해야 함
- LaTeX와 달리 PDF는 캡션, 각주, 장 제목 등의 명시적 정보를 제공하지 않음
제 이름은 70권 이상의 과학 서적 앞부분(front matter)에 인쇄되어 있으며, 저는 23년 동안 원고를 조판된 페이지로 바꾸는 일을 해왔습니다. 지금은 생업으로 문서를 읽는 AI 시스템을 구축하고 있습니다. 이 두 사실은 서로 관련이 없어 보입니다. 하지만 이들은 정반대의 관점에서 바라본 동일한 문제이며, 첫 번째 사실이 두 번째 과정에서 발생하는 문제의 대부분을 설명해 줍니다.
요약하자면 이렇습니다. 조판된 문서는 단순히 단어들의 집합(bag of words)이 아닙니다. 그것은 하나의 구조이며, PDF가 되는 순간 그 구조의 거의 대부분이 버려집니다. AI가 해당 PDF를 읽을 때, 그것은 문서를 읽는 것이 아닙니다. 문서가 페이지 위에 남긴 그림자를 읽는 것입니다.
조판사가 실제로 하는 일
과학 서적을 설정하는 것은 단순히 장식을 하는 것이 아닙니다. 그것은 위치(position)에 의미를 인코딩(encoding)하는 행위입니다.
러닝 헤드(running head)는 단 한 단어도 읽지 않고도 당신이 어느 장에 있는지 알려줍니다. 적절한 위치로 이동하는 플로트(float), 표(table) 또는 그림(figure)은 그것을 참조했던 문단으로부터 분리되었기 때문에 정확히 캡션(caption)을 가집니다. 앞부분(front matter)은 반표제(half title), 표제(title), 저작권(copyright), 헌사(dedication), 목차(contents), 서문(preface)과 같이 정의된 순서를 따릅니다. 표시된 방정식(displayed equation)에 번호가 매겨지는 이유는 나중에 무언가가 그것을 다시 참조할 것이기 때문입니다. 각주(footnote)는 페이지 하단에 위치하고 인용(citation)은 참고문헌(bibliography)에 위치하며, 이들은 서로 다른 일을 수행하는 서로 다른 객체(object)입니다.
이 중 어느 것도 단순한 스타일링(styling)이 아닙니다. 이러한 모든 결정은 의미론적(semantic)입니다. 조판사(compositor)의 기술은 두 줄의 간격과 더 작은 포인트 크기가 '이것은 논증이 아니라 여담이다'라는 것을 의미하며, 독자가 별도의 설명 없이도 이를 흡수할 것이라는 점을 아는 것입니다.
LaTeX에서 소스(source)는 이 모든 것을 명시적으로 알고 있습니다. \chapter, \caption, \label, \cite가 존재합니다. 구조는 외형에 의해 암시되는 것이 아닙니다. 구조는 기록되어 있으며, 외형은 그로부터 파생됩니다.
PDF가 유지하는 것
PDF는 외형을 유지하고 소스(source)를 버립니다.
PDF는 좌표에 글리프(glyph)를 배치하기 위한 일련의 지침 세트입니다. '이 글자를 이 폰트로, 이 크기로, 이 x와 y 좌표에 배치하라'는 식입니다. 본질적으로 그것이 PDF의 전부입니다. 특정 글리프의 연속이 장 제목(chapter title)이었는지, 캡션(caption)이었는지, 혹은 각주(footnote)였는지에 대한 정보는 어디에도 기록되어 있지 않습니다. 인간은 레이아웃(layout)을 유창하게 읽을 수 있기 때문에 이를 추론할 수 있는 것이지, 명시되어 있는 것이 아닙니다.
따라서 시스템이 해당 PDF를 입력(ingest)할 때, 조판사(compositor)가 원래 확실하게 알고 있었던 모든 것을 추측을 통해 재구성해야 합니다. 이 더 큰 텍스트는 제목(heading)인가, 아니면 강조된 문장인가? 이 2단 구성(two-column) 페이지는 왼쪽 열을 읽고 오른쪽 열로 넘어가야 하는가, 아니면 가로로 읽어야 하는가? 이 숫자는 각주 표시(footnote marker)인가, 아니면 지수(exponent)인가? 이 표(table)에는 헤더 행(header row)이 있는가, 아니면 첫 번째 행이 단순히 굵게 표시된 것뿐인가?
이러한 추측 하나하나가 문서가 조용히 다른 문서로 변질되는 지점이 됩니다.
내가 목격하는 실패 사례들, 그리고 그것이 구조적인 이유
세 가지 유형이 지속적으로 나타나며, 이 중 어느 것도 모델(model)의 문제는 아닙니다.
읽기 순서 (Reading order). 2단 구성(two-column layouts)이 전형적인 사례입니다. 열의 흐름(column flow) 대신 좌표 스트림(coordinate stream)을 따르는 추출(extraction) 방식은 두 열을 한 줄씩 번갈아 가며 섞어버립니다. 그 결과물은 문법적으로는 맞고 유창하지만 의미는 없는 헛소리(nonsense)가 됩니다. 오류는 발생하지 않습니다. 텍스트는 모두 존재합니다. 단지 한 번도 존재한 적 없는 순서로 배치되어 있을 뿐입니다.
고립된 캡션과 플로트 (Orphaned captions and floats). 플로트(float)는 이동하기 때문에, 표(table)가 그것을 설명하는 문장으로부터 몇 페이지나 떨어진 곳에 인쇄될 수 있습니다. 이를 평면화(flatten)하면 표는 맥락(context) 없이 나타나거나, 더 나아가 페이지에서 우연히 인접해 있던 어떤 단락에 달라붙게 됩니다. 하나의 주장을 뒷받침하는 그림(figure)이 조용히 다른 주장 옆에 붙어버리는 식입니다.
본문에 포함되어 버린 각주 (Footnotes folded into the body). 각주는 일종의 자격 요건(qualification)이며, 매우 빈번하게 바로 위의 주장을 제한하는 정확한 제한 사항 역할을 합니다. 이를 본문 텍스트(running text)와 병합하면, 저자가 의도적으로 유보(hedge)했던 내용을 단정적으로 주장하는 문장이 만들어집니다.
이 점에 대해 정확히 짚고 넘어가고 싶습니다. 이것들은 환각(hallucination)이 아닙니다. 모델은 주어진 것을 충실하게 보고하고 있는 것입니다. 다만, 모델에게 주어진 것이 뒤섞인 문서(scrambled document)였을 뿐입니다.
스캔(Scans)은 또 다른 문제입니다
위의 모든 내용은 글리프(glyphs)가 실제 문자인 '본 디지털(born-digital)' PDF를 전제로 합니다. 스캔된 문서는 상황이 더 나쁩니다. 문자가 전혀 없고 오직 픽셀(pixels)만 존재하기 때문에, 무언가가 읽기 위해서는 OCR(광학 문자 인식)이 텍스트를 먼저 만들어내야 하기 때문입니다.
현재 OCR은 매우 뛰어납니다. 하지만 이 블록은 표(table)이고 저 블록은 단락(paragraph)이라고 결정하는 데에는 능숙하지 않으며, 14페이지가 13페이지에 있는 표의 연장선이라는 사실은 전혀 알지 못합니다. 실제로 스캔된 문서가 가장 큰 피해를 주는 부분은 표입니다. 잘못 읽힌 표에서 추출된 숫자는 올바른 표에서 추출된 숫자와 똑같이 권위 있게 보이기 때문입니다.
이것이 바로 "그냥 OCR을 돌리면 된다"는 말이 해결책이 될 수 없는 이유입니다. OCR은 픽셀을 문자로 변환할 뿐입니다. 페이지를 다시 문서(document)로 변환해 주는 것이 아닙니다.
이에 대한 나의 대응 방식
조판(typesetting) 작업에서 비롯되어 현재 제가 소프트웨어에 구축하고 있는 습관은 다음과 같습니다: 구조를 증거로 취급하고, 구조의 부재를 기록할 가치가 있는 사실로 취급하십시오.
구체적으로, 제가 상업 및 금융 문서를 읽기 위해 구축하는 시스템에서는 다음과 같이 처리합니다:
-
좌표 스트림(coordinate stream)을 신뢰하기보다 읽기 순서(reading order)를 의도적으로 재구성합니다. 먼저 열(column)을 감지한 다음, 흐름(flow)을 파악합니다.
-
전체 파이프라인(pipeline) 동안 표를 표로서 유지합니다. 산문(prose)으로 펼쳐진 표는 행 레이블(row label)과 그 값 사이의 관계를 잃어버리게 되며, 그 관계가 보통 표의 핵심 목적이기 때문입니다.
-
콘텐츠와 함께 위치 정보를 전달합니다. 추출된 모든 주장(claim)은 그것이 추출된 페이지 정보를 유지하여, 독자가 직접 가서 확인할 수 있도록 합니다. 이는 참고문헌(bibliography)의 인용(citation)과 동일한 원칙이며, 같은 이유로 존재합니다.
-
추적할 수 없는 것은 삭제합니다. 만약 어떤 수치가 원본 문서의 특정 위치와 연결될 수 없다면, 이를 반복하지 않습니다. 대신 플래그(flag)를 표시합니다. 누락된 숫자는 불편함을 주지만, 확신에 찬 잘못된 숫자는 허구에 기반한 결정을 내리게 만듭니다.
-
입력 품질이 낮았음을 명시합니다. 문서가 저품질 스캔본으로 들어왔다면, 이는 로그(log)에 묻어둘 것이 아니라 출력물에 포함되어야 합니다. 독자는 자신이 보고 있는 것을 어느 정도까지 신뢰해야 하는지 알 권리가 있습니다.
전달되는 부분
조판 (Typesetting)을 통해 제가 배운 것은, 문서가 의미하는 대부분은 그것이 어떻게 배열되어 있는지에 의해 전달되며, 이러한 배열은 기계적으로 재현하려고 시도하기 전까지는 눈에 보이지 않는다는 점입니다. 페이지에 구조를 '넣는' 데 보낸 23년의 시간은, 페이지로부터 구조를 다시 '꺼내는' 문제를 해결하는 데 있어 이례적으로 훌륭한 준비 과정이 되었습니다.
이 문제를 가장 뼈저리게 느끼는 사람들은 출판업자가 아닙니다. PDF로 전달된 백 페이지 분량의 문서로부터 결정을 내려야 하는 모든 이들입니다. 즉, 데이터 룸 (data room)을 읽는 인수자, 경영 회계 보고서를 읽는 대출 기관, 공시 서류를 읽는 분석가 등입니다. 그들이 받은 문서와 그들의 소프트웨어가 읽은 문서는 항상 같은 문서가 아니며, 그 과정 중 어느 곳에서도 이를 알려주지 않습니다.
그 간극이 바로 제가 지금의 방식으로 시스템을 구축하는 이유 전체입니다. 출처를 인용하거나 주장을 포기하십시오. 그리고 만약 출처 자체가 전달 과정에서 손상되었다면, 그것을 명확하게 말하십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기