문서를 쪼개는 기술 - '청킹(Chunking)'
1. 문서 나누기의 중요성
RAG(Retrieval Augmented Generation, 검색 증강 생성)에서 문서를 ‘어떻게 나누느냐’는 질문, 단순한 것 같지만 AI 시스템의 성패를 좌우하는 핵심입니다 RAG 시스템의 핵심 구조는 다음 네 단계로 요약할 수 있습니다.
첫째, 사용자가 자연어로 질문을 입력합니다.
둘째, 질문과 관련된 정보를 벡터 데이터베이스에서 검색합니다.
셋째, 질문과 검색 결과를 언어 모델에게 함께 전달합니다.
넷째, 언어 모델이 이를 바탕으로 답변을 생성합니다.
이때 2단계에서 이루어지는 문서 검색의 정밀도를 좌우하는 요소가 바로 ‘문서 청킹’입니다. 문서를 너무 작게 쪼개면 문맥이 끊겨 오답이 발생하고, 반대로 너무 크게 쪼개면 언어 모델이 토큰 한계를 넘기 때문에 정보를 잘라내게 됩니다. 결국 중요한 건 “어디서, 어떻게 자를 것인가”의 문제입니다.
2. ETL 구조에서 본 청킹의 위치, ‘T’ – 트랜스폼
데이터 처리 과정에서 흔히 쓰이는 ETL(Extract, Transform, Load) 구조에서 청킹은 ‘T’, 즉 트랜스폼 단계에 해당합니다. AI가 문서를 이해할 수 있도록 정제하고 변환하는 과정이 바로 청킹입니다.
3. 가장 기본적인 캐릭터 기반 청킹 – CharacterTextSplitter
문자를 일정 단위로 잘라내는 가장 단순한 방식이 바로 캐릭터 기반 청킹입니다. 예를 들어 문자 500개 단위로 자르고, 앞뒤 청크가 200자씩 겹치도록(overlap) 설정하면 맥락이 어느 정도 유지됩니다.
하지만 줄바꿈(\n)을 기준으로 자르도록 설정했을 경우, 줄바꿈 없이 이어지는 문장은 너무 길어져 청크 크기를 지키지 못하는 상황도 생깁니다. 단순하지만 한계가 분명한 방법입니다.
4. 실무에서 가장 많이 쓰이는 리커시브 청킹 – RecursiveCharacterTextSplitter
리커시브 방식은 여러 개의 구분자(줄바꿈, 마침표, 쉼표 등)를 순차적으로 적용해 문서를 최대한 자연스럽게 나누는 방식입니다.
예를 들어 줄바꿈으로 나눌 수 없으면 마침표, 그다음 쉼표, 그다음 단어, 마지막으로 글자 단위까지 내려갑니다.
청크 크기(예: 500자)를 최대한 지키면서도 문맥이 끊기지 않도록 조절해 줍니다.
5. 코드나 마크다운 문서라면 언어 맞춤 청킹이 답
파이썬이나 마크다운 등 구조화된 문서를 다룰 때는 from_language를 통해 특정 언어를 명시할 수 있습니다.
예: Language.PYTHON은 클래스나 함수 단위로, Language.MARKDOWN은 헤더 중심으로 청킹이 이뤄집니다.
이러한 청킹 방식은 청크에 ‘제목, 소제목’ 같은 메타데이터를 포함할 수 있어 이후 답변 정확도 향상에 큰 도움을 줍니다.
6. 시멘틱 청킹 – 의미 기반으로 문맥을 끊지 않고 나누기
룰 기반 청킹과 달리 시멘틱 청킹은 AI 임베딩 모델을 사용해 문장 간 의미 유사도를 기준으로 자릅니다.
즉, 문장을 숫자 벡터로 바꾸고, 앞뒤 문장 사이 의미적 거리가 큰 지점을 기준으로 청크를 나눕니다.
장점은 문맥 보존력과 자연스러운 분할이지만, 단점은 시간과 비용입니다. 오픈AI 임베딩 모델을 사용할 경우 API 비용이 발생합니다.
7. 비용을 줄이려면 로컬 임베딩 모델 – Ollama + BGE
비용과 속도의 문제를 해결하기 위해 로컬 임베딩 모델도 적극 활용되고 있습니다.
Ollama와 BGE 모델을 조합하면 무료로도 시멘틱 청킹을 수행할 수 있습니다.
한글을 포함한 멀티링구얼 성능도 준수하며, 실무에서 점차 활용도가 높아지고 있습니다.
8. 시멘틱 청킹, 정말 잘 되나?
실제 실험에서는 논문 내의 앱스트랙트, 인트로덕션, 릴레이티드 워크, 메서드 등 자연스러운 논리적 구조 단위로 청킹이 이뤄집니다. 특히 “However” 같은 접속사로 이어지는 문장이 하나의 청크로 묶이는 걸 확인할 수 있었는데, 이는 맥락이 매우 잘 유지되고 있다는 방증입니다.
9. 청킹은 ‘아무렇게나’ 하면 안 된다
지금까지 살펴본 청킹 방식은 다음 네 가지로 정리됩니다.
RAG 시스템을 구현할 때 청킹은 단순한 전처리 과정이 아닙니다. 그 자체로 답변 정확도를 결정짓는 전략이자, AI 시스템의 설계 철학과도 맞닿아 있는 작업입니다.
처음엔 시행착오를 겪을 수밖에 없습니다. 하지만 다양한 방법을 테스트하면서 내 문서에 맞는 최적의 청킹 방식을 찾아가는 과정은 분명 가치 있습니다.
