주제: TK-3 SentencePiece (Language-Independent Tokenization)
BPE나 WordPiece를 먼저 배우면 SentencePiece도 비슷해 보일 수 있다. 하지만 핵심 차이는 전처리 철학이다. SentencePiece는 언어마다 단어 경계를 따로 정하지 않고, 공백까지 포함한 원문 문자열 자체에서 subword를 배운다.
그래서 공백 규칙이 영어처럼 명확하지 않은 언어나, 다국어를 한 모델로 처리해야 하는 상황에서 특히 강하다. 한국어 문서에서도 이 차이를 이해하면 왜 SentencePiece가 자주 쓰이는지 바로 연결된다.
BPE나 WordPiece를 배운 뒤 SentencePiece를 보면 비슷해 보이지만, 핵심 차이는 전처리 철학이다. 언어마다 단어 경계를 따로 정하지 않고, 공백까지 포함한 원문 문자열 자체에서 subword를 배운다. 그래서 다국어 환경이나 공백 규칙이 약한 언어에서 특히 강하다.
문제 설정
기존 토크나이저(BPE, WordPiece)는 대부분 공백 기반 단어 분리를 전제로 합니다. 하지만 일부 언어에서는 공백이 단어 경계를 정확히 나타내지 않습니다.
- 중국어
- 일본어
- 한국어
이 문제를 해결하기 위해 Google이 개발한 토크나이저가 SentencePiece입니다.
즉 SentencePiece는 tokenizer 앞에 별도의 language-specific pre-tokenizer를 두지 않아도 된다는 장점이 있다. 파이프라인이 더 단순해지고, 언어별 예외처리도 줄어든다.
즉 SentencePiece는 tokenizer 이전에 language-dependent pre-tokenizer를 두지 않아도 된다는 장점이 있다. 이 덕분에 한국어, 일본어, 중국어처럼 공백 규칙이 영어와 다른 언어에서도 더 일관된 파이프라인을 만들 수 있다.
직관 비유
- 기존 tokenizer -> 단어 먼저 자름
- SentencePiece -> 문자 스트림에서 바로 subword 학습
핵심 아이디어:
공백을 포함한 문자열 전체를 하나의 sequence로 보고 subword를 학습
1. Language-Independent Tokenization
SentencePiece는 입력 텍스트를 그대로 사용합니다.
예:
Hello world
SentencePiece 내부 표현:
▁Hello ▁world
기호 의미
- ▁ : 공백(space) 표시
왜 필요한가
- 언어별 전처리 필요 없음
- 다국어 모델 학습 가능
주의점
공백 자체도 토큰의 일부가 됩니다.
2. SentencePiece 학습 목표
SentencePiece는 다음 확률 모델을 사용합니다.
기호 의미
- token_i : subword 토큰
- P(token_i) : 토큰 확률
왜 필요한가
subword 분해가 문장의 확률을 잘 설명하도록 합니다.
주의점
실제 구현에서는 Unigram LM을 사용합니다.
3. Unigram Language Model
SentencePiece의 대표 알고리즘은 Unigram LM입니다.
문장을 여러 방식으로 분해할 수 있습니다.
예:
unbelievable
un + believable
unbel + iev + able
un + bel + iev + able
각 분해의 확률:
핵심 아이디어
확률이 가장 높은 token segmentation을 선택합니다.
주의점
token set은 반복적으로 pruning됩니다.
4. Normalization 전략
SentencePiece는 토큰화 전에 텍스트 정규화를 수행합니다.
대표적인 정규화:
- Unicode normalization
- 공백 처리
- 대소문자 정규화
수식 표현:
기호 의미
- x : 원본 텍스트
- x' : 정규화된 텍스트
왜 필요한가
텍스트 표현의 변형을 줄여 안정적인 토큰화를 제공합니다.
5. SentencePiece Tokenization 예
입력:
Machine learning is powerful
토큰:
▁Machine ▁learn ing ▁is ▁power ful
이 토큰은 ID로 변환됩니다.
기호 의미
- t_i : token id
- n : 토큰 길이
6. SentencePiece vs BPE
| 방법 | 특징 | 사용 모델 |
|---|---|---|
| BPE | 빈도 기반 merge | GPT |
| WordPiece | likelihood 기반 merge | BERT |
| SentencePiece | 언어 독립 tokenizer | T5, ALBERT |
7. SentencePiece 장점
- 언어 독립 tokenization
- 공백 기반 preprocessing 불필요
- 다국어 모델에 적합
코드-수식 연결
| 개념 | 라이브러리 코드 | 설명 |
|---|---|---|
| SentencePiece | sentencepiece.SentencePieceProcessor() |
토크나이저 로드 |
| encode | sp.encode(text) |
텍스트 -> 토큰 |
| train | spm.SentencePieceTrainer |
tokenizer 학습 |
자주 하는 오해 5개
- SentencePiece는 BPE와 동일한 알고리즘이라고 생각한다
- 공백은 tokenizer에서 제거된다고 생각한다
- SentencePiece는 영어에만 적합하다고 생각한다
- 토큰화 전에 반드시 단어 분리가 필요하다고 생각한다
- tokenization은 모델 성능에 큰 영향을 주지 않는다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- SentencePiece의 핵심 아이디어는 무엇인가?
- 왜 SentencePiece는 언어 독립적이라고 하는가?
- ▁ 기호는 무엇을 의미하는가?
- Unigram LM 기반 토큰 선택 방식은 무엇인가?
- SentencePiece가 다국어 모델에서 유리한 이유는 무엇인가?