1. Tokenizer

Tokenizer문장을 LLM(Large Language Model)이해할 있도록 잘게 나누는 도구다. LLM인간의 언어를 그대로 이해하지 못하기 때문에 입력 문장을 일정한 단위의 토큰(token)으로 나누고 이를 숫자 ID변환해 처리한다.

토큰의 단위는 모델마다 다르다. 어떤 모델은 단어 단위로, 어떤 모델은 서브워드(subword) 또는 문자(character) 단위로 나눈다. 예를 들어 "행복합니다"라는 문장은 어떤 모델에서는 하나의 토큰으로 처리되고, 또 다른 모델에서는 "행", "복", "합", "니", "다"쪼개질 있다.

Tokenizer방식에 따라 모델이 입력을 해석하는 방식과 비용, 성능이 달라진다. 대표적인 방식으로는 Byte Pair Encoding(BPE), WordPiece, SentencePiece 등이 있으며, 각각의 방식은 분해 기준과 어휘 집합이 다르다. 따라서 같은 문장이라도 사용하는 Tokenizer따라 토큰 수, 의미 단위, 처리 효율성모두 달라진다.

 

 

2. 실험 목적

실험의 목적은 같은 문장을 다양한 토크나이저로 분해했을 때, 토큰 수와 분해 방식이 어떻게 달라지는지를 관찰하는 이다. 특히 한국어, 영어, 특수문자, 한자가 섞인 문장을 사용할 경우 모델별로 얼마나 다르게 분해되는지를 직접 확인하고자 했다.

또한, 토크나이저마다 한글 처리 능력에 차이가 있는지를 살펴보고 사람이 이해하기에 직관적인 토큰 분해 결과를 제공하는 모델이 무엇인지 비교하였다. 

 

 

3. 사용한 tokenizer 이름

아래 네 가지 토크나이저를 이용했다. 

- GPT2
- bert-base-multilingual-cased
- deepseek-ai/DeepSeek-V3-0324
- gpt-4o (tiktoken)

1) gpt2 : OpenAI초기 언어 모델인 GPT-2에서 사용하는 토크나이저로, Byte Pair Encoding(BPE) 기반이다. 주로 영어 텍스트를 대상으로 학습되었으며, 한글이나 특수문자 처리에 한계가 있다.

2) bert-base-multilingual-cased : 구글의 다국어 모델인 BERT에서 사용하는 WordPiece 기반 토크나이저다.  110이상의 언어를 다룰 있으며, 영어 단어를 서브워드 단위로 분해하는 특징이 있다.

3) deepseek-ai/DeepSeek-V3-0324 : 중국에서 개발한 대규모 언어모델 DeepSeek 시리즈 하나로, 다국어 처리 성능이 강화구조다. 한글 특수문자 처리에서도 GPT-2보다 자연스러운 분해를 보여준다.

4) gpt-4o(tiktoken 기반) : 2024OpenAI에서 발표한 GPT-4o멀티모달 모델로, Tiktoken이라는 고속 토크나이저를 사용한다. 다양한 언어와 특수문자, 이모지까지 효율적으로 처리하며, 가장 최적화된 토큰 분해 결과를 보인다.

 

 

4. 실험에 사용한 문장 및 코드

이번 실험에서는 문장의 언어 구성에 따라 토크나이저의 분해 방식이 어떻게 달라지는지를 확인하기 위해 다음 가지 유형의 문장을 선정하였다.

 

  • 문장1: 한국어로만 문장
    새해 복 많이 받으세요. 오늘도 운수 좋은 하루 되세요.
    한국어만 포함된 문장으로, 한글 토크나이징 처리 성능을 비교하기 위해 사용하였다.
  • 문장2: 영어로만 문장
    Happy New Year! Wishing you a day full of good fortune and happiness.
    대부분의 토크나이저가 영어 기반으로 학습되었기 때문에 기준선 역할로 사용하였다.
  • 문장3: 한국어 + 특수문자 + 영어 포함 혼합 문장
    2025년 새해 福 많이 받으세요!! Happy New Year~~
    숫자, 한자, 특수문자, 영어가 혼합된 문장으로, 복합 구성에 대한 토크나이저의 대응 방식을 보기 위해 설정하였다.

 

사용한 코드는 다음과 같다.

from transformers import AutoTokenizer
import tiktoken

# 비교용 텍스트
text = "2025년 새해 福 많이 받으세요!! Happy New Year~~!!"

# Hugging Face 기반 tokenizer 실험 함수
def tokenize_with_model(model_name, text):
    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
    tokens = tokenizer.tokenize(text)
    input_ids = tokenizer.encode(text, add_special_tokens=False)
    decoded_tokens = [tokenizer.decode([tid]) for tid in input_ids]

    print(f"\n⭐ Model: {model_name}")
    print("✅ 입력 문장:", text)
    print("✅ Token 수:", len(input_ids))
    print("✅ Token ID 목록:", input_ids)
    print("✅ Token 목록:", tokens)
    print("✅ 사람이 읽을 수 있는 Token들:", decoded_tokens)

# GPT-2
tokenize_with_model("gpt2", text)

# BERT
tokenize_with_model("bert-base-multilingual-cased", text)

# DeepSeek
tokenize_with_model("deepseek-ai/DeepSeek-V3-0324", text)

# GPT-4o tokenizer (tiktoken 기반)
encoding = tiktoken.encoding_for_model("gpt-4o")
input_ids = encoding.encode(text)
decoded = [encoding.decode([tid]) for tid in input_ids]

print("\n⭐ Model: gpt-4o (tiktoken)")
print("✅ 입력 문장:", text)
print("✅ Token 수:", len(input_ids))
print("✅ Token ID 목록:", input_ids)
print("✅ 사람이 읽을 수 있는 Token들:", decoded)

 

 

5. 각 tokenizer에서 분해된 token 수 및 token 목록

- 문장 1 : 새해 복 많이 받으세요. 오늘도 운수 좋은 하루 되세요.

 

  • GPT2해당 문장을 62개의 토큰으로 매우 많이 쪼갰으며, 대부분 깨진 문자로 처리되어 한글 처리 성능이 낮은 특징보였다.
  • BERT21개의 토큰으로 적절히 분해했지만, “받으세요” 같은 표현을 [받] [##으] [##세] [##요]처럼 서브워드 단위로 나누어 사람 눈에는 다소 비직관적이다.
  • DeepSeekGPT-4o각각 21개, 17개의 토큰으로 분해했으며, 단위로 자연스럽게 나누는 경향보였다. 특히 GPT-4o가장 압축적이고 직관적인 분해 결과보였다.

 

- 문장 2 : Happy New Year! Wishing you a day full of good fortune and happiness.

 

  • GPT216개의 토큰으로 분해했으며, 영어 문장에는 강한 성능을 보였다.
  • BERT는 "happiness"[ha] [##ppi] [##ness]처럼 서브워드로 분해했지만, 영어권에서는 자주 쓰는 방식이다.
  • GPT-4oDeepSeek거의 동일하게 영어 단어 단위의 토큰화를 수행했다.

 

- 문장3: 2025년 새해 福 많이 받으세요!! Happy New Year~~!!

 

  • GPT2무려 36개의 토큰으로 분해되었고, 한자(福)특수문자(!!, ~~) 등에서 처리 성능이 떨어지는 경향보였다.
  • BERT적당한 수준(19개)토큰 수를 유지했고, 특수문자를 별도로 인식했다.
  • GPT-4o16개의 토큰으로 가장 효율적인 분해 결과보였으며, 한글·한자·특수문자·영어 혼합에도 강인한 처리 능력을 보였다.

 

 

6. 가장 흥미로웠던 token 분해 결과와 이유

GPT-2 tokenizer의 경우 토큰 수가 다른 토크나이저에 비해 월등히 많았다. decoded_tokens을 이용해 모델의 Token Id를 사람이 읽을 수 있는 형태로 복원했을 때 영어는 잘 됐지만 한글, 한자는 대부분이 깨진 문자로 처리되었다. GPT-2의 tokenizer는 BPE(Byte Pair Encoding) 기반이며 주로 영어 데이터로 학습되었기 때문에 한글이나 한자의 성능이 떨어지는 구조적 한계를 생각하면 당연한 결과인 것 같다. 결과적으로 같은 문장임에도 더 많은 토큰으로 쪼개졌고, 이는 의미 단위가 지나치게 분리되면서 해석 효율이 떨어질 수 있음을 의미한다.

다른 토크나이저들의 경우 GPT-2 tokenizer와는 달리 한글 처리가 잘 되긴했지만 BERT tokenizer의 경우 happiness를 ["ha", "##ppi", "##ness"]처럼 불연속적인 subword 단위로 분해했다. 이는 사람의 눈으로 보기엔 직관적이지 않아 뜻 파악이 어렵지만, 모델 입장에선 의미 단위별 학습이 가능해서 학습 성능의 면에선 오히려 도움이 됨을 의미한다.

DeepSeek과 GPT-4o tokenizer는 의미 단위에 가깝게 분해했고, 한국어와 영어는 물론이고 “福”이나 “!!”와 같은 한자나 특수문자도 잘 처리한 것으로 보인다. 특히 GPT-4o tokenizer 같은 경우 세 문장 모두 가장 적거나 다른 tokenizer와 같은 토큰 수로 가장 자연스럽게 분해했다.

 

 

+ Recent posts