7차시. 텍스트 분할 이해
9. 자주 겪는 문제와 해결법
출처: 원본 PDF 07차시_텍스트분할이해.pdf 19쪽 · 쪽 그림 19쪽
| 증상 | 원인과 해결 |
|---|---|
| 조각이 chunk_size보다 훨씬 짧게 나옴 | 정상입니다. separators가 앞쪽에서 자를 곳을 찾은 것입니다 |
| 조각이 chunk_size보다 김 | 자를 만한 구분자가 없는 경우입니다. separators에 ""를 마지막에 넣으세요 |
| 표가 여러 조각으로 찢어짐 | 표는 분할에 취약합니다. 표만 따로 추출해 별도 처리하세요 |
| 제목과 내용이 다른 조각으로 갈라짐 | chunk_size를 키우거나, Markdown 헤더 분할기를 사용하세요 |
| 같은 내용이 여러 조각에 반복됨 | overlap이 너무 큽니다. chunk_size의 10~20%로 줄이세요 |
| 조각 수가 수천 개로 폭증 | chunk_size가 너무 작습니다. 임베딩 비용도 함께 폭증하니 주의하세요 |
9-1) 특수한 경우 — Markdown 문서
Markdown 문서는 #, ## 같은 제목 구조가 있습니다. 이걸 살려서 자르면 훨씬 좋습니다.
from langchain_text_splitters import MarkdownHeaderTextSplitter
headers = [("#", "h1"), ("##", "h2"), ("###", "h3")]
md_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers)
md_chunks = md_splitter.split_text(markdown_text)
# 각 조각의 metadata에 제목 경로가 들어간다
print(md_chunks[0].metadata)
# {'h1': '사용 설명서', 'h2': '설치 방법'}
#실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)
{'h1': '사용 설명서', 'h2': '설치 방법'}👉 "설치 방법 섹션에서만 검색" 같은 것이 가능해집니다