작성자가 쓴 것, 에이전트가 읽는 것: 문서 수집 단계의 조용한 서식 정보 손실
What the Author Wrote, What the Agent Reads: Silent Cue Loss in Enterprise Document Ingestion
TL;DR Highlight
docx 변환 시 빨간 글자·형광펜을 살렸더니 중요 요구사항 복원 F1이 0.150→0.690으로 올랐다
Who Should Read
Word·PDF 정책 문서를 RAG나 에이전트에 넣는데 중요 조항을 자꾸 놓치거나 엉뚱하게 짚어서 고민인 백엔드 개발자
Core Mechanics
- 변환기는 색 정보를 조용히 버린다
- docling, plain text 등 주요 변환기는 텍스트·표는 살려도 글자 색과 형광펜을 버린다.
- 파이프라인은 정상 성공으로 보이고 모니터링에도 안 걸린다.
- 에이전트는 모르면 지어낸다
- 작성자가 표시하지 않은 요구사항을 중요하다고 답하는 오탐률이 docling 0.043으로 이 논문 방식(0.011)의 약 4배다.
- 일부 모델은 반대로 recall 0.09, precision 0.96으로 거의 답을 안 하기도 한다.
- 손실은 형광펜과 글자색에 몰려 있다
- 한 가지 서식만 빼는 실험에서 형광펜 +0.302, 글자색 +0.262만큼 F1이 떨어졌다.
- 굵게·기울임·고정폭·취소선은 각각 0±0.003으로 영향이 없었다.
- 굵게가 안 먹히는 건 너무 흔해서다
- 한 문서에 굵게 표시가 1000개가 넘기도 해서 의도를 드러내는 신호가 못 된다.
- 색·형광펜은 드물고 의도적이라 신호가 된다.
- 서식을 살리는 것만으론 부족하고 의미를 붙여야 한다
- [COLOR:#FF0000]만 보여주는 것보다 '치명적 경고'라고 역할을 붙이면 macro F1이 +0.085 더 올랐다.
- 다만 p 0.049로 경계선이고 Sonnet 5 등 시도가 드문 모델 둘에선 효과가 없었다.
- 비용은 토큰 약 2배다
- 서식 복원은 코드만으로 되고 LLM 호출 비용은 없다.
- 대신 plain text 대비 토큰이 약 2배라 컨텍스트 예산과 정확도를 맞바꾸는 선택이다.
Evidence
- 서식 무시 변환은 F1이 붕괴했다
- 실제 정책 문서 76개에서 micro F1은 이 논문 방식 0.690, docx2python 0.586, docling 0.150, plain text 0.075였다.
- 모델 6종(Claude 5종, GPT-5.6)에서 plain text는 모두 0.007~0.075였다.
- 한 서식씩 빼는 실험으로 원인을 좁혔다
- 글자색을 빼면 색 표시 문서의 micro F1이 0.699→0.214로, 형광펜을 빼면 형광펜 문서가 0.659→0.128로 떨어졌다.
- 반대쪽 서식 문서는 최대 0.011만 움직였다.
- 의미 부여 효과를 사전 등록 실험으로 확인했다
- 79개 문서, 6회 반복에서 typed 0.667, untyped 0.597, docx2python 0.570이었다.
- typed가 untyped 대비 +0.085(pHolm 0.049), docx2python 대비 +0.107(pHolm 0.014)이었다.
- Microsoft OCB와 전체 파이프라인에서도 앞섰다
- Word File-Fidelity 326문항 평균은 이 방식 0.959, docx2python 0.810, docling 0.720, plain 0.634였다.
- 동일 파이프라인 68문서에서 micro F1은 0.503으로 docx2python 0.258, docling 0.084보다 높았다.
- 실제 문서에 흔한 문제다
- 6,462개 docx 중 32.8%가 의도적 빨간 글자나 형광펜을 갖고 있었다.
- 10.3%는 의무 문장에 표시가 있었다.
How to Apply
- 내 문서에서 색·형광펜 비율부터 세기
- 오늘 python-docx로 코퍼스의 run.font.color와 highlight_color 유무를 세는 스크립트를 돌려라.
- 빨간 글자나 형광펜이 의무 문장에 얼마나 있는지 확인해 대응 우선순위를 정하라.
- 변환 결과에 서식 태그를 남기기
- docx를 변환할 때 색·형광펜 구간을 [COLOR:..]나 [HIGHLIGHT:..] 태그로 보존하라.
- 굵게·기울임·취소선은 마크다운으로 두고, 색과 형광펜은 별도 태그로 직렬화하라.
- 서식 태그에 의미 역할을 붙이기
- 빨간 글자나 빨간 형광펜은 CRITICAL_WARNING, 그 외 형광펜은 WARNING, 취소선은 DEPRECATED 같은 역할 토큰으로 변환하라.
- 굵게 같은 흔한 서식 역할은 빼고 중요 신호만 남겨라.
- 수집 단계에 단언문 넣기
- 서식을 찾았다면 해당 텍스트 구간도 찾았는지 확인하는 assert를 파서에 넣어라.
- 출력 모니터링으로는 이 손실이 안 잡히므로 수집 단계에서 검사하라.
Try It
# Claude나 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: 서식 태그 문서를 읽혀 보는 프롬프트)
아래 문서에서 [COLOR:..]와 [HIGHLIGHT:..] 태그는 원문 작성자가 의도적으로 강조한 표시다.
빨간색([COLOR:#FF0000])은 CRITICAL_WARNING, 그 외 형광펜은 WARNING, ~~취소선~~은 DEPRECATED(더 이상 유효하지 않음)로 해석하라.
굵게 표시는 강조 신호로 보지 마라.
{{문서: 서식을 태그로 변환한 텍스트}}
질문: 이 문서에서 작성자가 특별히 주의하라고 표시한 요구사항만 모두 나열하라.
표시되지 않은 요구사항은 포함하지 마라.
이어서 해 볼 것: 같은 문서의 태그를 모두 지운 plain text 버전으로 같은 질문을 하고 결과를 비교해 보라.Terminology
관련 논문
멀티모달 리랭킹은 System One 결정이다: 범용 VLM에 객관식 한 번으로 재정렬하기
VLM에 후보 16개 객관식 질문 한 번으로 리랭킹, 2B 전용 리랭커를 앞섰다
트랜스포머는 '기억 저장소'에서 처음부터 만들어 낼 수 있었다
선형층→MLP→self-attention을 기억 저장소로 보면 용량이 64→약 2,700→100만 이상
400년치 고문서에 AI를 돌렸더니 잊힌 운석·코뿔소·화산 폭발이 나왔다
임베딩 검색과 싼 필터 모델로 400년 고문서를 뒤져 미기록 사건 발굴
EmbeddingGemma 2: 텍스트·이미지·오디오·비디오를 한 벡터 공간에 넣는 오픈 경량 임베딩 모델
740M 오픈 모델 하나로 텍스트·이미지·오디오·비디오를 같은 벡터 공간에서 검색
RAG-NAROK: 출처를 직접 반박하는 문서로 RAG 지식베이스를 오염시키는 공격
검색된 출처를 겨냥해 반박문을 심었더니 1위 검색과 탐지 회피가 높아졌다
텍스트냐 이미지냐 둘 다냐: 멀티모달 문서 QA 입력 방식 비교
문서 QA에서 페이지 이미지가 정확도는 높지만 느려서, 질문별 라우터로 지연 30% 줄였다
MS 임원이 AI 스크래핑을 '인류 역사상 최대의 노동 도둑질'이라 불렀다는 NYT 소송 공개 문서
NYT 소송 공개 문서에서 MS·OpenAI 내부의 스크래핑 인식이 드러났다
임베딩의 보편적 기하 구조 활용: 짝 데이터 없이 임베딩 공간 간 변환
짝 데이터 없이 임베딩을 다른 모델 공간으로 옮겼고, 벡터 DB 보안 위험이 드러났다
Original Abstract (Expand)
Enterprise agents act on documents. Before an agent can follow a policy, answer a compliance question or file a ticket, some ingestion layer must turn a Word file or PDF into tokens - and that layer is where an agent deployed in the wild silently loses information. We show that one layer is lost by every mainstream converter - the meaning an author encodes in how text looks - and that the loss makes agents confidently wrong rather than visibly incomplete. We build a task from 76 real policy documents: recover the requirements the author singled out, scored against the file's own OOXML properties by a deterministic matcher with no LLM judge. Formatting-blind ingestion collapses from micro F1 0.690 to 0.150 (docling) and 0.075 (plain text), a gap that replicates across six answering models from two vendors - five Claude models spanning the Opus, Sonnet and Haiku tiers, and OpenAI's GPT-5.6. An agent that cannot see the cue guesses, and docling's false-positive rate on requirements the author did not flag is four times ours. A span-level leave-one-out localises the loss to two cues - highlight (+0.302) and colour (+0.262), both Holm-adjusted p < 1e-4 - while bold, italic, monospace and strikethrough each sit within +/-0.003 of zero. The same asymmetry appears in PDF. Colour is also the cue no mainstream converter preserves and no parsing benchmark scores, and it is common: 32.8% of 6,460 documents carry a deliberate colour or highlight, 10.3% on an obligation. A pre-registered test shows that typing a cue for the agent adds +0.085 beyond merely preserving it (Holm-adjusted p = 0.049). We validate the labels against rendered page images through an independent modality (kappa = 0.72) and bound what wording alone can achieve (AUC 0.664). For agent builders the practical finding is that ingestion, not reasoning, is where this reliability is won or lost, and that the fix is cheap and measurable.