[텍스트 분석] tokenizers
유니코드 정규화
import unicodedata
NFD
unicodedata.normalize('NFD', unistr)
NFC
unicodedata.normalize('NFC', unistr)
준단어 토큰화
!pip install tokenizers
BPE 토크나이저 초기화 (미등록 어휘는 [UNK]
로 표시하도록 설정)
from tokenizers import Tokenizer
from tokenizers.models import BPE
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
빈 칸으로 끊어서 전처리하도록 설정
from tokenizers.pre_tokenizers import Whitespace
tokenizer.pre_tokenizer = Whitespace()
훈련 방법 설정
from tokenizers.trainers import BpeTrainer
trainer = BpeTrainer(vocab_size=30000,
special_tokens=["[UNK]"])
데이터 파일
import pandas as pd
df = pd.read_csv('news_ai.csv')
훈련
tokenizer.train_from_iterator(df.본문, trainer=trainer)
적용
enc = tokenizer.encode('자연어 처리는 재밌다')
토큰 아이디 보기
enc.ids
토큰 보기
enc.tokens
저장
tokenizer.save('bpe.json')
불러오기
tokenizer = Tokenizer.from_file("bpe.json")
풀어쓰기 + BPE
from tokenizers.normalizers import NFD
normalizer = NFD()
result = normalizer.normalize_str('자연어')
list(result)
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
tokenizer.pre_tokenizer = Whitespace()
tokenizer.normalizer = NFD()
Byte-level BPE
from tokenizers.pre_tokenizers import Sequence, ByteLevel
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
tokenizer.pre_tokenizer = Sequence([
Whitespace(), # 공백으로 분리 후
ByteLevel() # 바이트 단위로 분리
])