서브워드 토큰화
서브워드 토큰화 (Subword Tokenization)
1. 개요
서브워드 토큰화(Subword Tokenization)란 텍스트를 단어(Word)보다 작고 문자(Character)보다 큰 단위로 분할하여 처리하는 자연어 처리(NLP)의 토큰화 기법이다.
전통적인 토큰화 방식은 크게 두 가지 한계점을 가지고 있었다. * 단어 단위 토큰화(Word-level Tokenization): 공백이나 구두점을 기준으로 분리하는 방식으로, 어휘 사전(Vocabulary)의 크기가 지나치게 커지며, 사전에 없는 단어가 등장했을 때 이를 처리하지 못하는 OOV(Out-of-Vocabulary) 문제가 발생한다. * 문자 단위 토큰화(Character-level Tokenization): 모든 문자를 개별 토큰으로 처리하여 OOV 문제는 해결하지만, 개별 문자가 갖는 의미 정보가 부족하고 입력 시퀀스의 길이가 매우 길어져 모델의 연산 부담이 증가한다.
서브워드 토큰화는 빈번하게 등장하는 단어는 하나의 토큰으로 유지하고, 희귀한 단어는 의미 있는 하위 단위(Subword)로 쪼개어 저장함으로써 사전 크기를 효율적으로 관리하고 OOV 문제를 동시에 해결하기 위해 등장하였다.
2. 토큰화 전처리 단계
효과적인 서브워드 토큰화를 위해서는 원문 텍스트를 정제하는 전처리 과정이 필수적이다.
- 정규화(Normalization): 서로 다른 형태로 표기되었지만 의미가 같은 텍스트를 하나의 표준 형태로 통일하는 과정이다. (예: Unicode 정규화(NFC/NFD), 대소문자 통합, 전각/반각 문자 변환)
- 클리닝(Cleaning): 분석 목적에 불필요한 노이즈를 제거하는 단계이다. (예: HTML 태그 제거, 특수문자 제거, 불필요한 공백 제거)
- 분절(Segmentation): 언어적 특성에 따라 1차적으로 텍스트를 분리한다. 영어의 경우 공백 기준 분리가 일반적이나, 한국어와 같이 교착어 특성을 가진 언어는 형태소 분석기를 통한 사전 분절이 선행되기도 한다.
3. 작동 원리 및 핵심 개념
서브워드 토큰화의 핵심은 '빈도수 기반의 반복적 병합' 또는 '확률 기반의 최적 분할'에 있다.
- 빈도수 기반 분할: 텍스트 전체에서 가장 자주 함께 등장하는 문자열 쌍(Pair)을 찾아 하나의 새로운 토큰으로 병합하는 과정을 반복한다.
- 어휘 사전 관리: 고정된 크기의 사전(Vocabulary Size)을 설정하고, 빈도수가 높은 서브워드부터 차례대로 사전에 등록한다.
- Unknown Token 처리: 모든 단어를 최소 단위(문자)까지 쪼갤 수 있으므로, 이론적으로는 모든 입력 텍스트를 사전에 정의된 토큰들의 조합으로 표현할 수 있어
[UNK](Unknown) 토큰의 발생 빈도를 획기적으로 줄인다.
4. 주요 알고리즘
대표적인 서브워드 토큰화 알고리즘으로는 BPE, WordPiece, Unigram이 있다.
4.1 BPE (Byte Pair Encoding)
가장 빈번하게 등장하는 문자 쌍을 반복적으로 병합하는 Bottom-up 방식이다. GPT 시리즈에서 주로 사용된다.
[BPE 병합 과정 예시]
데이터셋에 다음과 같은 단어 빈도가 있다고 가정하자: low: 5, lower: 2, newest: 6, widest: 3
1. 초기 상태: 모든 단어를 문자 단위로 분리한다. (l o w, l o w e r, n e w e s t, w i d e s t)
2. 1단계 병합: 전체 데이터에서 가장 빈번한 쌍인 e와 s를 찾아 병합하여 es 토큰을 생성한다.
3. 2단계 병합: 그다음 빈도가 높은 es와 t를 병합하여 est 토큰을 생성한다.
4. 반복: 설정한 사전 크기에 도달할 때까지 이 과정을 반복하여 low, est와 같은 의미 있는 서브워드 단위를 구축한다.
4.2 WordPiece
BPE와 유사하게 병합을 수행하지만, 단순히 빈도수가 아닌 우도(Likelihood)를 기반으로 병합한다. 구체적으로는 '두 토큰을 합쳤을 때의 확률'과 '각각 따로 있을 때의 확률의 곱'의 비율(Ratio)을 최대화하는 쌍을 선택하여 병합한다. BERT 모델의 핵심 토큰화 방식이다.
특히 WordPiece는 분할된 서브워드 중 단어의 시작이 아닌 부분에 ## 접두사를 붙여 구분한다. 예를 들어 tokenization이 ['token', '##ization']으로 분할되었다면, ##ization은 독립적인 단어가 아니라 앞의 token에 붙어 있는 하위 단위임을 명시적으로 나타낸다. 이를 통해 나중에 토큰들을 다시 합쳐 원문을 복원할 때 정확한 경계를 알 수 있다.
4.3 Unigram
BPE/WordPiece와 반대로, 거대한 사전에서 시작하여 손실이 가장 적은 토큰을 제거해 나가는 Top-down 방식이다. T5 모델 등에서 활용된다.
4.4 알고리즘 비교
세 알고리즘의 핵심 차이점은 다음과 같다.
| 구분 | BPE | WordPiece | Unigram |
|---|---|---|---|
| 분할 기준 | 빈도수 기반 병합 | 우도(Likelihood) 기반 병합 | 확률 기반 제거 |
| 접근 방식 | Bottom-up | Bottom-up | Top-down |
| 특징 | 단순하고 효율적임 | 언어적 확률 모델 반영 | 확률적 최적화 가능 |
| 대표 모델 | GPT, RoBERTa | BERT, Electra | T5, ALBERT |
5. 구현 예시 및 프로세스
텍스트가 토큰화되어 모델에 입력되는 과정은 다음과 같다:
원문 텍스트 $\rightarrow$ 전처리 $\rightarrow$ 서브워드 분할 $\rightarrow$ 인덱싱(ID 변환)
Python 구현 예시 (HuggingFace tokenizers 활용)
from transformers import AutoTokenizer
# BERT 모델의 사전 학습된 토큰나이저 로드
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
text = "Tokenization is essential for NLP."
# 1. 토큰 분할 (Subword Tokenization)
tokens = tokenizer.tokenize(text)
print(f"Tokens: {tokens}")
# 결과 예시: ['token', '##ization', 'is', 'essential', 'for', 'nlp', '.']
# 2. 인덱싱 (Convert to IDs)
input_ids = tokenizer.convert_tokens_to_ids(tokens)
print(f"IDs: {input_ids}")
# 결과 예시: [19204, 7432, 2003, 4251, 2000, 17742, 1012]
[CLS] 토큰과 문장의 끝이나 구분을 나타내는 [SEP] 토큰과 같은 특수 토큰(Special Tokens)이 자동으로 추가되어 모델이 문장의 구조를 파악할 수 있게 한다.
6. 장점 및 한계점
6.1 장점
- OOV 문제 해결: 단어를 더 작은 단위로 쪼개어 표현하므로, 처음 보는 단어라도 구성 요소(서브워드)를 통해 의미를 유추하거나 처리할 수 있다.
- 효율적인 사전 크기: 단어 단위보다 훨씬 작은 사전 크기로도 방대한 양의 텍스트를 표현할 수 있어 메모리 효율성이 높다.
- 다국어 적용 용이: 언어별로 다른 단어 경계 규칙에 덜 의존하므로, 여러 언어를 동시에 처리하는 다국어 모델(Multilingual Model) 구축에 유리하다.
6.2 한계점
- 형태소 분석 부재: 통계적 빈도에 의존하므로, 언어학적인 형태소(Morpheme) 경계와 일치하지 않는 분할이 발생할 수 있다.
- 통계적 의존성: 학습 데이터의 빈도에 의존하므로, 희귀 단어의 경우 의미론적으로 부적절한 지점에서 분할될 수 있어 해석의 일관성이 떨어질 수 있다.
7. 관련 기술 및 발전 방향
7.1 한국어 특화 토큰화
한국어는 교착어로서 조사와 어미가 발달해 있어, 단순 서브워드 토큰화만으로는 한계가 있다. 이를 해결하기 위해 다음과 같은 도구를 혼합하여 사용한다.
* MeCab / KoNLPy: 형태소 분석기를 통해 먼저 의미 단위로 분절한 후, 그 결과물에 BPE나 WordPiece를 적용하는 하이브리드 방식을 사용한다.
* SentencePiece: 구글에서 개발한 라이브러리로, 공백을 하나의 문자(_)로 취급하여 사전 학습 단계에서 언어에 무관하게 토큰화를 수행할 수 있게 한다.
7.2 최신 기법 및 트렌드
- Byte-level BPE (BBPE): 문자 단위가 아닌 바이트(Byte) 단위로 BPE를 적용하여, 유니코드의 모든 문자를 처리할 수 있게 함으로써 사전 크기를 극단적으로 줄이고 OOV를 완전히 제거한다. (GPT-2 이후 표준)
- Token-free Models: 토큰화 과정에서 발생하는 정보 손실과 복잡성을 제거하기 위해, 텍스트를 바이트 시퀀스나 픽셀 단위로 직접 처리하려는 시도(예: CANINE, ByT5)가 이어지고 있다.
이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.