본문으로 건너뛰기

토크나이저와 BPE (기술 심화)

:::note 전제 03. 동작 원리에서 "토큰"의 개념을 봤다는 가정하에, 이 문서는 토큰이 실제로 어떻게 만들어지는지를 다룹니다. 모든 계산(어텐션)의 입구에 해당합니다. :::

1. 왜 토크나이저가 필요한가​

모델은 글자도 단어도 아닌 정수 ID 배열만 다룹니다. 토크나이저는 텍스트 ↔ ID를 변환하는 사전입니다.

"보안" ──(encode)──▶ [15329, 8842] ──모델──▶ ... ──(decode)──▶ "보안"

선택지는 세 가지였습니다.

단위문제
글자(char)시퀀스가 너무 길어짐(비효율), 의미 단위 약함
단어(word)어휘집 폭발, 오타·신조어·미등록어(OOV) 처리 불가
서브워드(subword)둘의 절충 — 현대 LLM의 표준

2. BPE(Byte-Pair Encoding) — 핵심 알고리즘​

가장 널리 쓰이는 서브워드 방식. 자주 같이 나오는 쌍을 반복해 병합해 어휘집을 만듭니다.

학습(어휘집 생성) 과정:

초기: 모든 글자를 토큰으로 시작
low, lower, newest, widest ...
→ l o w / l o w e r / n e w e s t ...

반복: 가장 빈번한 "인접 쌍"을 하나로 병합
1회: (e, s) 가 가장 많음 → "es" 생성
2회: (es, t) → "est"
3회: (l, o) → "lo"
...목표 어휘집 크기에 도달할 때까지 반복

추론(인코딩) 시에는 학습된 병합 규칙을 순서대로 적용해 텍스트를 토큰으로 쪼갭니다.

:::info 변형

  • Byte-level BPE (GPT 계열): 유니코드 글자가 아니라 바이트 단위에서 BPE → 어떤 문자(이모지·희귀문자)도 OOV 없이 표현
  • WordPiece (BERT): 병합 기준이 빈도가 아니라 우도(likelihood) 증가량
  • SentencePiece (다국어): 공백도 기호(▁)로 다뤄 언어 구분 없이 처리 :::

3. 어휘집(Vocabulary)​

  • 어휘집 크기는 보통 3만~30만(예: 32k, 100k, 256k)
  • 각 토큰 ID는 어텐션 문서의 임베딩 테이블 행과 1:1 대응
  • 특수 토큰 존재: <bos>(시작), <eos>(끝), <pad>, <unk>, 그리고 채팅 템플릿용 역할 토큰

4. 한국어가 토큰을 더 쓰는 이유​

같은 의미라도 한국어가 영어보다 토큰을 많이 소비합니다.

"security" → [sec][urity] 2토큰
"보안" → [보][안] 또는 [보안] 1~2토큰(모델별)
"정보보호" → [정][보][보][호] 가능 최대 4토큰

원인:

  • 영어 중심으로 학습된 어휘집은 영어 서브워드가 풍부, 한국어는 글자 단위로 쪼개지기 쉬움
  • byte-level BPE에서 한글 1글자 = UTF-8 3바이트 → 더 잘게 나뉠 수 있음

영향:

  • 비용(토큰당 과금)과 컨텍스트 길이 한계가 한국어에서 불리
  • 다국어·한국어 특화 토크나이저를 쓰는 모델이 한국어 효율이 좋음

5. 실무에서 알아둘 점​

  • 토큰 ≠ 글자 수: 길이 제한·비용 계산은 토큰 기준
  • 토크나이저가 다르면 같은 문장도 토큰 수가 다름 → 모델 간 비용 비교 시 주의
  • 코드·숫자·공백 처리 방식이 모델마다 달라 성능 차이를 만듦

6. 요약​

개념한 줄
토크나이저텍스트 ↔ 정수 ID 변환 사전
BPE빈번한 쌍을 반복 병합해 서브워드 어휘집 생성
byte-level바이트 단위라 OOV 없음(GPT 계열)
어휘집토큰 ID ↔ 임베딩 행 1:1
한국어 비효율어휘집 편향·UTF-8 바이트로 토큰 수 ↑