
【RAG 성능 향상】 문서 청킹(Chunking) 최적화 기법을 코드를 포함하여 해설
요약
RAG 시스템의 검색 정밀도를 결정짓는 핵심 요소인 문서 청킹(Chunking) 최적화 기법을 소개합니다. 재귀적 분할, 세만틱 청킹, 구조화 분할의 특징과 구현 코드를 통해 문서 성격에 맞는 최적의 분할 전략을 제시합니다.
핵심 포인트
- 청킹 크기가 너무 크면 노이즈가 증가하고, 너무 작으면 문맥이 단절됨
- RecursiveCharacterTextSplitter는 구현이 쉽고 비용이 낮음
- Semantic Chunking은 임베딩을 활용해 의미적 연속성을 극대화함
- MarkdownHeaderTextSplitter는 문서의 계층 구조를 유지하는 데 유용함
2026년, 생성형 AI의 비즈니스 활용에 있어 RAG(Retrieval-Augmented Generation)는 표준적인 기술이 되었습니다. 하지만 많은 엔지니어가 직면하는 것이 바로 "검색 정밀도의 벽"입니다. LLM 자체의 성능 향상도 중요하지만, 사실 검색 정밀도를 좌우하는 가장 큰 요인은 문서를 어떻게 분할할 것인가, 즉 **"청킹(Chunking)"**에 있습니다.
"Garbage In, Garbage Out(쓰레기가 들어가면 쓰레기가 나온다)"라는 말처럼, 부적절한 분할은 문맥의 결락을 초래하여 LLM이 올바른 답변을 생성하는 것을 방해합니다. 본 기사에서는 하노이를 거점으로 고도의 AI 개발을 수행하는 NKKTech Software의 지견을 바탕으로, 주요 청킹 기법과 각각의 최적화 코드를 해설합니다.
단일 문서(예: 100페이지 PDF)를 그대로 벡터화하여 검색하는 것은 불가능합니다. 모델의 입력 토큰 제한이나 검색의 관련성을 고려하여 적절한 크기로 분할해야 합니다.
청크가 너무 큰 경우: 노이즈가 많아져 LLM이 답변에 필요한 정보를 특정하기 어려워짐. -
청크가 너무 작은 경우: 중요한 문맥이 끊겨 의미가 통하지 않게 됨. -
2026년 현재, 주류가 되고 있는 3가지 기법을 코드와 함께 소개합니다.
LangChain 등의 라이브러리에서 표준적으로 사용되는 기법입니다. 단락, 문장, 단어 순으로 지정한 청크 크기에 들어갈 수 있도록 재귀적으로 분할을 시도합니다.
from langchain_text_splitters import RecursiveCharacterTextSplitter
text = "여기에 방대한 사내 문서 텍스트가 들어갑니다..."
# 청크 크기와 오버랩(Overlap, 중복)을 설정
...
2026년 현재 RAG 구현에 있어 가장 "지능적인" 분할 기법으로 주목받고 있는 것이 **세만틱 청킹(Semantic Chunking)**입니다.
기존의 "글자 수" 기반 분할과는 달리, Embedding 모델을 사용하여 문장 간의 "의미적 거리"를 계산합니다. 화제가 급격히 변화하는 지점(의미적 유사도가 임계값을 밑도는 포인트)을 AI가 자동으로 감지하여 분할하기 때문에, 컨텍스트가 파괴되지 않는다는 큰 장점이 있습니다.
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai.embeddings import OpenAIEmbeddings
# 의미적 유사도를 계산하기 위해 Embedding 모델을 사용
...
Wiki, 기술 사양서, 매뉴얼 등 마크다운(Markdown) 형식이나 HTML과 같이 명확한 구조를 가진 문서에 매우 유효한 기법입니다.
가장 큰 특징은 헤더(# 또는 ##)를 기준으로 분할한다는 점입니다. 이를 통해 특정 토픽에 관한 기술이 도중에 단절되는 것을 방지하고, 정보의 "계층 구조"를 유지한 채 벡터 데이터베이스에 저장할 수 있습니다.
from langchain_text_splitters import MarkdownHeaderTextSplitter
# 분할 기준으로 삼을 헤더 레벨을 지정
headers_to_split_on = [
...
문서의 성질에 맞춰 아래 표를 참고하여 최적의 기법을 선택하십시오.
| 기법 | 적합한 문서 | 장점 | 단점 |
|---|---|---|---|
| 재귀적 분할 | 일반적인 텍스트, 뉴스, 잡기 | 구현이 용이하고 빠름. 계산 비용이 낮음. | 의미의 끊김을 무시하여 문맥이 단절되기 쉬움. |
| 세만틱 | 논문, 계약서, 기술 해설 | 문장의 의미적 연속성을 고도로 유지할 수 있음. | Embedding 계산이 필요하여 비용과 시간이 소요됨. |
| 구조화 분할 | Wiki, 매뉴얼, README | 정보의 계층 구조(헤더 관계)를 완벽히 유지. | Markdown이나 HTML 형식이 아닌 문서에는 적용 불가. |
청킹 기법을 결정한 후, 더욱 정밀도를 높이기 위한 운용상의 노하우입니다.
Overlap(중복) 설정
앞뒤 청크와 **5~10% 정도의 내용을 중복(Overlap)**시켜 주세요. 이를 통해 분할 지점 근처에 있는 키워드의 문맥이 끊기는 것을 방지하고, 검색 히트율을 극적으로 향상시킵니다. -
메타데이터 부여
분할된 각 청크에는 반드시 다음 정보를 메타데이터 (Metadata)로 부여해야 합니다.
source: 원본 파일명 또는 URLpage_number: 참조 원본의 페이지 번호summary: 해당 섹션의 짧은 요약 (하이브리드 검색 (Hybrid Search)에 유효)
이 정보들은 검색 시 필터링을 수행하거나, LLM이 답변의 근거를 제시할 때 필수적입니다.
정량 평가 (RAGAS) 도입
"왠지 좋아진 것 같다"는 느낌에서 벗어나야 합니다. RAGAS나 TruLens와 같은 평가 프레임워크 (Evaluation Framework)를 사용하여, 현재의 청킹 설정이 "충실성 (Faithfulness)"이나 "문맥의 타당성" 측면에서 몇 점인지 정량적으로 측정하고 개선 사이클을 반복합니다.
RAG에서 청킹 (Chunking)은 AI가 방대한 정보 속에서 필요한 데이터를 찾아내기 위한 "렌즈" 역할을 합니다.
문서의 성격에 맞춰 최적의 기법을 선택하고 파라미터 (Parameter)를 미세 조정함으로써 답변 정확도를 극적으로 향상시킬 수 있습니다. "RAG의 답변이 어긋난다"거나 "할루시네이션 (Hallucination, 환각)이 많다"는 문제로 고민하고 있다면, 모델을 변경하기 전에 먼저 청킹 전략을 재검토해 보시기 바랍니다.
저희는 베트남 하노이에 거점을 두고, 일본 수준의 세밀한 매니지먼트와 최첨단 AI 기술력을 융합한 개발 팀입니다.
검색 정확도를 극한으로 높인 RAG 시스템 (사내 FAQ · 매뉴얼 검색) 구축
대규모 문서의 AI 자동 분석 파이프라인 개발
안전하고 확장 가능한 사내 지식 베이스 (Knowledge Base) 구축
AI 도입이나 현재 RAG 시스템의 정확도 개선으로 어려움을 겪고 계신다면, 언제든 상담해 주십시오.
🌎 Webサイト: https://nkktech.com
📩 メール: contact@nkk.com.vn
💼 LinkedIn: NKKTech Company Profile
확실한 엔지니어링 역량으로 귀사의 데이터에서 진정한 가치를 이끌어내겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기