🤖 AI/ML

Token

토큰

대규모 언어 모델(LLM)이 텍스트를 처리하는 기본 단위입니다. 단어, 서브워드(subword), 또는 문자로 분할되며, 컨텍스트 윈도우 크기와 API 사용 비용을 결정하는 핵심 개념입니다.

📖 상세 설명

토큰(Token)은 언어 모델이 텍스트를 이해하고 생성할 때 사용하는 기본 처리 단위입니다. 영어에서 1개의 토큰은 대략 4글자 또는 0.75단어에 해당합니다. 한국어는 형태소 기반 언어 특성상 같은 내용도 영어보다 더 많은 토큰을 사용합니다. "안녕하세요"는 GPT-4에서 2-3개의 토큰으로 분할됩니다.

토큰화 방식에는 여러 알고리즘이 있습니다. BPE(Byte Pair Encoding)는 GPT 계열에서 사용하며, 빈도가 높은 문자 쌍을 반복적으로 병합합니다. WordPiece는 BERT에서 사용하며, BPE와 유사하지만 확률 기반으로 병합을 결정합니다. SentencePiece는 언어에 독립적인 토큰화를 제공하며, LLaMA 등에서 사용됩니다.

토큰은 LLM 사용의 핵심 비용 요소입니다. OpenAI GPT-4 Turbo는 입력 1M 토큰당 $10, 출력 1M 토큰당 $30을 과금합니다. 따라서 프롬프트 최적화를 통해 토큰 수를 줄이면 비용을 크게 절감할 수 있습니다. 또한 컨텍스트 윈도우(예: GPT-4의 128K 토큰)는 한 번에 처리할 수 있는 최대 토큰 수를 의미합니다.

토큰 효율성은 모델과 언어에 따라 다릅니다. 영어 텍스트는 한국어보다 토큰 효율이 높고, 코드는 자연어보다 토큰을 더 많이 사용합니다. 특수 토큰(예: [CLS], [SEP], <|endoftext|>)은 모델이 문장 구조를 이해하는 데 사용됩니다. 토큰 수를 정확히 파악하려면 tiktoken(OpenAI) 같은 공식 토크나이저를 사용해야 합니다.

💻 코드 예제

다양한 토크나이저로 텍스트의 토큰 수를 확인하는 예제입니다.

import tiktoken  # OpenAI 토크나이저
from transformers import AutoTokenizer  # Hugging Face

# =============================================
# 1. OpenAI tiktoken (GPT-4, GPT-3.5 용)
# =============================================
# pip install tiktoken

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

text_en = "Hello, how are you today?"
text_ko = "안녕하세요, 오늘 기분이 어떠세요?"
code = "def hello(): return 'world'"

# 토큰화
tokens_en = enc.encode(text_en)
tokens_ko = enc.encode(text_ko)
tokens_code = enc.encode(code)

print(f"영어 텍스트: {len(tokens_en)} 토큰")
print(f"→ 토큰 ID: {tokens_en}")
print(f"→ 토큰: {[enc.decode([t]) for t in tokens_en]}")
print()
print(f"한국어 텍스트: {len(tokens_ko)} 토큰")
print(f"→ 토큰: {[enc.decode([t]) for t in tokens_ko]}")
print()
print(f"코드: {len(tokens_code)} 토큰")

# 결과:
# 영어 텍스트: 7 토큰
# 한국어 텍스트: 14 토큰 (영어보다 2배 많음)
# 코드: 9 토큰


# =============================================
# 2. Hugging Face Transformers
# =============================================
# pip install transformers

# LLaMA 토크나이저 (SentencePiece 기반)
tokenizer_llama = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

# GPT-2 토크나이저 (BPE 기반)
tokenizer_gpt2 = AutoTokenizer.from_pretrained("gpt2")

# BERT 토크나이저 (WordPiece 기반)
tokenizer_bert = AutoTokenizer.from_pretrained("bert-base-multilingual-cased")

text = "인공지능이 세상을 바꾸고 있습니다."

for name, tokenizer in [
    ("LLaMA", tokenizer_llama),
    ("GPT-2", tokenizer_gpt2),
    ("BERT", tokenizer_bert)
]:
    tokens = tokenizer.tokenize(text)
    print(f"{name}: {len(tokens)} 토큰 → {tokens}")


# =============================================
# 3. 토큰 수 기반 비용 계산기
# =============================================
def estimate_cost(text: str, model: str = "gpt-4-turbo") -> dict:
    """OpenAI API 비용 추정"""
    enc = tiktoken.encoding_for_model(model)
    token_count = len(enc.encode(text))

    # 2025년 1월 기준 가격 ($ per 1M tokens)
    prices = {
        "gpt-4-turbo": {"input": 10.0, "output": 30.0},
        "gpt-4o": {"input": 5.0, "output": 15.0},
        "gpt-4o-mini": {"input": 0.15, "output": 0.60},
        "gpt-3.5-turbo": {"input": 0.50, "output": 1.50}
    }

    price = prices.get(model, prices["gpt-4-turbo"])
    input_cost = (token_count / 1_000_000) * price["input"]

    return {
        "model": model,
        "tokens": token_count,
        "input_cost_usd": round(input_cost, 6),
        "per_1k_tokens": round(price["input"] / 1000, 6)
    }

# 사용 예시
long_text = "대한민국은 동아시아에 위치한 국가로..." * 100
result = estimate_cost(long_text, "gpt-4o-mini")
print(f"토큰 수: {result['tokens']}, 예상 비용: ${result['input_cost_usd']}")

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

"이 프롬프트 토큰 수가 8천개 넘어서 컨텍스트 윈도우 거의 다 찼어요"

→ 프롬프트가 모델의 최대 토큰 한도에 근접했음을 설명

"한국어는 토큰 효율이 낮아서 영어보다 비용이 2배 정도 더 들어요"

→ 한국어의 토큰화 특성으로 인한 비용 증가 설명

"tiktoken으로 먼저 토큰 수 체크하고 요청 보내세요"

→ API 호출 전 토큰 수 사전 확인 권장

⚠️ 흔한 실수 & 주의사항

토큰 수를 단어 수로 추정

토큰 != 단어입니다. 긴 단어나 희귀 단어는 여러 토큰으로 분할됩니다. 정확한 토큰 수는 토크나이저로 확인해야 합니다.

입력/출력 토큰 가격 혼동

대부분의 API는 출력 토큰이 입력 토큰보다 2-3배 비쌉니다. max_tokens를 적절히 설정하여 비용을 관리하세요.

컨텍스트 윈도우 초과

입력 + 출력 토큰의 합이 컨텍스트 윈도우를 초과하면 에러가 발생합니다. 출력용 공간을 미리 확보해야 합니다.

특수 문자와 이모지

이모지나 특수 문자는 예상보다 많은 토큰을 차지할 수 있습니다. 비용 민감한 서비스에서는 특수 문자 사용을 줄이세요.

🔗 관련 용어

📚 더 배우기