- LangChain에서 텍스트 데이터를 작은 단위로 나누어 AI 모델이 더 효율적으로 처리할 수 있게 해주는 중요한 도구
- 긴 텍스트를 여러 부분으로 분할하는 작업은 LLM 이 긴 문서나 여러 페이지에 걸친 데이터를 다룰 때 필수
- 모델이 메모리 제한 없이 텍스트를 분석하고, 질문에 대한 답변을 효율적으로 제공.
Text Splitters의 주요 개념
- 텍스트 분할의 필요성:
- 대형 언어 모델은 한 번에 처리할 수 있는 토큰(token) 수에 제한이 있습니다. 예를 들어, GPT-3는 한 번에 4096개의 토큰을 처리할 수 있는 제한이 있어요. 그래서 긴 문서나 텍스트는 이 한계를 넘지 않도록 적절히 나누어야 합니다.
- 긴 문서를 처리할 때, 텍스트를 작은 단위로 나누어 LLM이 더 잘 이해하고 응답할 수 있도록 도와줍니다.
- 분할 기준:
- Text Splitters는 텍스트를 여러 방식으로 나눌 수 있습니다. 예를 들어, 문단 단위, 문장 단위, 특정 길이 등 다양한 기준에 따라 텍스트를 분할할 수 있어요.
- 분할 방법:
- Character Text Splitter: 텍스트를 문자 수로 나누는 방법입니다. 예를 들어, 텍스트가 1000자일 때 이를 200자씩 5개의 부분으로 나누는 식입니다.
- Token Text Splitter: 텍스트를 토큰 수 기준으로 나눕니다. LLM은 텍스트를 처리할 때 토큰 단위로 나누어 작업하기 때문에, 토큰 단위 분할이 중요한 경우가 많습니다.
- Recursive Text Splitter: 문단을 먼저 기준으로 나누고, 필요한 경우 다시 더 작은 단위로 나누는 방법입니다. 이 방식은 텍스트의 문맥을 최대한 보존하면서도 효율적으로 분할하는 데 유용합니다.
- 문맥 보존:
- 텍스트를 분할할 때 중요한 점은 문맥을 잃지 않는 것입니다. 너무 작은 단위로 텍스트를 나누면 문맥이 끊길 수 있기 때문에, Text Splitters는 문장을 자연스럽게 연결하는 방식을 사용해 분할합니다. 예를 들어, 문단 단위로 나누거나 문장이 끊기지 않도록 문장 단위로 분할하는 방식입니다.
- 사용 예시:
- 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 |