AI 지식 베이스 PDF 파싱과 벡터 DB 데이터 품질

증상: RAG에 수천 개 PDF를 넣었는데 답변이 바닥글 저작권, 깨진 표, 만료된 부록을 인용한다—embedding 작업은 모두 성공.
근본 원인: 저품질 PDF는 PDF Parsing 단계에서 이미 깨지고, 더러운 청크가 Vector Database에 그대로 들어가며 검색 신뢰도는 오히려 올라간다.

2026년 7월 내부 Knowledge Base 팀의 2,400개 PDF를 감사한 결과, 골든 질문 인용 정확도가 78%에서 51%로 하락. top-3 히트의 63%에 반복 헤더나 OCR 노이즈가 포함됐다. 본문은 당시 구축한 오염 방지 파이프라인—파서 순위가 아니라 임베딩 전 게이트와 평가. 기준일 2026-08-07.

제공 내용: 지식 베이스를 구축·운영하는 엔지니어를 위한 탐색형 가이드—Quick Answer, 5가지 오염 패턴, 파서 선택표, 7단계 체크리스트.

Quick Answer: 리콜보다 먼저 더러운 데이터를 막기

상황먼저 할 일서두르지 말 것
첫 PDF 배치50건 샘플 Parsing 비교 + 추출률 게이트더 큰 embedding 모델로 교체
헤더/저작권 인용머리글·바닥글 제거 + 중복 행 dedup문서 더 추가
표 답변 환각표 별도 파싱 또는 HTML/Markdown 변환무분별한 chunk 축소
스캔 PDF 위주OCR 품질 점수 + 저점수는 수동 큐모든 파일에 PyPDF
대규모·정확도 하락source_id 배치 삭제 + 골든 회귀원인 없이 전체 재임베딩

Vector Database를 오염시키는 5가지 PDF 패턴

패턴증상검색 피해탐지 신호
반복 헤더/바닥글매 페이지 동일 문구일반 질의가 저작권에 히트청크 내 동일 문장 ≥3회
OCR 노이즈문자 혼동·끊긴 단어키워드·의미 불일치비사전 문자 >8%
깨진 표열 붕괴수치 환각구분자 없는 긴 숫자열
2단/각주 혼선단락 교차인용 불연속행 너비 급변
만료 부록폐지 정책맞지만 오래된 답mtime vs 버전 불일치

문자 수 ≠ 좋은 Knowledge Base. 최대 문자 파서가 레이아웃 인식보다 답변 가능률 11%p 낮음—노이즈도 내용으로 집계됨.

입고 게이트: embedding 전 차단

  1. 파일: 암호·0자·추출률 <15% → 거부/OCR.
  2. 페이지: 공백·이미지·근중복 → 스킵.
  3. 청크: token <30, 중복 >40% → 폐기.
  4. 업무: source_id 없음 → 쓰기 금지.

긴 컨텍스트는 깨끗한 ingest 대체 불가—Kimi K3 1M 컨텍스트와 RAG 경계.

PDF Parsing: 문자 수가 아니라 답변 가능률

시나리오권장장점주의
디지털 PDFPyMuPDF / pdfplumber빠름표 취약
복잡 레이아웃Unstructured / Docling블록 분류CPU/RAM
스캔클라우드 OCR정확도비용·프라이버시

실측(2026-07, 50 PDF): hit@3 레이아웃 74% vs pdfplumber 61%.

청킹: 바닥글 증폭 방지

  • 제목·section 단위 분할, 긴 절만 슬라이딩 윈도우.
  • 헤더 중복 시 overlap 10–15%.
  • 표는 content_type=table 분리.

롤백 가능한 Knowledge Base 메타데이터

source_id, ingest_batch, parser_version, content_hash, effective_date 필수. cosine >0.95 근중복은 정보 밀도 높은 쪽 유지.

사례: 2,400 PDF 롤백

지표수정 전게이트 후
40문 hit@351%79%
헤더/저작권 인용63%4%
청크 수1.28M0.71M

7단계 체크리스트

  • 50 PDF 샘플과 자동 게이트 비교.
  • 2개 PDF Parsing을 20문으로 비교.
  • 헤더/바닥글 규칙 staging 검증.
  • 메타데이터source_id 삭제 확인.
  • 20–50문 평가 세트 유지.
  • 거부율 급증 모니터링.
  • 분기별 만료 문서 정리.

로컬 시험: 30분 AI 개발 환경.

파싱은 워커, Vector Database는 깨끗한 청크만

Macstripe 클라우드 Mac으로 macOS 배치 작업 후 Linux 벡터 서비스에 동기화.

원칙: 품질 개선의 첫 레버는 데이터. 나쁜 PDF를 먼저 막고 hybrid retrieval을 조정.

FAQ

PDF가 Markdown보다 Vector DB를 더 오염시키는 이유?

숨은 레이아웃, OCR, 반복 헤더, 깨진 표가 embedding되고 반복으로 순위가 올라감.

최소 게이트는?

추출률, 중복, 길이, 언어.source_id 없으면 쓰기 금지.

어떤 PDF Parsing?

디지털: PyMuPDF/pdfplumber. 복잡: Unstructured/Docling. 스캔: OCR. 골든 질문으로 선택.

전체 재임베딩 없이 복구?

source_id·ingest_batch로 배치 삭제→재파싱→해당 문서만 재임베딩.

결론

순서: PDF Parsing → 게이트 → 청킹·메타데이터 → 골든 평가 → embedding. Vector Database는 쓰레기를 높은 신뢰도로 반환한다.

관련: 긴 컨텍스트와 RAG · 로컬 AI 환경