연차 규정 문서(323자)가 chunk_size 와 chunk_overlap 에 따라 어디서 잘리는지, 마크다운 헤더로 자르면 무엇이 달라지는지, 청크에 어떤 메타데이터가 붙는지,
그리고 글이 Titan v2 임베딩으로 1024개의 실수가 되어 코사인 유사도로 비교되는 과정을 단계별로 봅니다. 청킹 결과는 원고의 실제 값이고, 유사도 수치는 지어내지 않습니다.
한눈에 보는 구조
단계를 넘기면 지금 일하는 부품이 파란 테두리로 표시됩니다
이 시점의 데이터
세 설정 한 번에 비교 (연차 규정 323자)
설정
청크 수
청크별 글자 수
눈여겨볼 점
(100, 0)
6
29, 66, 45, 69, 58, 48
"3년 이상 근속자는 … 최대 25일까지" 줄이 혼자 청크가 되어 소제목도 '연차'라는 말도 없습니다
(100, 50)
6
29, 66, 45, 69, 58, 98
겹침이 생긴 곳은 마지막 청크 하나뿐입니다
(300, 50)
2
214, 107
겹침이 전혀 생기지 않습니다. 오늘 벡터 DB에 쓰는 설정입니다
함정과 주의
단위는 토큰이 아니라 글자 수입니다.chunk_size=300 은 300자입니다. 이 분할기는 기본으로 len 으로 길이를 잽니다.
겹침은 설정값만큼 생기지 않을 수 있습니다. 분할기는 글자를 하나씩 세어 자르지 않고 문단·줄 조각을 이어 붙이므로, 앞 조각이 chunk_overlap 보다 길면 겹침이 들어가지 않습니다. 설정을 믿지 말고 chunking.py 처럼 결과를 찍어서 확인합니다.
split_text 는 문자열을 받으므로 source 가 사라집니다.chunking_md.py 9행은 docs[0].page_content 만 넘기므로 결과 청크의 metadata에는 헤더 정보만 남습니다. 이 파일은 "docs/leave_policy.md" 를 상대 경로로 열어 day2_practice 안에서 실행해야 합니다.
embedding.py 13행은 벡터 전체를 찍습니다. 문구는 "앞 5개 값"이지만 슬라이스가 v[:] 라서 1024개가 모두 출력됩니다. 다섯 개만 보려면 v[:5] 입니다.
유사도 숫자는 같은 모델로 잰 다른 쌍과 비교할 때만 의미가 있습니다. "0.8 이상이면 같은 뜻" 같은 보편 기준은 없고, 문서와 질문은 반드시 같은 임베딩 모델로 벡터를 만들어야 합니다. 모델을 바꾸면 문서 전체를 다시 색인합니다.
관련 파일
파일
하는 일
chunking.py
연차 규정을 (100, 0), (100, 50), (300, 50) 세 설정으로 잘라 청크 수와 앞 40자를 비교. 모델 호출 없음
chunking_md.py
마크다운 제목(#)과 소제목(##)을 기준으로 자르고 헤더를 metadata로 보존
metadata.py
세 문서에 부서·개정일을 붙이고 300자/겹침 50으로 자르는 load_chunks(). 벡터 DB와 BM25가 이 함수를 씁니다