Tokenization
토큰화는 텍스트, 이미지, 오디오를 모델이 임베딩으로 변환하는 토큰으로 분할합니다. BPE와 기타 서브워드 기법, 이미지 패치, 토큰 비용을 다룹니다.
토큰화는 원시 입력을 모델이 읽는 이산 단위인 토큰 시퀀스로 변환하고, 각 토큰에 고정된 어휘의 정수 ID를 부여하는 단계입니다. 텍스트 토크나이저는 "The bus stopped."을 ID 네 개로 변환하고, 모델은 각 ID에 해당하는 임베딩 벡터를 조회합니다. 따라서 토크나이저는 대규모 언어 모델(LLM)이 단일 단위로 처리하는 대상을 결정합니다. 토큰은 모델의 컨텍스트 윈도우, 텍스트 생성 중 추론 지연 시간, API 요금의 기준 단위이기도 합니다. 같은 개념은 텍스트 외에도 적용됩니다. 비전 Transformer(ViT)는 이미지를 패치로 토큰화하고, 음성 모델은 오디오를 짧은 프레임으로 토큰화합니다.
서브워드 토큰화 작동 방식#
초기 자연어 처리(NLP)에서는 공백과 문장 부호를 기준으로 텍스트를 나눴기 때문에 드물거나 새로운 단어가 어휘에 포함되지 않는 문제가 있었습니다. 문자 단위 토큰화는 시퀀스가 지나치게 길어집니다. 최신 Transformer는 자주 쓰이는 단어는 온전히 유지하고 드문 단어는 재사용 가능한 조각으로 나누는 서브워드 토크나이저를 사용합니다. Sennrich 등이 2015년에 기계 번역에 맞게 적용한 바이트 페어 인코딩(BPE)은 학습 코퍼스에서 어휘를 학습합니다. 단일 문자나 바이트로 시작해 어휘가 목표 크기에 도달할 때까지 가장 자주 함께 나타나는 인접 쌍을 새 토큰으로 반복해서 병합합니다. 새로운 텍스트를 인코딩할 때는 학습된 병합을 순서대로 적용합니다.
GPT-2 이후 사용된 바이트 수준 BPE는 가능한 바이트 값 256개에서 시작하므로 알 수 없는 토큰 없이 모든 문자열, 이모지, 소스 파일을 인코딩할 수 있습니다. 다른 알고리즘은 토큰 조각을 다르게 선택합니다. BERT가 사용하는 WordPiece는 학습 데이터의 우도를 가장 크게 높이는 쌍을 병합합니다. Google의 SentencePiece 라이브러리에서 사용하는 Unigram 방식은 큰 후보 어휘에서 시작해 일부 항목을 제거하며, 공백을 일반 기호로 처리하므로 공백 없이 표기하는 언어에도 하나의 토크나이저를 사용할 수 있습니다. 어휘 크기는 시간이 지남에 따라 커졌습니다. BERT는 토큰 30,522개, GPT-2와 GPT-3는 50,257개, Llama 3는 128,256개를 사용하며, OpenAI의 o200k_base는 약 200,000개를 사용합니다. OpenAI의 tiktoken 라이브러리로 가장 오래된 어휘와 최신 어휘를 비교해 보겠습니다.
import tiktoken
# Byte-level BPE vocabularies from GPT-2 (2019) and GPT-4o (2024)
for name in ["gpt2", "o200k_base"]:
encoding = tiktoken.get_encoding(name)
print(f"{name}: {encoding.n_vocab:,} tokens in the vocabulary")
for text in ["Ultralytics YOLO26 detects buses.", "バスが止まった。"]:
ids = encoding.encode(text)
# Decode each ID on its own to see where the tokenizer split the text
pieces = [encoding.decode([i]) for i in ids]
print(f" {len(ids)} tokens: {pieces}")GPT-2의 어휘는 영어 문장에 토큰 11개를 사용하며 "Ultralytics"를 Ult, ral, y, tics으로 나눕니다. 반면 o200k_base는 토큰 9개를 사용합니다. 일본어 문장 "the bus stopped"의 경우 GPT-2는 토큰 9개를 사용하고 문자 止를 바이트 수준 토큰 두 개로 나눕니다. 이 토큰은 각각 단독으로 디코딩하면 대체 문자 �가 됩니다. 반면 o200k_base는 토큰 7개를 사용합니다.
토큰화와 관련 용어 비교#
- 토큰: 단어, 서브워드, 바이트, 이미지 패치, 오디오 프레임과 같이 토큰화로 생성되는 단위입니다.
- 임베딩: 모델이 각 토큰 ID에 대해 조회하는 학습된 벡터입니다. 토크나이저가 미리 정한 어휘를 기준으로 네트워크의 나머지 부분과 함께 학습됩니다.
- 기존 NLP의 단어 분할: spaCy 및 NLTK와 같은 라이브러리는 파싱 및 태깅을 위해 텍스트를 단어와 문장 부호로 나눕니다. 언어 분석을 위해 어간 추출이나 표제어 추출을 이어서 수행하는 경우가 많습니다.
- 데이터 보안에서의 토큰화: 결제 및 데이터 보호에서는 토큰화를 통해 카드 번호와 같은 민감한 값을 보호된 보관소에 저장되는 무작위 대체값으로 바꿉니다.
토큰 수가 중요한 이유#
영어 텍스트의 경우 OpenAI 토크나이저는 평균적으로 토큰당 약 4개의 문자를 처리하지만, 다른 언어와 코드는 훨씬 더 많은 토큰이 필요할 수 있습니다. Petrov 외(2023)는 동일한 텍스트를 여러 언어로 번역했을 때 토큰화된 길이가 최대 15배까지 차이 날 수 있으며, 이로 인해 해당 언어의 API 비용이 증가하고 사용 가능한 컨텍스트가 줄어든다는 사실을 발견했습니다. 토큰 경계는 모델이 볼 수 있는 내용에도 영향을 줍니다. "strawberry"를 몇 개의 여러 문자로 된 토큰으로 읽는 LLM은 각 문자를 직접 볼 수 없으며, o200k_base는 "3.14159"를 3, ., 141, 59로 나누므로 숫자 단위의 산술 연산이 더 어려워집니다. Meta의 Byte Latent Transformer와 같은 토크나이저 없는 설계는 고정 어휘를 사용하지 않고 다음 바이트의 예측 가능성에 따라 크기가 달라지는 패치로 원시 바이트를 묶습니다.
이미지, 오디오, 비디오의 토큰화#
ViT는 이미지를 고정 크기 패치로 나눕니다. 따라서 16×16픽셀 패치를 사용하면 224×224 이미지가 196개의 패치 토큰으로 변환됩니다. 각 패치는 평탄화된 다음 임베딩으로 선형 투영된 후 셀프 어텐션에 입력됩니다. 비전-언어 모델(VLM)은 텍스트 토큰과 함께 패치 임베딩을 LLM에 전달하므로, 이미지 해상도가 높아질수록 요청당 토큰 수도 증가합니다. 이미지 생성기는 흔히 대신 이산 시각 토큰을 사용합니다. 벡터 양자화 코드북은 각 패치를 가장 가까운 코드 벡터의 ID로 대체합니다. 이를 통해 시각 자기회귀 모델은 텍스트처럼 토큰 단위로 이미지를 생성할 수 있으며, 토큰 병합은 유사한 토큰을 결합해 긴 이미지 및 비디오 시퀀스의 토큰 수를 줄입니다.
비전 모델도 텍스트를 토큰화합니다. YOLOE-26이 set_classes을 통해 클래스 이름을 받으면, Ultralytics는 각 이름을 CLIP의 바이트 수준 BPE 토크나이저로 처리해 77개 토큰까지 패딩하거나 자릅니다. 그런 다음 Apple의 MobileCLIP2 텍스트 인코더가 결과를 임베딩으로 변환하고, 탐지 헤드가 이 임베딩을 이미지 영역과 비교합니다. 음성 인식에서는 OpenAI의 Whisper가 30초 오디오 윈도우를 로그 멜 스펙트로그램 프레임으로 변환하고, 인코더는 이를 1,500개 위치의 시퀀스로 처리합니다.










