청크 분할 전략(고정, 문장, 의미)
검색 품질을 기준으로 고정 크기, 문장 인식, 의미 기반 청크 분할의 장단점을 비교해보세요.
청크 분할 전략(고정, 문장, 의미)은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
청크로 나누는 이유
200페이지짜리 PDF 전체를 하나의 벡터로 임베딩할 수는 없습니다. 벡터가 너무 추상적이어서 구체적인 질의와 일치시키기 어렵기 때문입니다. 문서를 더 작은 조각(각각 약 200~800토큰)으로 나누고, 각각을 임베딩한 다음 청크 단위로 검색합니다.
고정 크기 청킹
가장 단순한 방법은 모든 내용을 N개의 문자 또는 토큰 단위로 나누는 것입니다:
def fixed_chunks(text, chunk_size=1000, overlap=200):
chunks = []
i = 0
while i < len(text):
chunks.append(text[i:i + chunk_size])
i += chunk_size - overlap
return chunks
sample_text = "A" * 2500
chunks = fixed_chunks(sample_text, chunk_size=1000, overlap=200)
print(f"Split {len(sample_text)} characters into {len(chunks)} chunks")
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {len(c)} chars")
겹침이 필요한 이유
겹침(일반적으로 청크 크기의 10~20%)을 사용하면 경계에 걸쳐 있는 문장이 적어도 하나의 청크에는 온전히 포함됩니다. 겹침이 없으면 여러 청크에 나뉜 핵심 사실을 검색하지 못할 수 있습니다.
문장 기반 청킹
문장 경계에서 나누어 문장 중간에서는 절대 끊지 않습니다:
import re
def sentence_chunks(text, max_chars=1000):
sentences = re.split(r'(?<=[.!?])\s+', text)
chunks = []
current = ''
for s in sentences:
if len(current) + len(s) > max_chars and current:
chunks.append(current.strip())
current = s
else:
current += ' ' + s
if current:
chunks.append(current.strip())
return chunks
sample_text = "This is sentence one. This is sentence two! Is this sentence three? Yes it is."
chunks = sentence_chunks(sample_text, max_chars=40)
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {c!r}")
재귀적 분할(LangChain)
LangChain의 RecursiveCharacterTextSplitter는 먼저 단락 경계에서 나누고, 그다음 문장, 마지막으로 단어 단위에서 나누어 가능한 한 구조를 보존합니다.
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
separators=['\n\n', '\n', '. ', ' ']
)
chunks = splitter.split_text(document)의미 기반 청킹
주제가 바뀌는 지점에서 나눕니다. 구현 방식에 따라 각 문장을 임베딩하고, 연속된 문장의 임베딩 사이 거리가 크게 벌어지는 지점에서 나눕니다.
계산에는 더 오래 걸리지만 주제의 일관성이 높은 청크를 생성합니다.
Markdown 인식 청킹
Markdown 문서에서는 섹션이 함께 유지되도록 제목 경계에서 나눕니다. 각 청크는 상위 제목을 맥락으로 물려받습니다.
코드 인식 청킹
소스 코드에서는 문자 수가 아니라 함수/클래스 경계에서 나눕니다. tree-sitter와 같은 도구를 사용하면 AST를 인식하는 청킹이 가능합니다.
청크 크기 선택
장단점:
- 작은 청크(약 200토큰) — 일치가 정확하지만 관리할 청크가 더 많음
- 큰 청크(약 1,000토큰) — 일치 항목마다 맥락이 더 많지만 정확도는 낮음
기본값: 10~20% 겹침을 적용한 500~800토큰
메타데이터 보존
모든 청크에 메타데이터를 첨부합니다:
- 출처 URL / 파일 경로
- 페이지 번호
- 문서 제목
- 섹션 / 제목
- 생성 / 수정 시각
필터링, 인용 및 재순위화에 유용합니다.
맥락이 포함된 청크
최근 기법으로, 각 청크 앞에 LLM이 생성한 한 줄짜리 맥락을 붙입니다(예: "이 청크는 매출을 다루는 회사의 2024년 2분기 재무 보고서에서 가져왔습니다."). 검색 성능이 30~50% 향상됩니다.
부모-자식 청크
정확하게 일치시키기 위해 작은 청크를 색인하지만, 맥락을 위해 해당 청크의 LARGER 부모 단락을 검색합니다:
- 문장 단위 청크를 임베딩합니다
- 일치 항목이 발견되면 부모인 800토큰 청크를 반환합니다
겹침이 필요한 이유
청크는 일반적으로 왜 10~20% 겹치게 만들까요?
요약
약 800토큰을 기준으로 재귀적 문자 분할을 시작하고 10% 겹침을 적용합니다. 필요에 따라 의미 및 구조 인식을 추가합니다.
자주 묻는 질문
“청크 분할 전략(고정, 문장, 의미)” 강의는 무료인가요?
네 — “청크 분할 전략(고정, 문장, 의미)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“청크 분할 전략(고정, 문장, 의미)”에서 뭘 배우나요?
검색 품질을 기준으로 고정 크기, 문장 인식, 의미 기반 청크 분할의 장단점을 비교해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“청크 분할 전략(고정, 문장, 의미)” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- RAG가 해결하는 문제(지식 기준일, 환각)
- 청크 분할 전략(고정, 문장, 의미)
- 문서 집합 인덱싱
- FAISS 또는 Chroma로 단순한 RAG 구축