Professional Field

SQL(ORACLE) | AI | BI | 통계분석

Scientist/ML.DL

[LangChain] Text Splitter 종류

K_CY 2024. 8. 9. 14:30

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