자연어처리(NLP)에서 문장을 토큰 단위로 쪼개는 토크나이저(tokenizer)는 모델 성능에 직접적인 영향을 줍니다.
특히 BPE(Byte Pair Encoding) 방식의 토크나이저는 두 가지 주요 전략이 존재합니다:
두 방식은 같은 "병합 중심 구조"를 가졌지만 시작 단위와 적용 방식이 다르며,
GPT 같은 최신 모델에서는 바이트 레벨 BPE를 선호합니다.
아래에서 차이점과 예시, 장단점을 살펴보겠습니다.
"행복"
→ ['행', '복']
→ 병합 후 ['행복']
"hello"
→ [0x68, 0x65, 0x6C, 0x6C, 0x6F]
→ ["h", "e", "l", "l", "o"]
"hello hello"
["h", "e", "l", "l", "o", " ", "h", "e", "l", "l", "o"]
→ [0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x68, 0x65, 0x6C, 0x6C, 0x6F]
'l' + 'l'
→ 'll'
'll' + 'o'
→ 'llo'
'e' + 'll'
→ 'ell'
'h' + 'ell'
→ 'hell'
점차
"hello"
라는 하나의 단어가 하나의 토큰으로 압축됩니다.
"가"
"가"
= U+AC00 → UTF-8: [0xEA, 0xB0, 0x80]
초기 토큰: ["0xEA", "0xB0", "0x80"]
병합 순서 예:
→ 병합 1: ["0xEAB0", "0x80"]
→ 병합 2: ["0xEAB080"] (최종 토큰: "가")
한글, 이모지 등도 많이 등장하면 하나의 토큰으로 병합됨
→ 다국어 처리에 매우 유리!
구분 | 유니코드 문자 기반 BPE | 바이트 레벨 BPE |
---|---|---|
시작 단위 | 유니코드 문자 | UTF-8 바이트 |
장점 | 직관적, 언어 특화 가능 | 범용성, 모든 문자 처리 가능 |
단점 | OOV 문제, 사전 큼 | 덜 직관적, 해석 어려움 |
대표 예 | Google BERT, SentencePiece | OpenAI GPT-2/3 |
유니코드 문자 기반 BPE는 사람이 이해하기 쉽고,
바이트 레벨 BPE는 기계가 어떤 문자든 다룰 수 있게 도와줍니다.
GPT처럼 다국어와 특수문자까지 전부 다뤄야 하는 모델에서는 바이트 레벨 BPE가 핵심 전략입니다.