홈으로 돌아가기

RAG에서의 PageIndex: 벡터 검색 대체

PageIndex는 LLM이 구축한 계층적 TOC로 RAG의 벡터 검색을 대체합니다. 스케일링 분석, 로컬 모델 실험 (qwen3:14b — 정확도 69%). 실행 지침 및 PDF 수정.

PageIndex: 벡터 DB 없는 RAG — 테스트 및 실행
Advertisement 728x90

RAG에서 벡터 검색 대안으로서의 PageIndex: 분석 및 로컬 설정

PageIndex는 RAG의 벡터 검색을 계층적 문서 구조로 대체하는 방안을 제안합니다. 문서를 페이지 단위로 분할하고, LLM이 노드 요약을 포함한 목차 트리를 구축합니다. 검색 쿼리는 LLM으로 전달되어 관련 노드를 선택한 후, 추출된 페이지를 컨텍스트로 활용합니다. 청킹, 임베딩, 벡터 데이터베이스가 필요하지 않습니다.

확장성 한계

PageIndex는 단일 문서에 최적화되어 있습니다. 문서 모음의 경우 다음 방법들이 제안됩니다:

  • 메타데이터 필터링 (개발 중, 벡터 저장소와 유사)
  • 생성된 설명을 통한 검색 (소규모 문서에 적합)
  • 의미론적 검색 (벡터 임베딩으로 회귀)

요약이 포함된 목차는 컨텍스트를 4-5배 압축합니다. TF-IDF나 BM25 같은 대안들은 인덱싱이 필요합니다. 수천 개 문서의 목차 저장 문제는 아직 해결되지 않았습니다. 여기서 LLM은 유사성 검색 대신 관련성 검색을 수행하며, 복잡한 텍스트를 목차를 통해 탐색하는 것과 유사합니다.

Google AdInline article slot

FinanceBench에서 주장된 98.7% 정확도(벡터 검색의 약 90% 대비)는 추론을 통해 달성됩니다. 비용은 수십 배 더 높습니다. gpt-4o와 gpt-5.4에서 테스트되었습니다.

로컬 모델 실험

사이버펑크 2077에 관한 학술 논문(PDF, 약 17k 토큰)으로 테스트했습니다. 마크다운 파이프라인은 LangChain의 MarkdownTextSplitter와 유사하게 제목으로 분할합니다.

PDF 파이프라인은 제목을 자동으로 추출하지만 문제점이 있습니다:

Google AdInline article slot
  • JSON 출력 오류 - 텍스트 처리(참고문헌, 인용문 제거)
  • 60% 정확도 임계값 - 환경 변수 ACCURACY_THRESHOLD로 조정 가능
  • LLM이 노드와 조각을 매칭하는 낮은 정확도 - MAX_TOKENS를 20k에서 증가

모델:

  • gemma3:27b - 목차를 환각 생성(정확도 <60%)
  • gpt-oss:20b - 정확도 57-63%, 안정적
  • qwen3:14b - 정확도 69.57%, 하지만 JSON 오류 발생

16GB GPU에서 소요 시간: 약 30분 (오류 수정이 대부분)

목차 예시 (gpt-oss:20b, 정확도 0.63):

Google AdInline article slot
{
  "doc_name": "2077.pdf",
  "structure": [
    {
      "title": "서론",
      "node_id": "0000",
      "start_index": 1,
      "end_index": 3,
      "summary": "본 논문은 비디오 게임 Cyberpunk 20...",
      "text": "예측과 ...에 대한 사이버펑크 2077 관점"
    },
    {
      "title": "문헌 고찰",
      "node_id": "0001",
      "start_index": 3,
      "end_index": 3,
      "summary": "부분 문서는 문헌 고찰을 제시합니다 ...",
      "text": "사이버펑크 2077을 더 넓은 맥락에서 ...",
      "nodes": [
        // ... 하위 노드들
      ]
    }
    // ... 나머지 노드들
  ]
}

설정 및 로컬 설치

설치: liteLLM==1.82.0 (최신 버전은 취약함). pip install pageindex 사용 금지 - API용입니다.

노트북: MinimalPageindexLocalPDF.ipynb, MinimalPageindexLocalMD.ipynb.

utils.py 수정: OLLAMA_HOST, OLLAMA_TIMEOUT.

page_index.py: ACCURACY_THRESHOLD, MAX_TOKENS.

프로세스:

  • 문서 로드 (PDF/MD)
  • LLM이 목차 구축 (find_toc_pages)
  • 페이지/라인으로 분할
  • 요약이 포함된 노드 트리 구축
  • 정확도 보정
  • 검색: LLM이 쿼리로 노드 선택 → 페이지 추출 → 최종 RAG

PageIndex는 검색 가능한 페이지/섹션 참조와 함께 LLM을 검색에 통합합니다. 복잡한 문서에 적합하지만 프로덕션 환경에서는 리소스 집약적입니다.

핵심 요약

  • 확장성: 벡터 검색 없이 대규모 문서 모음을 위한 완성된 솔루션 없음
  • 정확도: 모델 의존적; 로컬(qwen3:14b)은 69% 달성하지만 오류 발생
  • 비용: 벡터 RAG 대비 8-9% 더 높은 정확도를 위해 x10-xN 리소스 필요
  • 형식: 제목 자동 감지 PDF; 마크다운 구조를 통한 MD
  • 수정: 약한 하드웨어에서 임계값과 토큰을 위한 환경 변수 필요

— Editorial Team

Advertisement 728x90

다음 읽기