Skip to content

Chunk Size·Overlap 검색 품질 및 비용 비교 Benchmark 지원 추가 구현 #147

Description

@Gimini-3

배경

현재 문서 인덱싱 파이프라인은 고정 크기 Chunking을 지원하고 기본값으로 chunkSize=1000, overlap=200을 사용합니다. 그러나 이 기본값과 다른 조합이 검색 품질, 중복 저장량, 임베딩 처리 시간에 미치는 영향을 동일한 조건에서 비교한 실측 근거가 없습니다.

Chunk 수만 비교하면 검색 품질 저하를 발견할 수 없고, 검색 품질만 비교하면 Overlap 증가에 따른 저장·임베딩 비용을 판단할 수 없습니다. 실제 Chunker와 실제 BAAI/bge-m3 임베딩을 사용해 품질과 비용을 함께 측정하는 재현 가능한 Benchmark가 필요합니다.

목표

  • 실제 FixedSizeChunker로 Chunk Size·Overlap 조합별 Chunk를 생성합니다.
  • 실제 BAAI/bge-m3로 Query와 Chunk를 임베딩합니다.
  • Chunking 영향만 분리하기 위해 메모리 내 Exact Cosine 검색으로 품질을 측정합니다.
  • 경계에 걸친 근거 문장을 포함하는 결정적 Corpus로 Overlap 효과를 검증합니다.
  • 품질과 비용을 같은 결과 파일과 문서에서 비교하고 Pareto 후보를 제시합니다.
  • 결과만으로 운영 기본값을 자동 변경하지 않고 별도 의사결정 근거로 남깁니다.

비교 Profile

Chunk Size Overlap
400 0
400 80
800 0
800 160
1000 0
1000 200
1600 0
1600 320

실험 설계

Corpus

  • 400·800·1000·1600 코드 포인트 경계 주변에 고유한 한국어 근거 문장을 배치합니다.
  • 각 경계마다 3개 문서·질의를 구성해 총 12개 Query/Document Case를 사용합니다.
  • 문서 본문은 결정적으로 생성하며, 각 Query의 정답은 해당 문서의 근거 범위로 정의합니다.
  • Chunk가 정답 문서에 속하고 근거 범위를 완전히 포함할 때만 Relevant로 판정합니다.

측정 지표

  • Answer Coverage Ratio
  • Answer Hit@1, Hit@3
  • MRR@10
  • 전체 Chunk 수
  • 전체 Chunk 코드 포인트 수
  • 중복 코드 포인트 수와 Duplicate Ratio
  • Chunk 임베딩 시간 Median/P95
  • Exact 검색 시간 Median/P95
  • 요청 실패 수

정확성 불변식

  • 임베딩 모델은 BAAI/bge-m3여야 합니다.
  • 모든 Vector는 1024차원이어야 합니다.
  • 모든 Vector 값은 NaN·Infinity가 아닌 유한값이어야 합니다.
  • 임베딩 응답 수와 요청 Text 수가 일치해야 합니다.
  • 동일 설정과 Seed에서 Corpus·품질 지표는 결정적이어야 합니다.

측정 편향 완화

  • Query Vector는 한 번만 생성해 Profile별 Chunking 비용을 분리합니다.
  • Warm-up 후 여러 Round를 실행합니다.
  • Round마다 Profile 시작 순서를 회전해 실행 순서·열 상태 편향을 줄입니다.
  • /embed/batch 요청은 서버 한도인 64개 이하로 분할합니다.

구현 범위

  • Chunk 품질 Benchmark 전용 JUnit Tag와 Gradle Task 추가
  • 결정적 경계 Corpus 및 Ground Truth 계약 추가
  • Exact Cosine Ranking과 Hit@K·MRR·중복량 계산 추가
  • 실제 BGE-M3 Batch 호출과 Vector 불변식 검증 추가
  • Profile별 반복 측정 및 JSON 결과 생성 추가
  • 단위 테스트로 품질 지표 계산·입력 검증 고정
  • 실행 방법과 실측 결과를 docs/test-results/에 기록
  • 설계와 제외 범위를 docs/design/에 기록

완료 조건

  • ./gradlew test가 성공합니다.
  • 전용 Benchmark Task가 실제 BGE-M3를 호출해 8개 Profile 결과를 생성합니다.
  • 12개 Query 기준 Hit@1·Hit@3·MRR@10과 비용 지표가 모두 기록됩니다.
  • 1024차원·유한 Vector·응답 개수 불변식이 검증됩니다.
  • 결과 문서에 기본 Profile과 다른 Profile의 품질·비용 비교표, 그래프용 원자료, 결론이 포함됩니다.
  • 실행 환경·명령·Round·Batch Size·오류 수를 재현 정보로 남깁니다.

제외 범위

  • 운영 chunkSize·overlap 기본값 자동 변경
  • PDF·DOCX Parser와 OCR 품질 비교
  • PostgreSQL·pgvector·HNSW 성능 측정
  • Query 권한 필터·RAG 답변 품질 측정
  • 운영 SLO 확정

기대 효과

  • Chunk 경계 손실과 Overlap 효과를 검색 품질로 설명할 수 있습니다.
  • 품질 개선에 필요한 추가 임베딩·저장 비용을 수치로 비교할 수 있습니다.
  • 포트폴리오에서 Chunking 파라미터를 경험적으로 검증한 과정과 트레이드오프를 재현 가능한 결과로 제시할 수 있습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions