본문 바로가기
AI ( Artificial Intelligence )

Text Splitters

by 크라00 2024. 10. 25.

- LangChain에서 텍스트 데이터를 작은 단위로 나누어 AI 모델이 더 효율적으로 처리할 수 있게 해주는 중요한 도구

- 긴 텍스트를 여러 부분으로 분할하는 작업은 LLM 이 긴 문서나 여러 페이지에 걸친 데이터를 다룰 때 필수

- 모델이 메모리 제한 없이 텍스트를 분석하고, 질문에 대한 답변을 효율적으로 제공.

Text Splitters의 주요 개념

  1. 텍스트 분할의 필요성:
    • 대형 언어 모델은 한 번에 처리할 수 있는 토큰(token) 수에 제한이 있습니다. 예를 들어, GPT-3는 한 번에 4096개의 토큰을 처리할 수 있는 제한이 있어요. 그래서 긴 문서나 텍스트는 이 한계를 넘지 않도록 적절히 나누어야 합니다.
    • 긴 문서를 처리할 때, 텍스트를 작은 단위로 나누어 LLM이 더 잘 이해하고 응답할 수 있도록 도와줍니다.
  2. 분할 기준:
    • Text Splitters는 텍스트를 여러 방식으로 나눌 수 있습니다. 예를 들어, 문단 단위, 문장 단위, 특정 길이 등 다양한 기준에 따라 텍스트를 분할할 수 있어요.
  3. 분할 방법:
    • Character Text Splitter: 텍스트를 문자 수로 나누는 방법입니다. 예를 들어, 텍스트가 1000자일 때 이를 200자씩 5개의 부분으로 나누는 식입니다.
    • Token Text Splitter: 텍스트를 토큰 수 기준으로 나눕니다. LLM은 텍스트를 처리할 때 토큰 단위로 나누어 작업하기 때문에, 토큰 단위 분할이 중요한 경우가 많습니다.
    • Recursive Text Splitter: 문단을 먼저 기준으로 나누고, 필요한 경우 다시 더 작은 단위로 나누는 방법입니다. 이 방식은 텍스트의 문맥을 최대한 보존하면서도 효율적으로 분할하는 데 유용합니다.
  4. 문맥 보존:
    • 텍스트를 분할할 때 중요한 점은 문맥을 잃지 않는 것입니다. 너무 작은 단위로 텍스트를 나누면 문맥이 끊길 수 있기 때문에, Text Splitters는 문장을 자연스럽게 연결하는 방식을 사용해 분할합니다. 예를 들어, 문단 단위로 나누거나 문장이 끊기지 않도록 문장 단위로 분할하는 방식입니다.
  5. 사용 예시:
    • PDF나 긴 문서에서 텍스트를 추출한 후, 텍스트를 여러 부분으로 나누어 요약하거나 질문에 답변하는 시스템을 만들 때 사용됩니다.
    • 긴 텍스트 데이터를 AI 모델이 처리할 수 있는 크기로 나누는 데 유용하며, 이를 통해 문서의 모든 내용을 다루면서도 효율적인 분석이 가능해집니다.

 

Text Splitters의 활용 예시

 

from langchain.text_splitter import CharacterTextSplitter

# 긴 텍스트를 정의
long_text = "This is a very long document that needs to be split into smaller chunks for better processing. " \
            "Each chunk will be processed separately, making it easier for large language models to handle."

# CharacterTextSplitter를 사용하여 텍스트를 50자 단위로 분할
text_splitter = CharacterTextSplitter(chunk_size=50, chunk_overlap=10)
chunks = text_splitter.split_text(long_text)

# 분할된 텍스트 확인
for chunk in chunks:
    print(chunk)

 

결과:

 

This is a very long document that needs to be split
to be split into smaller chunks for better processin
g. Each chunk will be processed separately, making i
making it easier for large language models to handle

 

 

이 코드에서는 긴 텍스트를 50자 단위로 나누었으며, 각 분할된 부분은 약간의 중복을 포함하고 있습니다. 이는 문맥을 유지하기 위한 방식으로, chunk_overlap=10이 중복되는 부분을 설정한 것입니다.

 

Recursive Text Splitter 예시

 

from langchain.text_splitter import RecursiveCharacterTextSplitter

# 긴 텍스트를 문단 및 문장 단위로 나누기
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
chunks = text_splitter.split_text(long_text)

for chunk in chunks:
    print(chunk)

 

이 방법은 텍스트를 먼저 문단 단위로 나누고, 만약 그 문단이 너무 길면 문장 단위로 다시 나누어 문맥을 최대한 보존하면서 텍스트를 처리할 수 있게 합니다.

 

주요 기능 및 장점

  • 문맥 유지: 문장을 자연스럽게 연결해 문맥을 유지하면서 텍스트를 분할함.
  • 다양한 분할 기준: 토큰 수, 문자 수, 문장, 문단 등 다양한 기준으로 텍스트를 나눌 수 있음.
  • 효율적인 처리: 긴 텍스트를 적절히 나누어 대형 언어 모델이 더 쉽게 처리할 수 있도록 함.
  • 중복 처리: 각 텍스트 조각에 약간의 중복을 포함시켜, 문장이 자연스럽게 연결되도록 분할함.

Text Splitters의 활용 사례

  • 질문 답변 시스템: 긴 문서를 작은 조각으로 나누고, 그 조각들에 대한 질문을 처리해 사용자가 원하는 답변을 제공할 수 있습니다.
  • 문서 요약: 긴 보고서나 기사를 여러 부분으로 나눈 후 각 부분을 요약해 전체 내용을 파악할 수 있도록 도와줍니다.
  • 데이터 전처리: 데이터 분석 과정에서 긴 텍스트 데이터를 효율적으로 나누어 처리하기 쉽게 만듭니다.

 

'AI ( Artificial Intelligence )' 카테고리의 다른 글

Streaming module  (0) 2024.10.31
Retrievers  (0) 2024.10.29
Document Loader  (4) 2024.10.23
Retrieval-Augmented Generation (RAG)  (1) 2024.10.22
Vector ( 벡터 ) ( AI :: Embeding :: Vector )  (5) 2024.10.18