BPE 모델
BPE 모델
BPE(Byte-Pair Encoding)는 가장 널리 쓰이는 서브워드 토크나이제이션 알고리즘 중 하나예요. 문자로 시작해서, 말뭉치에서 가장 자주 함께 나타나는 문자(또는 토큰) 쌍을 반복적으로 병합해 새 토큰을 만들어요. 이 과정을 반복해 원하는 어휘 크기에 도달하면 멈춰요. BPE는 본 적 없는 단어도 여러 서브워드 토큰의 조합으로 만들어낼 수 있어서 unk(unknown) 토큰이 덜 생기고, 어휘를 작게 유지할 수 있는 장점이 있어요.
tokenizers에서 BPE 모델을 쓰는 방법을 살펴볼게요.
BPE 모델 생성
Tokenizer를 BPE 모델로 만드는 기본 형태예요. unk_token을 지정할 수 있어요.
from tokenizers import Tokenizer
from tokenizers.models import BPE
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
BPE로 토크나이저 훈련
BPE 어휘를 만들려면 BpeTrainer를 쓰고 special_tokens를 지정해요. 훈련 인자로 vocab_size(기본 30,000), min_frequency(기본 0) 등을 조절할 수 있어요.
from tokenizers.trainers import BpeTrainer
trainer = BpeTrainer(
special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"]
)
files = ["data/wikitext-103-raw/wiki.train.raw"]
tokenizer.train(files, trainer)
special token 순서가 ID를 결정해요. 훈련 전에 사전 토큰화를 넣으면 토큰이 여러 단어를 걸치지 않도록 보장할 수 있어요.
BPE의 동작
- 훈련 말뭉치에 있는 모든 문자를 토큰으로 시작해요.
- 가장 흔한 토큰 쌍을 식별하고 하나의 토큰으로 병합해요.
- 어휘(토큰 수)가 원하는 크기에 도달할 때까지 반복해요.
이 때문에 BPE는 서브워드 단위로 새 단어를 만들 수 있어요. 예를 들어 한 번도 본 적 없는 단어도 익숙한 서브워드 조각들의 조합으로 표현돼요.
어휘 파일에서 BPE 생성
기존 어휘 파일(vocab.json, merges.txt)이 있다면 BPE::from_file(러스트) 또는 파이썬에서 직접 구성해 만들 수 있어요. dropout(0.1), unk_token("[UNK]") 같은 설정을 조합해 커스텀 BPE를 만들 수 있어요.
더 알아보기
- 퀵스타트: Quicktour
- 파이프라인: The tokenization pipeline
- 구성 요소: Components