7차시. 텍스트 분할 이해
7. 실습 ③ — chunk_size 비교 실험
출처: 원본 PDF 07차시_텍스트분할이해.pdf 15~16쪽 · 쪽 그림 15쪽 16쪽
오늘의 핵심 실습입니다. 값을 바꿔가며 무엇이 달라지는지 관찰합니다.
📝 src/compare_size.py
from langchain_text_splitters import RecursiveCharacterTextSplitter
def try_size(docs, size, overlap):
sp = RecursiveCharacterTextSplitter(
chunk_size=size, chunk_overlap=overlap,
separators=["\n\n", "\n", ". ", " ", ""])
chunks = sp.split_documents(docs)
lengths = [len(c.page_content) for c in chunks]
print(f"size={size:<5} overlap={overlap:<4} "
f"조각수={len(chunks):<4} "
f"평균={sum(lengths)//len(lengths):<5} "
f"최소={min(lengths):<5} 최대={max(lengths)}")
return chunks
print("chunk_size별 비교 (작은 문서라 30자부터 시작)")
print("-" * 60)
for s in (30, 50, 100, 150, 250):
try_size(docs, s, int(s * 0.2))7-1) 실행 결과 예시
chunk_size별 비교
────────────────────────────────────────────────
size=30 overlap=6 조각수=17 평균=20 최소=7 최대=30
size=50 overlap=10 조각수=14 평균=25 최소=7 최대=49
size=100 overlap=20 조각수=6 평균=59 최소=13 최대=99
size=150 overlap=30 조각수=3 평균=113 최소=67 최대=143
size=250 overlap=50 조각수=2 평균=171 최소=143 최대=200💡 표에서 읽어낼 것
① 조각 수와 크기는 반비례합니다
size가 커지면 조각 수가 줄어듭니다. 당연하죠.
② 평균이 chunk_size보다 작습니다
separators 때문입니다. 500자를 채우기 전에
문단 끝이 나오면 거기서 자르니까요. 정상입니다.
③ 최소값을 눈여겨보세요
size=200일 때 42자짜리 조각이 있습니다.
42자로 무슨 답을 할 수 있을까요? 너무 작습니다.
👉 최소 조각이 100자 미만이면 size를 키워야 합니다.