일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- pdfloader
- azure ai
- Multimodal
- runnableparallel
- Azure
- splitter
- 자연어처리
- lcel
- 챗봇 만들기
- azure services
- 문서/번역 서비스 사용
- 자연어 처리
- Runnable
- Parallel
- langsmith
- azure open ai
- OpenAI
- azure open ai service
- rag
- RecursiveCharacterTextSplitter
- langchain
- GPT
- runnablelambda
- ai language
- chain생성
- csvloader
- runnablepassthrough
- azureai
- webbaseloader
- teddynote
- Today
- Total
Nathaniel
9. Langchain-RecursiveCharacterTextSplitter 본문
이 텍스트는 Documents를 Chunk_size별로 글자를 나눠준다는 의미이고, 재귀적으로 잘라준다는 뜻이다.
ex ) 문단 → 문장 → 단어 → 글자 순으로 점점 작게 자름.
기본적으로 ["\n\n", "\n", ".", " "] 나뉜다
단계 | |
1단계 | \n\n(문단) |
2단계 | \n(줄 바꿈) |
3단계 | . (문장) |
4단계 | " " (단어) |
5단계 | 고정 길이 |
이렇게 크게 자르다가 작게 자르는 이유는??
문단이나 문장의 의미를 최대한 유지하면서,
LLM이 잘 이해할 수 있도록 부드럽고 자연스럽게 텍스트를 나누는 분할기로 사용된다.
"그래서 통상 재귀적으로 분할한다"라고 부른다.
from langchain_text_splitters import RecursiveCharacterTextSplitter
text = """
나는 고양이를 좋아한다. 고양이는 귀엽고, 독립적이며 때때로 애교도 부린다.
반면에 강아지는 활발하고 주인의 말을 잘 듣는다. 그래서 사람들은 강아지를 더 선호하기도 한다.
하지만 고양이만의 매력도 충분하다.
"""
# 텍스트 분할기 설정
splitter = RecursiveCharacterTextSplitter(
chunk_size=100,
chunk_overlap=20,
separators=["\n\n", "\n", ".", " "] # 분할 우선순위: 문단 → 줄바꿈 → 문장 → 단어
)
chunks = splitter.split_text(text)
# 결과 출력
for i, chunk in enumerate(chunks):
print(f"[청크 {i+1}]\n{chunk}\n{'-'*40}")
# 출력
[청크 1]
나는 고양이를 좋아한다. 고양이는 귀엽고, 독립적이며 때때로 애교도 부린다.
반면에 강아지는 활발하고 주인의 말을 잘 듣는다.
----------------------------------------
[청크 2]
그래서 사람들은 강아지를 더 선호하기도 한다.
하지만 고양이만의 매력도 충분하다.
----------------------------------------
이것 말고 Langchain으로 CharacterTextSplitter 분할기를 사용할 수 있지만, 글자 수가 700자이지만 분할기를 사용하되 'Chunk_size=500'으로 설정되면 글자 수 700자 보다 Chunk_size(500)가 작기 때문에 재귀적으로 분할하여 문단, 문장, 단어 형태로 작게 텍스트를 나눠 LLM이 이해할 수 있도록 쓰는 Recursive를 사용하는 것이 좋다.
가장 대표적으로 Langchain에서 Splitter로 사용하는 것이 RecursvieChracterTextSplitter로 알고 있는데, 대부분 가장 많이 사용하는 것에 대해서도 그렇고 내가 생각해도 그렇고 Recursive 분할기를 쓰면 좀 더 embedding을 해서 LLM이 이해할 수 있도록 하는 게 가장 좋다 생각하고, 나중에 할루시네이션 때도 그렇고 여러모로 좋을 것 같다고 생각한다.
이외, Markdown, HTMLHeader, Character 등등의 분할기가 있는데 해당 부분은 Langchain 공식 홈페이지에서 Docs 부분을 직접 찾아보는 게 좀 더 명확하게 알 수 있으니 사이트에 들어가서 확인해보자!
https://python.langchain.com/docs/introduction/
Introduction | 🦜️🔗 LangChain
LangChain is a framework for developing applications powered by large language models (LLMs).
python.langchain.com
'AI' 카테고리의 다른 글
10. Langchain-Embeddings (1) | 2025.03.24 |
---|---|
8. Langchain Document_Loader, Parser (0) | 2025.03.19 |
7. Langchain 캐싱(API 호출 비용 감소) (0) | 2025.03.17 |
6. Langchain Parser?? (0) | 2025.03.11 |
5. Lagnchain-prompt-template 생성 (0) | 2025.03.07 |