PART 7 · 강의 3/3
청킹과 인덱싱
문서 분할 전략과 효과적인 인덱스 구성
01
청킹이 필요한 이유
문서 분할의 필요성
청킹(Chunking)은 긴 문서를 작은 단위로 분할하는 과정입니다. RAG에서 청킹은 검색 품질에 직접적인 영향을 미치는 핵심 요소입니다.
왜 문서를 나눠야 할까요?
- 컨텍스트 제한: LLM은 입력 토큰 수에 제한이 있음
- 검색 정밀도: 전체 문서보다 관련 부분만 검색하는 것이 정확함
- 노이즈 감소: 불필요한 내용이 LLM 응답에 영향 주는 것 방지
- 비용 효율: 필요한 정보만 전달하여 토큰 비용 절감
원본 문서
인공지능(AI)은 인간의 학습능력과 추론능력을 컴퓨터로 구현한 기술이다.
최근 딥러닝의 발전으로 AI는 급격한 성장을 이루었다.
특히 트랜스포머 아키텍처는 자연어 처리 분야에 혁명을 가져왔다.
대규모 언어 모델(LLM)은 수십억 개의 파라미터를 가진 신경망이다.
GPT, Claude, Gemini 등이 대표적인 LLM이다.
이들은 텍스트 생성, 번역, 요약 등 다양한 작업을 수행한다.
↓ 청킹 ↓
1
인공지능(AI)은 인간의 학습능력과 추론능력을 컴퓨터로 구현한 기술이다.
최근 딥러닝의 발전으로 AI는 급격한 성장을 이루었다.
2
특히 트랜스포머 아키텍처는 자연어 처리 분야에 혁명을 가져왔다.
대규모 언어 모델(LLM)은 수십억 개의 파라미터를 가진 신경망이다.
3
GPT, Claude, Gemini 등이 대표적인 LLM이다.
이들은 텍스트 생성, 번역, 요약 등 다양한 작업을 수행한다.
02
청킹 전략
4가지 주요 분할 방법
고정 크기 청킹
Fixed Size Chunking
일정한 문자 수나 토큰 수로 문서를 분할합니다.
가장 단순하지만 문맥이 끊길 수 있습니다.
chunk_size = 500 # 문자 수
overlap = 50 # 겹치는 부분
overlap = 50 # 겹치는 부분
장점
구현 간단, 예측 가능한 크기
단점
문장/단락 중간에서 끊김
문장 기반 청킹
Sentence-based Chunking
문장 단위로 분할하여 의미 단위를 보존합니다.
문장 경계를 인식하는 토크나이저 사용.
# NLTK, spaCy 등 사용
sentences = nltk.sent_tokenize(text)
sentences = nltk.sent_tokenize(text)
장점
문맥 보존, 자연스러운 분할
단점
청크 크기 불균일
재귀적 청킹
Recursive Chunking
여러 구분자를 계층적으로 적용 (단락 → 문장 → 단어).
LangChain의 기본 전략입니다.
separators = ["\n\n", "\n", ".", " "]
# 순서대로 시도하며 분할
# 순서대로 시도하며 분할
장점
문맥 보존 + 크기 제어
단점
설정 복잡도
의미 기반 청킹
Semantic Chunking
임베딩 유사도를 기반으로 의미적으로 관련된 부분을 함께 묶습니다.
가장 정교하지만 비용이 높습니다.
# 연속 문장 간 유사도 계산
# 유사도 급감 지점에서 분할
# 유사도 급감 지점에서 분할
장점
최고 품질의 문맥 보존
단점
계산 비용 높음
03
청크 오버랩
문맥 단절 방지
청크 간 겹침(Overlap)을 두면 경계에서 문맥이 끊기는 것을 방지할 수 있습니다.
오버랩 시각화
Chunk 1
인공지능(AI)은 인간의 학습능력과 추론능력을 컴퓨터로 구현한 기술이다. 최근 딥러닝의 발전으로 AI는 급격한 성장을 이루었다.
인공지능(AI)은 인간의 학습능력과 추론능력을 컴퓨터로 구현한 기술이다. 최근 딥러닝의 발전으로 AI는 급격한 성장을 이루었다.
Chunk 2
최근 딥러닝의 발전으로 AI는 급격한 성장을 이루었다. 특히 트랜스포머 아키텍처는 자연어 처리 분야에 혁명을 가져왔다.
최근 딥러닝의 발전으로 AI는 급격한 성장을 이루었다. 특히 트랜스포머 아키텍처는 자연어 처리 분야에 혁명을 가져왔다.
노란색
= 겹치는 부분 (Overlap)
오버랩 설정 시 주의
- 너무 작으면 → 문맥 단절 문제 해결 안 됨
- 너무 크면 → 중복 정보로 인한 비효율, 검색 결과 중복
- 일반적으로 청크 크기의 10-20% 권장
04
최적의 청크 크기
크기별 장단점
| 청크 크기 | 장점 | 단점 | 적합한 경우 |
|---|---|---|---|
| 128-256 | 높은 검색 정밀도 | 문맥 부족, 청크 수 증가 | FAQ, 정의 검색 |
| 512-1024 | 정밀도와 문맥의 균형 | - | 일반적인 문서 |
| 1024-2048 | 풍부한 문맥 | 관련 없는 정보 포함 가능 | 기술 문서, 논문 |
청크 크기 선택 팁
- 정답이 정해져 있지 않음 - 실험을 통해 최적값 찾기
- 임베딩 모델의 최대 입력 길이 고려 (대부분 512 토큰)
- LLM 컨텍스트 윈도우 크기 고려
05
인덱싱 파이프라인
5단계 처리 과정
1
문서 로딩
PDF, Word, HTML, Markdown 등 다양한 형식의 문서를 텍스트로 변환합니다.
각 형식에 맞는 파서(loader)를 사용합니다.
2
전처리
불필요한 공백, 특수문자, 헤더/푸터 제거.
텍스트 정규화 및 정제 작업을 수행합니다.
3
청킹
선택한 전략으로 문서를 청크로 분할합니다.
각 청크에 메타데이터를 부착합니다.
4
임베딩
각 청크를 벡터로 변환합니다.
배치 처리로 API 호출 최적화.
5
저장
벡터와 메타데이터를 벡터 DB에 저장합니다.
인덱스 구조 최적화 (HNSW, IVF 등).
06
메타데이터 활용
청크에 정보 부착하기
청크에 메타데이터를 부착하면 검색을 더 정교하게 제어할 수 있습니다.
출처 추적
source, page, section 정보로
답변에 출처를 명시할 수 있습니다.
필터링
category, date 등으로
검색 범위를 좁힐 수 있습니다.
분류
문서 유형, 부서, 제품 등
다양한 기준으로 분류 가능합니다.
시간 관리
created_at, updated_at으로
최신 문서 우선 검색 가능합니다.
07
청킹 베스트 프랙티스
효과적인 청킹 전략
문서 유형별 전략
문서 유형에 따라 다른 청킹 전략을 적용하세요.
- 코드: 함수/클래스 단위 분할
- 법률 문서: 조항 단위 분할
- 매뉴얼: 섹션/단계 단위 분할
- 대화: 발화 단위 분할
실험과 평가
청킹 전략의 효과를 측정하고 개선하세요.
- 테스트 질문 세트 준비
- 검색 결과의 관련성 평가 (Precision@K, Recall)
- LLM 답변 품질 평가
- A/B 테스트로 전략 비교
점진적 개선
인덱스를 지속적으로 개선하세요.
- 사용자 피드백 수집
- 검색 실패 케이스 분석
- 새 문서 추가 시 품질 모니터링
- 정기적인 재인덱싱 고려
SUMMARY
핵심 요약
- 청킹 전략은 고정/문장/재귀적/의미 기반 4가지
- 청크 크기는 512-1024 토큰이 일반적
- 오버랩은 10-20%로 문맥 단절 방지
- 메타데이터로 출처, 분류, 날짜 등 정보 부착
- 문서 유형에 맞는 맞춤 전략이 중요