Nathaniel

9. Langchain-RecursiveCharacterTextSplitter 본문

AI

9. Langchain-RecursiveCharacterTextSplitter

Nathaniel1 2025. 3. 22. 14:44

이 텍스트는 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