-
Chunk Optimization / 5 Levels Of Text SplittingLLM 2025. 6. 18. 11:00
필요성
Langchain으로 RAG 구현하던 중, 적절한 Chunking Strategy를 선택해야했다.
로드한 문서를 임베딩 하기 전에 크게 자를까, 작게 자를까, 뭘 기준으로 자를까 등을 결정하는 작업이다.
이는 검색 정확성/효율성과 연결되기 때문에, 가치있는 검색을 위한 최적의 Chunk 전략과 결정 기준을 조사해서 요약해본다.
고려할 사항
A. 청크 크기 (Chunk Size)
1. 작게 자를 경우 (문장 단위)
- 임베딩된 벡터는 문장 자체의 의미에 집중됨
- 장점: 검색 결과가 짧고 정확한 응답 문장으로 이어질 가능성 높음
- 단점: 문단 또는 전체 문서의 문맥은 잃을 수 있음
2. 크게 자를 경우 (문단~문서 단위)- 임베딩 벡터가 더 넓은 문맥(Context)을 포함
- 장점: 문장 간 연관성 및 문서 전반 흐름 이해에 유리
- 단점: 불필요한 내용까지 포함되어 정확한 매칭률이 낮아질 수 있음 (할루시네이션 가능성 상승)
B. 서비스 특성에 따른 고려 요소1. 콘텐츠 길이
- 긴 콘텐츠(기사, 강의자료 등) → 큰 chunk + overlap이 적합할 수 있음
- 짧은 콘텐츠(피드, 메시지 등) → 작은 chunk가 적합할 수 있음
2. 임베딩 모델 특성
임베딩 모델 종류에 따라, 어떤 청킹 크기에서 최적으로 수행되는지 다를 수 있음
- Hugging Face의 Sentence Transformers
→ 문장 단위 임베딩에 최적화
- OpenAI text-embedding-ada-002
→ 중간 크기 청크(256~512 토큰)에서 최적 성능
→ 참고) 최대 입력 길이: **8191 토큰**
3. 사용자 쿼리의 형태
- 짧고 구체적인 질문 → 작은 chunk가 적합할 수 있음
- 긴 질문이나 복합적 요청 → 큰 chunk가 적합할 수 있음
5 Levels Of Text Splitting
Level 1 : Fixed Size Chunking
고정된 길이로 문서를 쪼갠다. 문맥, 구조를 고려하지 않고 무작정 고정되게 자른다.
예를 들면 총 500자 텍스트를 포함한 문서가 있을 때, 50자씩 고정되게 잘라서 10개의 Chunk를 만드는 것이다.
500자 내 여러 문장들의 문맥은 고려하지 않는다.
그러니 구현은 쉽더라도, 문맥과 문장을 잘라버릴 가능성이 있다.Level 2: Recursive Chunking
구분 기호(\n 등)을 기준으로 쪼개고, 원하는 크기의 청크가 될 때까지 재귀적으로 쪼갠다.
즉, Fixed Size Chunking와 달리 문단이나 문장은 보존된다(잘리지 않는다)
그러나 문서 자체가 구분 기호를 제대로 쓰지 않았을 수도 있고, 한 문단이나 문장이 길 경우 Chunk도 커질 수 있다.앞서 말했듯 Chunk가 커지면 검색 정확도가 떨어질 수도 있고(상황에 따라 다르겠지만) 토큰 또한 많이 소비하게 될 것이다.
Level 3 : Document Based Chunking (Specialized chunking)
문서 자체의 특징적인 구조를 기반으로 쪼갠다.
예를 들면 Markdown 문서에서는 마크다운을 구분기호로하고
Python문서에서는 클래스나 함수 등을 기준으로 분할하는 것이다.
그 외에도 HTML 등 구조가 명확한 문서를 청킹하는데 유리한 전략이 될 수 있다.Level 4: Semantic Chunking
텍스트 길이 등의 절대적인 기준을 둔다기 보다는, 문장의 의미적 연관성(semantic coherence)에 따라 텍스트를 분할하는 방법이다.
두 문장 사이의 임베딩 차이를 찾고, 그 차이가 임계값을 넘어가면 문장이 분할된다.
다만 임베딩 기반 의미분석 단계가 추가된 것이므로, LLM호출 비용과 속도 측면에서는 어느정도 단점이 생기는 것을 유념해야한다.Level 5: Agentic Chunking
LLM에게 잘라줘~ 한다.
참고 자료
ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #6 임베딩을 위한 효과적 문장
임베딩을 위한 효과적 문장 분리 방법 조대협(http://bcho.tistory.com) 임베딩에서 알고리즘도 중요하지만 가장 중요한 것중 하나는 어떻게 문서를 파편으로 잘라낼것인가? (이를 영어로 Chunking이라고
bcho.tistory.com
LLM 어플리케이션을 위한 Chunking Strategies - 지니코딩랩
청킹은 텍스트를 작은 세그먼트로 나누는 과정으로, LLM 어플리케이션에서 중요한 최적화 기술입니다. 다양한 청킹 방법들이 있으며, 각 방법은 특정 상황에 적합할 수 있으며, 고정 크기 청킹,
www.jiniai.biz
RetrievalTutorials/tutorials/LevelsOfTextSplitting/5_Levels_Of_Text_Splitting.ipynb at main · FullStackRetrieval-com/RetrievalT
Contribute to FullStackRetrieval-com/RetrievalTutorials development by creating an account on GitHub.
github.com
https://dev.to/eteimz/understanding-langchains-recursivecharactertextsplitter-2846
Understanding LangChain's RecursiveCharacterTextSplitter
Large language models are powerful tools with extensive capabilities; nonetheless, they grapple with...
dev.to
'LLM' 카테고리의 다른 글
Qdrant 구성 요소 (0) 2025.06.23 Langchain Text Splitter (3) 2025.06.18