ColPali와 비전 네이티브 문서 RAG

전통적인 RAG는 PDF를 텍스트로 파싱하고, 청크로 나누고, 청크를 임베딩한 뒤 벡터를 저장합니다. 모든 단계가 신호를 잃습니다. OCR은 차트 데이터를 떨어뜨리고, 청킹(chunking)은 표 행을 끊어 버리며, 텍스트 임베딩은 그림을 무시합니다. ColPali(Faysse et al., 2024년 7월)는 더 단순한 질문을 던졌습니다. 왜 굳이 텍스트를 추출해야 할까요? 페이지 이미지를 PaliGemma로 직접 임베딩하고, 검색에는 ColBERT 스타일의 지연 상호작용(late interaction)을 사용하면 문서가 가진 레이아웃, 그림, 글꼴, 서식 신호를 모두 보존할 수 있습니다. 공개 벤치마크에서는 시각 정보가 풍부한 문서에서 텍스트 RAG보다 엔드 투 엔드(end-to-end) 정확도가 20-40% 더 높았습니다. ColQwen2, ColSmol, VisRAG가 이 패턴을 확장했습니다. 이 lesson에서는 비전 네이티브 RAG(vision-native RAG)의 명제를 읽고, 작은 ColPali식 인덱서를 만듭니다.

유형: Build 언어: Python (표준 라이브러리, 다중 벡터(multi-vector) 인덱서 + MaxSim 스코어러) 선수 지식: Phase 11 (LLM Engineering — RAG 기본), Phase 12 · 05 (LLaVA) 예상 시간: 약 180분

학습 목표

  • 바이 인코더 검색(bi-encoder retrieval, 문서당 벡터 하나)과 지연 상호작용(late-interaction) 검색(문서당 벡터 여러 개)의 차이를 설명합니다.
  • ColBERT의 MaxSim 연산을 설명하고, ColPali가 이를 텍스트 토큰에서 이미지 패치로 어떻게 일반화하는지 설명합니다.
  • 작은 ColPali식 인덱서를 만듭니다. 페이지 -> 패치 임베딩 -> 질의어 임베딩과의 MaxSim -> top-k 페이지 흐름입니다.
  • 송장/재무 보고서 사례에서 ColPali + Qwen2.5-VL 생성기와 text-RAG + GPT-4를 비교합니다.

문제

PDF에 텍스트 RAG를 적용하면 문서의 대부분을 버리게 됩니다. 재무 보고서의 3분기 매출 성장은 보통 차트에 있고, 의료 보고서의 소견은 주석이 달린 이미지에 있으며, 법률 계약서의 서명란은 텍스트 사실이 아니라 레이아웃 사실입니다.

텍스트 RAG 파이프라인은 다음과 같습니다.

  1. PDF -> OCR / pdftotext를 통한 텍스트
  2. 텍스트 -> 300-500토큰 청크
  3. 청크 -> 바이 인코더 임베딩(벡터 하나)
  4. 사용자 질의 -> 임베딩 -> 코사인 유사도 -> top-k 청크
  5. 청크 + 질의 -> LLM

손실이 있는 단계가 다섯 개입니다. 차트는 포착되지 않습니다. 표는 청크 사이에서 깨집니다. 다단 레이아웃은 평평해집니다. 그림 주석은 사라집니다.

ColPali의 해결책은 OCR을 건너뛰고 페이지 이미지를 직접 임베딩하는 것입니다. 검색에는 ColBERT 스타일의 지연 상호작용을 사용해 질의 시점에 모델이 세밀한 패치에 주목할 수 있게 합니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.ColPali 비전 네이티브 RAG가 해결하는 핵심 과제는?

2.ColPali 비전 네이티브 RAG 이전의 주요 한계는?

0/2 답변 완료

개념

ColBERT(2020)

ColBERT(Khattab & Zaharia, arXiv:2004.12832)는 텍스트 검색 방법입니다. 문서당 벡터 하나를 만드는 대신, 토큰마다 벡터 하나를 만듭니다. 질의 시점에는 다음을 수행합니다.

  • 질의 토큰은 각자 임베딩을 가집니다. N_q개의 벡터입니다.
  • 문서 토큰도 임베딩을 가집니다. N_d개의 벡터이며 보통 캐시됩니다.
  • 점수 = 질의 토큰마다 문서 토큰 전체 중 코사인 유사도가 가장 높은 값을 고르고, 이를 합산합니다. 즉 Σ_i max_j cos(q_i, d_j)입니다.

이것이 MaxSim 연산입니다. 각 질의 토큰은 자신과 가장 잘 맞는 문서 토큰을 "고릅니다". 최종 점수는 그 합입니다.

장점은 회상률(recall)이 강하고, 용어 수준 의미(term-level semantics)를 잘 처리한다는 점입니다. 단점은 문서마다 N_d개 벡터를 저장해야 하므로 저장 비용이 비싸다는 점입니다.

ColPali

ColPali(Faysse et al., arXiv:2407.01449)는 ColBERT 패턴을 이미지에 적용합니다.

  • 각 페이지는 PaliGemma(ViT + 언어 모델)로 인코딩되어 패치 임베딩을 만듭니다. 페이지마다 N_p개 벡터입니다.
  • 사용자 질의(텍스트)는 질의 토큰 임베딩으로 인코딩됩니다. N_q개 벡터입니다.
  • 점수 = Σ_i max_j cos(q_i, p_j), 즉 질의 텍스트 토큰과 페이지 이미지 패치 사이의 MaxSim입니다.
  • 전체 점수를 기준으로 top-k 페이지를 검색합니다.

문서 수집(ingestion) 시점에는 모든 페이지를 PaliGemma로 임베딩하고 모든 패치 임베딩을 저장합니다. 질의 시점에는 질의 토큰을 임베딩하고, 저장된 모든 페이지 임베딩에 대해 MaxSim을 계산한 뒤 top-k 페이지를 반환합니다.

장점은 시각 정보가 풍부한 문서에서 엔드 투 엔드 기준 텍스트 RAG보다 20-40% 더 낫다는 점입니다. 각 패치 벡터는 지역 레이아웃과 내용을 담습니다.

단점은 저장소가 빠르게 커진다는 점입니다. N_p 패치 × 4바이트 float × D차원 벡터가 페이지마다 필요합니다. PQ / OPQ 양자화로 완화할 수 있습니다.

ColQwen2와 ColSmol

ColQwen2(illuin-tech, 2024-2025)는 PaliGemma를 Qwen2-VL로 바꿉니다. 더 나은 기반 인코더를 사용하므로 검색 품질도 좋아집니다.

ColSmol은 로컬 또는 엣지(edge) 사용을 위한 더 작은 변형입니다. 약 1B 파라미터의 ColSmol 검색기는 소비자용 GPU에서도 실행됩니다.

VisRAG

VisRAG(Yu et al., arXiv:2410.10594)는 다른 변형입니다. 패치에 MaxSim을 적용하는 대신 비전·언어 모델(Vision-Language Model; VLM)로 각 페이지를 단일 벡터로 풀링(pool)한 뒤 바이 인코더 검색을 합니다. 인덱싱이 더 빠르고 저장소가 작지만, 회상률은 약합니다.

품질과 비용의 절충은 명확합니다. 품질은 ColPali, 규모는 VisRAG입니다.

M3DocRAG

M3DocRAG(Cho et al., arXiv:2411.04952)는 멀티모달 검색을 다중 페이지, 다중 문서 추론으로 확장합니다. 여러 문서에서 페이지를 검색하고, VLM을 위한 다중 페이지 문맥을 구성합니다.

ViDoRe — 벤치마크

ColPali와 함께 나온 벤치마크입니다. 시각 문서 검색 평가(Visual Document Retrieval Evaluation)의 약자입니다. 과제에는 재무 보고서, 과학 논문, 행정 문서, 의료 기록, 매뉴얼이 포함됩니다. 지표는 nDCG@5입니다.

ColPali-v1은 ViDoRe에서 약 80% nDCG@5를 기록합니다. 같은 문서에 대한 텍스트 RAG는 약 50-60%입니다.

엔드 투 엔드 RAG 파이프라인

비전 네이티브 RAG의 흐름은 다음과 같습니다.

  1. 수집: PDF -> 페이지 이미지 -> PaliGemma 인코딩 -> 모든 패치 임베딩 저장
  2. 질의: 사용자 텍스트 -> 질의 토큰 임베딩 -> 인덱싱된 모든 페이지와 MaxSim -> top-k 페이지
  3. 생성: top-k 페이지 이미지 + 질의 -> VLM(Qwen2.5-VL 또는 Claude) -> 답변

OCR은 어디에도 없습니다. 그림, 차트, 글꼴, 레이아웃이 모두 답변으로 흘러갑니다.

저장소 계산

50페이지짜리 재무 보고서가 있고, 페이지마다 729개 패치, 128차원 임베딩을 사용한다고 합시다.

  • ColPali: 50 * 729 * 128 * 4 bytes = 원시 기준 약 18 MB, PQ 이후 약 4 MB
  • Text-RAG: 50개 청크 * 768차원 * 4 bytes = 약 150 kB

ColPali는 문서당 저장소가 약 30배 큽니다. 규모가 커지면 OPQ / PQ를 사용해 약 5-10배 수준으로 낮출 수 있고, 대부분은 감당할 만합니다.

Text-RAG가 여전히 이기는 경우

  • 레이아웃 신호가 없는 순수 텍스트 문서. 예를 들어 위키(wiki) 글이나 채팅 로그입니다. Text-RAG가 더 단순하고 저장소도 저렴합니다.
  • 저장 비용이 지배적인 수백만 페이지 아카이브.
  • 검색과 함께 추출 가능한 OCR 텍스트를 요구하는 엄격한 규제 조건.

그 외 2026년의 재무 보고서, 과학 논문, 법률 계약서, 의료 기록, UX 문서에서는 비전 네이티브 RAG가 이깁니다.

사용해보기

code/main.py는 다음을 포함합니다.

  • 장난감 패치 인코더: "페이지"를 작은 특징 벡터 격자로 보고 패치 임베딩 배열로 매핑합니다.
  • MaxSim 스코어러: 질의 토큰 임베딩 집합과 페이지 패치 집합 사이의 ColBERT 스타일 점수를 계산합니다.
  • 5개의 장난감 페이지를 인덱싱하고, 3개 질의를 실행한 뒤, top-k와 점수를 반환합니다.

산출물 만들기

이 lesson은 outputs/skill-vision-rag-designer.md를 만듭니다. 문서 RAG 프로젝트가 주어지면 ColPali / ColQwen2 / VisRAG / text-RAG 중 하나를 고르고 저장소 크기를 산정합니다.

연습문제

  1. 200페이지 연례 보고서가 있습니다. 페이지당 729개 패치, 128차원 임베딩, 4바이트 float를 사용합니다. 원시 저장소와 PQ로 8배 압축한 저장소를 계산합니다.

  2. MaxSim은 Σ_i max_j cos(q_i, p_j)입니다. 이 합은 단순 평균 유사도가 포착하지 못하는 무엇을 포착합니까?

  3. ColPali는 페이지를 패치 집합으로 인덱싱합니다. 대신 ColBERT처럼 단어 수준에서 인덱싱하면 무엇이 달라집니까? 절충을 설명합니다.

  4. 질의당 500ms 지연 시간 예산을 가진 100만 페이지 말뭉치의 엔드 투 엔드 파이프라인을 설계합니다. ColQwen2와 VisRAG 중 하나를 고르고 정당화합니다.

  5. M3DocRAG(arXiv:2411.04952)을 읽습니다. 다중 페이지 어텐션 패턴을 설명하고, 단일 페이지 ColPali 검색과 어떻게 다른지 설명합니다.

핵심 용어

용어흔한 설명실제 의미
Late interaction"ColBERT 방식"단일 문서 벡터가 아니라 토큰/패치별 임베딩과 MaxSim을 사용하는 검색
MaxSim"패치 위 최댓값"각 질의 토큰마다 가장 유사한 문서 토큰을 고르고 질의 전체에 대해 합산하는 연산
Bi-encoder"단일 벡터"문서당 벡터 하나를 쓰는 방식. 빠르지만 세밀함을 잃는다
Multi-vector"문서당 여러 벡터"문서/페이지마다 N_p개 벡터를 저장한다. 저장 비용은 커지지만 회상률이 좋아진다
패치 임베딩(Patch embedding)"페이지 특징"VLM 인코더가 만든 이미지 패치당 하나의 벡터이며 페이지별로 캐시된다
ViDoRe"비전 문서 벤치마크"ColPali의 시각 문서 검색 벤치마크 모음
PQ 양자화(PQ quantization)"Product quantization"벡터 유사도를 유지하면서 저장소를 약 8배 줄이는 압축 방식

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

vision-rag-designer

Design a vision-native document RAG using ColPali / ColQwen2 / VisRAG, with storage estimate and generator-pick.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.프로덕션에서 ColPali 비전 네이티브 RAG의 가장 중요한 설계 원칙은?

2.ColPali 비전 네이티브 RAG가 올바른 선택이 아닌 경우는?

3.ColPali 비전 네이티브 RAG는 AI 생태계에 어떻게 들어맞나요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다