← all posts
AI 2026.05.03 · 12 min read Intermediate

Tokenizer는 왜 Subword를 선택했는가

OOV 문제의 본질부터 BPE·WordPiece·Unigram·SentencePiece의 설계 철학까지, 현대 LLM이 Subword를 표준으로 삼은 이유를 추적한다.


NLP 파이프라인의 첫 번째 결정은 텍스트를 어떤 단위로 쪼개느냐다. 이 결정이 모델의 어휘 크기, 시퀀스 길이, OOV 처리 방식을 모두 규정한다. 그렇다면 왜 GPT, BERT, LLaMA는 모두 “Subword”라는 같은 답에 도달했는가?

문제: Word-level은 왜 실패하는가

전통적인 Word-level 토크나이저는 직관적이다. "the cat sat"[the, cat, sat]. 그런데 두 가지 벽에 부딪힌다.

첫째, OOV 문제다. 학습 코퍼스에 없는 단어는 전부 <UNK>로 뭉쳐진다. 신조어, 고유명사, URL, 숫자 표기 — 세상은 끊임없이 새 단어를 만들어낸다. Heaps’ Law는 이 문제가 코퍼스를 키워도 사라지지 않음을 수학적으로 보여준다.

V(N)KNβ,β[0.5,0.7]V(N) \approx K \cdot N^\beta, \quad \beta \in [0.5, 0.7]

어휘 크기 VV는 코퍼스 크기 NN의 sub-linear 함수다. 즉, 아무리 데이터를 쌓아도 새 어휘가 계속 등장하며, OOV rate는 결코 0이 되지 않는다.

둘째, 형태소 풍부 언어의 어휘 폭발이다. 한국어는 agglutinative 언어다. 어간 “먹”에서 파생되는 활용형은 수백 개에 이른다. 전체 한국어 word-level 어휘는 이론상 10910^9 ~ 101510^{15} 규모로, 어떤 임베딩 행렬도 수용할 수 없다.

세 접근의 트레이드오프

Word, Character, Subword — 세 접근은 서로 다른 지점에서 타협한다.

                  Sequence length   Vocab size   OOV
Word-level:           1x             ~1M+        Many
Subword (BPE):        ~1.5x          32k-50k     None
Character:            ~5x            ~100        None

Character-level은 OOV를 완전히 없애지만, 시퀀스가 5배 이상 길어진다. Transformer의 self-attention은 O(n2)O(n^2)이다. GPT-3가 character-level을 채택했다면 학습 compute는 약 25배 증가했을 것이다 — 사실상 불가능하다.

Subword는 이 사이의 sweet spot이다. 자주 등장하는 단어는 단일 토큰으로, 희귀하거나 새로운 단어는 subword의 조합으로 표현한다. Vocab 크기는 32k50k로 제어되고, 시퀀스 길이는 word-level 대비 약 1.31.5배다.

OOV를 0으로 만드는 보장

Subword 어휘가 모든 개별 문자(또는 바이트)를 포함하면, 어떤 입력도 worst-case에 문자 단위 분해로 토크나이즈 가능하다. OOV는 원리적으로 0이 된다.

BPE와 WordPiece: Bottom-up의 두 철학

알고리즘의 층위에서 BPE와 WordPiece는 같은 방향 — bottom-up merge — 을 향하면서도 다른 기준으로 쌍을 선택한다.

BPE (Sennrich 2016)는 순수한 빈도 기반이다. 매 iteration마다 코퍼스에서 가장 자주 인접하는 토큰 쌍을 병합한다.

(a,b)=argmax(a,b)wwc(w)#(a,b in w)(a^*, b^*) = \arg\max_{(a, b)} \sum_{w} \text{wc}(w) \cdot \#(a, b \text{ in } w)

WordPiece (Schuster & Nakajima 2012)는 likelihood gain을 기준으로 삼는다. 병합 후 코퍼스 likelihood를 가장 많이 높이는 쌍을 선택하는 것인데, 이 criterion은 결국 PMI와 동치다.

scoreWP(a,b)=c(ab)c(a)c(b)argmaxPMI(a,b)\text{score}_{\text{WP}}(a, b) = \frac{c(ab)}{c(a) \cdot c(b)} \equiv \arg\max \,\mathrm{PMI}(a, b)

실질적 차이는 이렇다. BPE는 (the, of)처럼 자주 등장하지만 의미적으로 독립적인 쌍도 우선 병합한다. WordPiece는 PMI가 높은 — 즉 두 토큰이 개별 빈도 이상으로 함께 등장하는 — 의미적 결합을 우선한다. 그 결과 BERT 계열은 WordPiece를, GPT 계열은 BPE를 채택했다. 그러나 Bostrom & Durrett 2020의 실험에서 두 알고리즘의 BLEU·perplexity 차이는 1% 이내다. 어휘 선택 알고리즘의 차이보다 코퍼스 규모와 모델 크기가 훨씬 큰 변수다.

Unigram LM: Top-down과 확률적 분절

BPE와 WordPiece가 작은 어휘에서 시작해 병합으로 어휘를 키우는 반면, Unigram LM (Kudo 2018)은 반대 방향이다. 큰 초기 어휘에서 시작해 contribution이 낮은 토큰을 EM + pruning으로 제거한다.

핵심은 분절의 확률 모델이다. 분절 x=(t1,,tn)\boldsymbol{x} = (t_1, \ldots, t_n)의 likelihood를 다음으로 정의한다.

P(x)=i=1np(ti)P(\boldsymbol{x}) = \prod_{i=1}^n p(t_i)

최적 분절은 Viterbi로 구한다. 더 중요한 것은 Subword Regularization — 학습 중 최적 분절 대신 확률에 따라 샘플링한 다양한 분절을 사용함으로써, 모델이 하나의 토크나이제이션에 과적합하지 않도록 한다. NMT에서 BLEU +1.5의 향상이 보고됐다.

SentencePiece: Language-agnostic의 완성

BPE와 WordPiece는 whitespace를 단어 경계로 가정하는 pre-tokenization에 의존한다. 이는 공백이 모호한 한국어, 공백이 없는 중국어·일본어에서 즉각 한계를 드러낸다.

SentencePiece (Kudo & Richardson 2018)는 이 가정을 제거한다. 공백을 특수 문자 (U+2581)로 치환한 뒤, 전체 텍스트를 바이트 스트림으로 다루고 BPE 혹은 Unigram 백엔드로 subword를 학습한다.

"안녕 세계" → "▁안녕▁세계" → ["▁안", "녕", "▁세계"]

Detokenization도 단순하다. 토큰을 이어 붙인 뒤 를 공백으로 치환하면 원본이 정확히 복원된다.

decode(encode(x))=x\text{decode}(\text{encode}(x)) = x

LLaMA 1/2/3, T5, mT5, ALBERT, Whisper — 현대 LLM의 표준이 SentencePiece로 수렴한 이유가 여기 있다.

정리

  • OOV는 Heaps’ Law가 보장하듯 어떤 word-level 어휘로도 근본적으로 해결되지 않는다. Subword만이 OOV를 원리적으로 0으로 만든다.
  • BPE(빈도 기반)와 WordPiece(PMI 기반)는 다른 기준으로 병합하지만 실전 품질 차이는 미미하다. 알고리즘보다 코퍼스와 규모가 더 큰 변수다.
  • Unigram LM은 확률적 분절과 Subword Regularization으로 모델의 토크나이제이션 강건성을 높인다.
  • SentencePiece는 whitespace 의존성을 제거해 다국어 처리를 통일했다. 단, language-agnostic 알고리즘이 language-fair 결과를 자동으로 보장하지는 않는다.

Tokenizer는 텍스트를 조각내는 도구이기 이전에, 어떤 언어와 어떤 사용자에게 능력을 배분할지를 결정하는 정책이다.