배경
현재 문서 인덱싱 파이프라인은 고정 크기 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개 이하로 분할합니다.
구현 범위
완료 조건
./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 파라미터를 경험적으로 검증한 과정과 트레이드오프를 재현 가능한 결과로 제시할 수 있습니다.
배경
현재 문서 인덱싱 파이프라인은 고정 크기 Chunking을 지원하고 기본값으로
chunkSize=1000,overlap=200을 사용합니다. 그러나 이 기본값과 다른 조합이 검색 품질, 중복 저장량, 임베딩 처리 시간에 미치는 영향을 동일한 조건에서 비교한 실측 근거가 없습니다.Chunk 수만 비교하면 검색 품질 저하를 발견할 수 없고, 검색 품질만 비교하면 Overlap 증가에 따른 저장·임베딩 비용을 판단할 수 없습니다. 실제 Chunker와 실제 BAAI/bge-m3 임베딩을 사용해 품질과 비용을 함께 측정하는 재현 가능한 Benchmark가 필요합니다.
목표
FixedSizeChunker로 Chunk Size·Overlap 조합별 Chunk를 생성합니다.비교 Profile
실험 설계
Corpus
측정 지표
정확성 불변식
BAAI/bge-m3여야 합니다.측정 편향 완화
/embed/batch요청은 서버 한도인 64개 이하로 분할합니다.구현 범위
docs/test-results/에 기록docs/design/에 기록완료 조건
./gradlew test가 성공합니다.제외 범위
chunkSize·overlap기본값 자동 변경기대 효과