🤖 AI/ML

토큰

Token

LLM이 처리하는 텍스트의 기본 단위. 단어나 서브워드. 컨텍스트 윈도우 크기 결정.

📖 상세 설명

토큰(Token)은 대규모 언어 모델(LLM)이 텍스트를 처리하는 기본 단위입니다. 모델은 텍스트를 단어, 서브워드(subword), 또는 문자 수준의 조각으로 분할하여 처리하는데, 이 각각의 조각이 토큰입니다. 영어에서는 평균적으로 1개 토큰이 약 4글자(0.75단어)에 해당하고, 한국어는 형태소 특성상 1글자당 1-2토큰이 사용되는 경우가 많습니다.

토큰화(Tokenization)의 역사는 자연어 처리의 발전과 함께합니다. 초기에는 공백 기반 단어 분리나 문자 단위 분리가 사용되었지만, 2016년 BPE(Byte Pair Encoding)가 등장하면서 서브워드 토큰화가 표준이 되었습니다. 이후 WordPiece(BERT), SentencePiece(T5), Tiktoken(GPT) 등 다양한 토크나이저가 개발되었습니다. 2024-2025년에는 Llama 3의 128K 어휘와 Claude의 개선된 다국어 토큰화가 주목받고 있습니다.

토큰화는 LLM의 성능과 비용에 직접적인 영향을 미칩니다. 어휘 크기(vocabulary size)가 클수록 더 적은 토큰으로 같은 텍스트를 표현할 수 있어 효율적이지만, 임베딩 테이블 크기도 커집니다. GPT-4는 약 100K 어휘를 사용하고, Llama 3는 128K 어휘로 다국어 효율성을 높였습니다. 토큰 수는 API 비용(입력/출력 토큰당 과금), 컨텍스트 윈도우 한계, 응답 속도에 모두 영향을 줍니다.

실무에서 토큰은 프롬프트 엔지니어링과 비용 최적화의 핵심입니다. 긴 문서를 처리할 때는 토큰 수를 미리 계산하여 컨텍스트 윈도우를 초과하지 않도록 해야 하고, 청킹(chunking) 전략을 수립해야 합니다. 또한 특수 토큰(BOS, EOS, PAD 등)의 역할을 이해해야 모델을 올바르게 활용할 수 있습니다. OpenAI의 tiktoken, Hugging Face의 tokenizers 라이브러리가 실무에서 널리 사용됩니다.

💻 코드 예제

다양한 토크나이저 활용 예제입니다.

# OpenAI tiktoken 토크나이저
# pip install tiktoken

import tiktoken

# GPT-4 토크나이저 로드
enc = tiktoken.encoding_for_model("gpt-4")

# 텍스트 토큰화
text = "안녕하세요, 인공지능 토큰화를 알아봅시다!"
tokens = enc.encode(text)

print(f"원본 텍스트: {text}")
print(f"토큰 수: {len(tokens)}")
print(f"토큰 ID: {tokens}")

# 각 토큰을 텍스트로 디코딩
for token_id in tokens:
    token_text = enc.decode([token_id])
    print(f"  {token_id} -> '{token_text}'")

# 토큰 수 미리 계산 (비용 예측용)
def estimate_tokens(text, model="gpt-4"):
    enc = tiktoken.encoding_for_model(model)
    return len(enc.encode(text))

long_text = "..." * 100
print(f"\n긴 텍스트 토큰 수: {estimate_tokens(long_text)}")

# 토큰 제한에 맞게 텍스트 자르기
def truncate_to_tokens(text, max_tokens, model="gpt-4"):
    enc = tiktoken.encoding_for_model(model)
    tokens = enc.encode(text)
    if len(tokens) > max_tokens:
        tokens = tokens[:max_tokens]
    return enc.decode(tokens)

truncated = truncate_to_tokens(text, 10)
print(f"잘린 텍스트: {truncated}")

Hugging Face Transformers 토크나이저 예제입니다.

# Hugging Face 토크나이저
# pip install transformers

from transformers import AutoTokenizer

# 다양한 모델의 토크나이저
models = {
    "GPT-2": "gpt2",
    "BERT": "bert-base-uncased",
    "Llama": "meta-llama/Llama-2-7b-hf",
    "Korean": "beomi/kcbert-base"
}

text_en = "Hello, this is a tokenization example."
text_ko = "안녕하세요, 토큰화 예제입니다."

for name, model_id in models.items():
    try:
        tokenizer = AutoTokenizer.from_pretrained(model_id)
        tokens_en = tokenizer.encode(text_en)
        tokens_ko = tokenizer.encode(text_ko)

        print(f"\n{name} 모델:")
        print(f"  영어 토큰 수: {len(tokens_en)}")
        print(f"  한국어 토큰 수: {len(tokens_ko)}")
        print(f"  어휘 크기: {tokenizer.vocab_size:,}")
    except:
        print(f"\n{name} 모델: 로드 실패 (인증 필요)")

# 특수 토큰 확인
tokenizer = AutoTokenizer.from_pretrained("gpt2")
print(f"\n특수 토큰:")
print(f"  BOS (시작): {tokenizer.bos_token}")
print(f"  EOS (종료): {tokenizer.eos_token}")
print(f"  PAD (패딩): {tokenizer.pad_token}")
print(f"  UNK (미지): {tokenizer.unk_token}")

# 배치 토큰화 (패딩 포함)
texts = ["짧은 문장", "이것은 조금 더 긴 문장입니다."]
encoded = tokenizer(texts, padding=True, return_tensors="pt")
print(f"\n배치 토큰화 결과:")
print(f"  input_ids shape: {encoded['input_ids'].shape}")

📊 성능 & 비용

2025년 1월 기준 주요 LLM API 토큰 가격입니다.

모델 입력 (1M 토큰) 출력 (1M 토큰) 컨텍스트
GPT-4o $2.50 $10.00 128K
GPT-4o-mini $0.15 $0.60 128K
Claude 3.5 Sonnet $3.00 $15.00 200K
Gemini 1.5 Pro $1.25 $5.00 2M

언어별 토큰 효율성 비교 (같은 의미의 문장):

언어 GPT-4 토큰 Llama 3 토큰 효율성
영어 ~15 ~12 가장 효율적
한국어 ~35 ~25 영어 대비 2-3배
일본어 ~40 ~30 영어 대비 2-3배
중국어 ~25 ~20 영어 대비 1.5-2배

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"RAG 시스템에서 문서를 500토큰 단위로 청킹하고 있는데, 한국어는 토큰 효율이 낮아서 실제 텍스트 양은 영어의 절반 정도입니다. 청크 사이즈를 조정하거나 문자 수 기준으로 변경하는 것을 검토 중입니다."
💬 면접에서
"BPE 토크나이저의 작동 원리를 설명하면, 먼저 개별 문자로 시작해서 가장 빈번한 문자 쌍을 반복적으로 병합합니다. 이렇게 하면 자주 나오는 단어는 하나의 토큰이 되고, 희귀 단어는 여러 서브워드로 분리됩니다."
💬 기술 토론에서
"토큰 수 최적화가 비용에 직결됩니다. 시스템 프롬프트를 500토큰에서 200토큰으로 줄이면, 하루 100만 요청 기준으로 GPT-4 비용이 월 수백 달러 절감돼요. 의미 손실 없이 압축하는 게 핵심입니다."

⚠️ 흔한 실수 & 주의사항

토큰 수 = 단어 수로 착각

토큰과 단어는 다릅니다. "tokenization"은 1단어지만 3토큰일 수 있고, 한국어 "안녕하세요"는 1단어지만 3-5토큰으로 분리됩니다. 항상 토크나이저로 실제 토큰 수를 확인하세요.

모델별 토크나이저 차이 무시

GPT, Claude, Llama는 각각 다른 토크나이저를 사용합니다. 같은 텍스트도 모델마다 토큰 수가 다르므로, 사용하는 모델의 토크나이저로 계산해야 정확합니다.

올바른 접근법

tiktoken(OpenAI)이나 transformers 라이브러리로 사전에 토큰 수를 계산하세요. 컨텍스트 윈도우의 80% 이내로 유지하고, 긴 문서는 의미 단위로 청킹하여 처리하세요.

🔗 관련 용어

📚 더 배우기