logo

[텍스트 분석] 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() # 바이트 단위로 분리
])
Previous
kiwi