Byte-Pair Encoding은 가장 널리 쓰이는 subword 알고리즘. 원래 1994년 Philip Gage의 데이터 압축 기법이었는데, 2016년 Sennrich/Haddow/Birch가 NMT에 가져와서 지금은 GPT-2/3/4/5(tiktoken 통해), Llama 3, RoBERTa, Qwen이 다 굴리고 있어.
학습(vocab 구축)
- 학습 코퍼스에 등장하는 모든 개별 문자(또는 byte-level BPE면 바이트)로 vocab 초기화.
- 코퍼스에서 인접 토큰 쌍 전부 세.
- 가장 빈번한 쌍을 찾아서 새 토큰 하나로 병합, vocab에 추가.
- 새 토큰으로 코퍼스 갱신, 원하는 vocab 크기까지 반복.
bottom-up이야 — 최대 세분(문자 하나 = 토큰 하나)에서 시작해서 점진적으로 합쳐. 모든 병합이 우선순위 순서로 기록되고, 추론 시엔 같은 순서로 적용해서 새 텍스트를 인코딩.
Byte-level BPE (BBPE)
GPT-2가 비튼 게 있어 — Unicode 문자에서 시작하는 대신 raw byte에서 시작. 그래서 상상 가능한 모든 입력(이모지, control character, malformed text)이 표현 가능, OOV 위험 0. 비용: 이모지/CJK 문자가 1토큰이 아니라 여러 토큰. GPT 전부, Llama 3, 그리고 대부분의 모던 서구권 tokenizer가 byte-level BPE.