‹ Lecture 2 05 / 23

Byte-Pair Encoding

BPE는 자주 함께 등장하는 인접 기호를 하나로 묶어 표현 길이를 줄인다. 1994년 Philip Gage의 compression 기법에서는 반복되는 byte pair를 새 기호로 치환했고, 2016년 Sennrich et al.은 같은 반복 merge 아이디어를 Subword NMT에 사용했다. 라면과 달걀을 자주 함께 사면 묶음에 별도 barcode를 주듯, 자주 등장하는 조합에 하나의 token을 배정하는 것이다. 의미를 직접 이해해서 묶는 기준은 아니다.

Compression 예시 aaabdaaabac에서는 aa를 Z로 바꾸어 ZabdZabac, 이어 ab를 Y로 바꾸어 ZYdZYac를 얻는다. Tokenization의 t / h / e도 th, 이어 the로 합치면 3 characters를 1 token으로 표현할 수 있다. 희귀 입력은 작은 pieces로 남겨 두면서 빈번한 입력의 길이를 줄이는 것이 공통 아이디어다.

Learning the Merges

먼저 characters 또는 bytes를 base symbols로 정한다. 현재 corpus에서 인접 pair의 빈도를 세어 최대 pair를 고르고, 그 pair를 corpus 전체에서 merge한 뒤 ordered merge list에 기록한다. 이를 목표 Vocabulary에 도달할 때까지 반복한다.

중요한 것은 merge할 때마다 현재 pair 빈도를 다시 계산한다는 점이다. t와 가 t 하나로 합쳐졌다면 다음 단계에서 세는 이웃은 더 이상 s와 t가 아니라 s와 t_다. 이전 빈도표만 계속 사용하면 새 token이 만든 이웃 관계를 반영할 수 없다. 슬라이드의 “Repeat K times”는 반복을 간단히 나타낸 pseudocode이며, 실제 목표 Vocabulary에는 이미 있는 base symbols와 special IDs도 포함된다.

Worked Example

Toy corpus는 low ×5, lower ×2, newest ×6, widest ×3이며, _는 word-end marker다. 슬라이드의 tie-breaking 조건으로 선택한 merge 순서는 다음과 같다.

StepSelected pairCountNew token
1t + _6 + 3 = 9t_
2s + t_9st_
3e + st_9est_
4o + w5 + 2 = 7ow
5l + ow7low

est_는 한 번에 발견한 문자열이 아니라 e + (s + (t + _))라는 누적 결과다. 다섯 merge 뒤 슬라이드에서는 low가 1 token, lower가 low / e / r의 3 tokens, newest가 n / e / w / est_의 4 tokens, widest가 w / i / d / est_의 4 tokens로 표시된다. 이 표를 재현할 때는 base symbols뿐 아니라 word-end marker의 처리와 동률 pair의 선택 규칙도 같아야 한다.

Applying Merge Ranks

학습이 끝나면 새 입력에서 pair 빈도를 새로 학습하지 않는다. 저장한 rank, 즉 먼저 학습한 merge의 우선순위를 적용한다. 새 단어 lowest를 처리하면 다음처럼 앞 merge가 뒤 merge의 재료를 만든다.

Rank appliedCurrent pieces
Startl / o / w / e / s / t / _
1l / o / w / e / s / t_
2l / o / w / e / st_
3l / o / w / est_
4l / ow / est_
5low / est_
lowest⟶low+est_(5개 merge rank 적용)\mathtt{lowest}\longrightarrow \mathtt{low}+\mathtt{est\_}\quad\text{(5개 merge rank 적용)}

Vocabulary는 사용할 token의 목록이고, ordered merge ranks는 그 token을 어떤 우선순위로 만들지를 정한다. 그래서 Vocabulary만 있어서는 BPE를 완전히 재현할 수 없다. 같은 입력·전처리·rank라면 같은 분절이 나오며, 이 정보는 GPT-2의 vocab.json + merges.txt, Hugging Face의 tokenizer.json, SentencePiece의 .model 등에 저장된다.

Byte-Level BPE

GPT-2에서는 base를 characters 대신 256개의 byte symbols로 잡는다. 여기에 50,000 learned merges와 special token인 endoftext 하나를 더한다.

V=256+50,000+1=50,257(GPT-2)V=256+50{,}000+1=50{,}257\quad\text{(GPT-2)}

IDs 0–255는 byte symbols, 256–50,255는 merges, 50,256은 endoftext다. GPT-2 config의 vocab_size 50,257과 eos_token_id 50,256도 이 구성에 대응한다. Merge 후 token은 여러 bytes를 묶을 수 있으므로 byte-level이라는 말이 최종 token 하나당 반드시 1 byte라는 뜻은 아니다.

모든 Unicode text는 UTF-8 bytes로 표현할 수 있어, 학습된 큰 piece가 없더라도 byte fallback으로 내려가면 UNK 없이 나타낼 수 있다. 그러나 coverage 보장은 효율 보장이 아니다. 자주 등장하는 the는 1 token이 될 수 있지만, 뷁은 EB / B7 / 81의 3 byte tokens, 슬라이드의 emoji는 F0 / 9F / 98 / 80의 4 byte tokens로 내려갈 수 있다. 낯선 문자열을 표현할 수 있다는 것과 짧고 잘 학습된 표현으로 처리한다는 것은 별개다.

Boundaries Before Merging

Merge를 무제한으로 허용하면 단어 뒤 문장부호까지 별도 조합으로 외우게 된다. GPT-2는 먼저 regex로 contractions, letters, numbers, punctuation, whitespace chunks를 나누어 BPE가 작동할 범위를 정한다.

's|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+

예를 들어 dog! 2026 can’t는 dog / ! / 공백 2026 / 공백 can / ‘t의 5 chunks가 된다. d / o / g는 같은 chunk 안에서 dog로 합쳐져도 dog와 !는 경계를 넘어 dog!로 merge되지 않는다. 따라서 dog를 .이나 ? 앞에서도 같은 piece로 재사용할 수 있다.

숫자 chunk 규칙도 Tokenizer마다 다르다. GPT-2의 digit run에는 같은 길이 제한이 없지만, cl100k_base에서는 1–3 digits로 제한하여 2026을 202 / 6, 1234567을 123 / 456 / 7로 나눈다. 이 경계 규칙과 learned merge ranks가 함께 최종 분절을 결정한다.

Check

t+_의 count 9와 o+w의 count 7은 각각 어디서 나오는가?

Answer

t+_는 newest×6 + widest×3, o+w는 low×5 + lower×2에서 나온다. 앞 단계 merge 뒤 전체 pair를 다시 세어 다음 최대 pair를 고른다.

Vocabulary가 같아도 BPE 분절이 달라질 수 있는 조건은 무엇인가?

Answer

Pre-tokenization/Normalization 또는 merge rank가 다르면 달라질 수 있다. BPE inference에는 Vocabulary와 ordered merge ranks가 함께 필요하다.

새 문자열에 가능한 BPE merges가 여러 개일 때, 긴 piece를 먼저 고르면 안 되는 이유는?

Answer

학습에서 얻은 merge rank가 적용 순서를 정한다. 가능한 pair 중 rank가 앞선 merge를 적용하고 다시 가능한 pair를 확인한다. Frequency로 ranks를 학습하는 단계와 새 입력에 ranks를 적용하는 단계는 다르다.

절대 pair frequency로 인접 기호를 merge하고 inference에서 ordered ranks를 적용하는 방법은?

Answer

Byte-Pair Encoding (BPE). Pre-tokenization 경계를 넘지 않는 standard 설정과 함께 설명한다.

BPE 학습에서 pair 선택부터 다음 반복까지의 순서를 말하라.

Answer

현재 pair frequencies를 센다 → 최대 pair를 고른다 → ordered list에 추가하고 corpus를 merge한다 → frequencies를 다시 센다 → 목표 VV까지 반복한다.

BPE · WordPiece · Unigram LM를 축별로 비교하고 그 차이가 필요한 이유를 설명하세요.

Answer

같은 Subword 목표에도 무엇을 합치거나 제거하는지가 다르다.

기준: BPE=Pair frequency / WordPiece=Association score (교육용 근사) / Unigram LM=Corpus likelihood loss

방향: BPE=Bottom-up merge / WordPiece=Bottom-up merge / Unigram LM=Top-down prune

분절: BPE=Standard는 deterministic / WordPiece=Deterministic / longest match / Unigram LM=Sampling 가능; inference max

도구 관계: BPE=SentencePiece로 구현 가능 / WordPiece=BERT 계열 / Unigram LM=SentencePiece로 구현 가능

조건: SentencePiece는 BPE와 Unigram을 지원하는 toolkit이다.

Contents