PDF에 소제목이 존재한다면, 분할을 하지 않고 가져오는 것이 중요하다.
1. CharacterTextSplitter
- 분할 가능한 최소의 단위로 분할
- 소제목의 텍스트가 잘릴 수 있음. (소제목이 없는 PDF에서 사용)
- chunk_overlap을 충분히 설정해도 해결 불가
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = text_splitter.split_text(text)
2. RecursiveCharacterTextSplitter (추천)
- 주로 많이 사용되는 분할 방식
- 청크가 충분히 작아질 때까지 순서대로 분할
- 1. 단락 분할 2. 문장 분할 3. 단어 분할 순서로 분할 시도. 의미가 있다고 판단되면 분할 정지
- 텍스트의 의미를 최대한 유지하면서 분할할 수 있는 방법
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = text_splitter.split_text(text)
3. TokenTextSplitter
- 토큰 단위로 분할
- 한글 처리가 애매함 (한글 토크나이저인 Konlpy를 이용하면 해결가능. Kkma) KonlpyTextSplitter
- OpenAI, Hugging Face 등에서 사용하는 토크나이저와 연동
from langchain.text_splitter import TokenTextSplitter
text_splitter = TokenTextSplitter(chunk_size=200)
chunks = text_splitter.split_text(text)
4. HuggingFace (오픈소스 Model Hub)
- 다양한 토크나이저를 테스트 가능. 학습된 모델 제공
- 신조어나 특정 도메인 등에 대해 대응 가능
- 대표적으로 BPE, Subword Tokenizer , WordPiece 등
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespace
from tokenizers.processors import TemplateProcessing
# BPE 모델 초기화
tokenizer = Tokenizer(BPE())
# Trainer 초기화
trainer = BpeTrainer(vocab_size=30000, special_tokens=["<pad>", "<unk>", "<s>", "</s>"])
# Pre-tokenizer 설정
tokenizer.pre_tokenizer = Whitespace()
# 토크나이저 훈련
tokenizer.train(files, trainer)
// files 은 data
5. SemanticChunker
- 텍스트를 의미 유사성에 따라 분할
- chunk_size와 chunk_overlap과 같은 파라미터를 사용하지 않음(의미적으로 적절한 분석지점을 분할하기 때문)
(단점이 될 수 있음)
- 임베딩을 지정해주어야한다.
from langchain.text_splitter import RecursiveCharacterTextSplitter
text = "여기에 긴 텍스트가 들어갑니다."
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = text_splitter.split_text(text)
'Scientist > ML.DL' 카테고리의 다른 글
[LangChain] OpenAI 모델을 이용한 URL 챗봇 개발 (2) | 2024.11.20 |
---|---|
[LangChain] PDF Loader 종류 (0) | 2024.08.09 |
[ML/DL] LangChain이란? (0) | 2024.07.18 |
[ML/DL] NLP TF-IDF / Word2Vec (0) | 2024.07.18 |
[ML/DL] NLP 토크나이저 종류 (0) | 2024.07.17 |