RAG의 고급 기법 — Late Chunking
지난 글에서는 문서 분할 과정에서 발생하는 ‘맥락 소실’ 문제를 해결하기 위해, 쪼개진 청크에 직접 맥락을 추가해 주는 Contextual Retrieval 기법에 대해 알아보았습니다.
RAG의 고급 기법 — Late Chunking
지난 글에서는 문서 분할 과정에서 발생하는 ‘맥락 소실’ 문제를 해결하기 위해, 쪼개진 청크에 직접 맥락을 추가해 주는 Contextual Retrieval 기법에 대해 알아보았습니다.
이번 글에서는 같은 문제를 완전히 다른 시각으로 접근하여 해결하는 또 다른 RAG 고급 기법, Late Chunking에 대해 작성해보겠습니다.
Contextual Retrieval이 잃어버린 맥락을 ‘사후에 덧붙이는’ 방식이었다면, Late Chunking은 ‘작업의 순서 자체를 뒤집어 맥락을 유지하는’ 혁신적인 접근법입니다.
직관적인 비유: 영화 요약하기
Late Chunking의 개념은 ‘영화를 요약하는 방식’에 비유하면 아주 쉽게 이해할 수 있습니다.
1. 일반 청킹 = 영화를 장면별로 따로따로 요약하기
기존의 RAG 방식은 영화를 10분 단위로 뚝뚝 끊어서, 각 장면을 독립적으로 요약하는 것과 같습니다.
- 장면 1: “그가 울었다.” → (그가 누구지?)
- 장면 2: “그녀가 떠났다.” → (앞에 무슨 일이 있었지?)
- 장면 3: “결국 화해했다.” → (누구끼리 화해한 거지?)
이렇게 앞뒤 장면을 모른 채 개별 장면만 떼어놓고 보면, 전체 스토리의 맥락을 전혀 알 수 없습니다.
2. Late Chunking = 영화를 전체 먼저 본 뒤에 요약하기
반면, Late Chunking은 영화의 처음부터 끝까지 전체 스토리를 먼저 다 파악한 다음에 장면을 나눕니다.
- 장면 1: “주인공이 울었다.”
- 장면 2: “아내가 떠났다.”
- 장면 3: “두 사람이 화해했다.”
전체 흐름을 이미 알고 있는 상태에서 청크를 나누기 때문에, 각 장면(청크) 안에 전체 스토리의 맥락이 아주 자연스럽게 스며들게 됩니다.
Late Chunking의 핵심 원리: “순서를 뒤집다”
이러한 직관적인 아이디어를 실제 RAG 파이프라인에서는 어떻게 구현할까요? 정답은 ‘자르기’와 ‘임베딩(Embedding)’의 순서를 역전시키는 것입니다.
- 일반 RAG (먼저 자르기 → 개별 임베딩): 긴 문서를 먼저 여러 청크로 쪼갠 뒤, 각각을 따로따로 임베딩 모델에 넣습니다. 결과적으로 각 청크는 고립되어 전체 문서의 맥락을 알지 못하게 됩니다.
- Late Chunking (전체 임베딩 → 그 다음 자르기): 문서를 자르지 않고, 긴 문서 전체를 통째로 임베딩 모델에 먼저 넣습니다. 문서 전체를 한 번에 임베딩하게 되면, 모델 내부의 어텐션(Attention) 메커니즘을 통해 문장 앞뒤의 단어(토큰)들이 서로 긴밀하게 참조하고 연결됩니다. 이렇게 맥락 임베딩이 완전히 끝난 후에 비로소 청크 경계를 나누어 자르는 것입니다(이래서 ‘Late’ Chunking이라고 부릅니다).
분할은 나중에 이루어졌지만, 토큰들 사이의 연결 고리는 이미 임베딩 과정에서 형성되었기 때문에 각 청크는 고립되지 않고 전체 문서의 맥락을 튼튼하게 보존하게 됩니다.
트레이드오프: 연산 비용 vs 검색 품질
물론 Late Chunking에도 고민해야 할 트레이드오프(Trade-off)가 존재합니다.
문서를 잘게 쪼개어 가볍게 처리하던 기존 방식과 달리, 수천~수만 토큰에 달하는 긴 문서를 한 번에 임베딩 모델에 밀어 넣어야 하므로 초기 ‘연산 비용(Computational Cost)’이 상대적으로 높게 발생합니다.
하지만 그 대가로 얻는 ‘검색 품질’의 향상은 엄청납니다. 맥락을 인위적으로 덧붙이는 것이 아니라 벡터 공간 자체에 맥락이 자연스럽게 녹아들어 있기 때문에, 사용자의 복잡한 질문에도 훨씬 정확하고 문맥에 맞는 청크를 찾아낼 수 있습니다.
마치며
앞서 다룬 Contextual Retrieval과 이번에 다룬 Late Chunking은 접근 방식은 다르지만, 결국 전하는 메시지는 같습니다.
초기 파이프라인을 구축할 때 연산 비용이나 시간 같은 초기 투자 비용이 들 수는 있습니다. 하지만 이 과정을 통해 맥락이 살아있는 고품질의 검색 기반을 다져 놓으면, 결과적으로 RAG 시스템의 이후 운영이 훨씬 수월해집니다. 검색 품질이 안정된 상태에서 시작하기 때문에, 나중에 프롬프트를 개선하거나 새로운 기능을 추가할 때 흔들리지 않는 든든한 ‘베이스라인’ 역할을 해줄 것입니다.
검색 품질의 한계로 고민하고 계신다면, 두 가지 고급 기법 중 여러분의 시스템 환경(비용, 모델의 컨텍스트 길이 지원 여부 등)에 더 알맞은 방법을 선택하여 적용해 보시길 바랍니다!
메타데이터
- post_id
- feb18f1bc84c
- slug
- rag의-고급-기법-late-chunking-feb18f1bc84c
- url
- https://medium.com/@DevOZ/rag%EC%9D%98-%EA%B3%A0%EA%B8%89-%EA%B8%B0%EB%B2%95-late-chunking-feb18f1bc84c
- canonical_url
- https://medium.com/@DevOZ/rag%EC%9D%98-%EA%B3%A0%EA%B8%89-%EA%B8%B0%EB%B2%95-late-chunking-feb18f1bc84c
- author_url
- https://medium.com/@DevOZ
- status
- ok
- fetched_at
- 2026-07-12 00:22:36