본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

의미 기반 분할과 쓰지 말아야 할 때

~22 min · chunking, semantic, advanced

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

기본 발상

의미 기반 분할은 각 문장을 임베딩하고 인접 문장 사이의 코사인 유사도를 계속 계산하다가, 값이 기준선 아래로 떨어지는 지점에서 새 청크를 시작해. 일정한 길이가 아니라 주제가 바뀌는 경계에 맞춰 나누는 방식이야.

때로 큰 차이를 만드는 이유

블로그 글, 녹취록, 소설처럼 길게 이어지는 문서에서는 의미 기반 분할의 검색 관련성이 고정 크기 분할보다 10–20% 높아질 수 있어. 한 청크가 한 주제에 머무르므로 모델이 생각 중간에서 뚝 잘린 조각을 받지 않거든.

실제 서비스에서 자주 불리한 이유

  • 비용. 모든 문장을 분할할 때 한 번, 저장할 때 한 번 임베딩해야 해.
  • 지연 시간. 80페이지 문서를 나누는 데 몇 분씩 걸릴 수 있어.
  • 설명하기 어려움. 청크가 이상하게 나와도 왜 그 지점에서 잘렸는지 밝히기 쉽지 않아.
  • 구조가 있는 문서에서는 이득이 작음. 마크다운 제목이 이미 주제 경계를 표시하므로 의미 기반 분할을 더해도 얻는 것이 거의 없어.

구조 없는 긴 산문에는 의미 기반 분할을 검토하고, 제목이나 마크업이 조금이라도 있다면 구조 기반 분할부터 시도해.

Code

의미 기반 분할기(LangChain 실험 기능)·python
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai import OpenAIEmbeddings

splitter = SemanticChunker(
    OpenAIEmbeddings(model='text-embedding-3-large'),
    breakpoint_threshold_type='percentile',
    breakpoint_threshold_amount=85,    # 낮을수록 청크 많아짐
)

chunks = splitter.create_documents([open('long_essay.md').read()])
print(f'{len(chunks)} 시맨틱 청크')

External links

Exercise

구조 없는 긴 문서 하나와 마크다운 구조가 많은 문서 하나를 준비해. 둘 다 의미 기반 분할과 구조 기반 분할로 처리하고, 각각 쿼리 열 개로 검색 품질을 비교해. 어떤 문서 형식에서 의미 기반 분할이 추가 비용만큼의 가치를 냈는지 판단해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.