이론

[LLM] 토큰 Token에 대하여 - 모델이 언어를 이해하는 최소 단위

weweGH 2025. 11. 2. 18:00
반응형

토큰에 대하여
토큰에 대하여


토큰 Token에 대하여 - 모델이 언어를 이해하는 최소 단위


들어가며


Chat GPT, Claude, Gemini 등 LLM을 제대로 이해하려면, 토큰(token)의 개념이 매우 중요합니다. LLM은 언어를 직접 이해할 수 없습니다. 토큰은 LLM이 언어를 이해하는 '단위'로, 우리가 LLM에 입력한 문장들은 토큰으로 분해되어 모델에 입력됩니다.

즉, 토큰을 잘 이해한다면 우리는 LLM을 더 효율적으로 활용하고, 모델의 한계와 가능성을 정확히 파악할 수 있습니다. 이 글에서는 토큰의 개념을 시작으로 예제 문장을 직접 토큰으로 변환해 보고, 토큰이 중요한 이유에 대해 설명합니다.



토큰이란?


토큰 Token은 LLM이 문장을 이해하고 처리하는 최소 단위입니다. 사람이 '단어'로 생각하듯이, LLM은 '토큰'으로 생각합니다. 하지만, '토큰=단어'는 아닙니다. 토큰은 단어, 음절, 문장 부호, 공백까지 포함하는 단위입니다. 보통 영어는 단어 중심으로, 한국어나 일본어는 음절 단위로 분해되는 경향이 있습니다. 분해 기준은 모델이 사용하는 토크나이저 Tokenizer의 규칙에 따라 달라집니다. 예를 들어, 문장에 대한 토큰 단위는 다음과 같습니다. 

문장 토큰 단위
Hello ["Hello"]
Hello world! ["Hello", "world", "!"]
화장품 연구원 ["화", "장", "품", "연구", "원"]

LLM이 토큰 단위로 처리하는 이유

우리가 LLM에 질문을 할 때, LLM은 언어를 직접 이해할 수 없습니다. 따라서, 모든 문장을 토큰 단위로 분해하고, 그 토큰을 숫자 벡터로 변환(Embedding)하여 처리합니다. LLM이 언어를 수치적으로 이해하는 과정은 다음과 같습니다.

문장 입력 → 토큰 단위 분해(by 토크나이저) → 임베딩을 통한 벡터 변환  → 모델 내부 연산

LLM이 언어를 이해하는 과정
LLM이 언어를 이해하는 과정


토큰이 중요한 이유


LLM을 활용할 때, 토큰이 중요한 이유는 다음과 같습니다.


모델의 맥락 Context 제한

LLM은 한 번에 처리할 수 있는 토큰 수가 정해져 있습니다. 예를 들어, A 모델은 약 300 페이지 분량의 문서의 양인 128k 토큰까지 처리할 수 있습니다. 

즉, 정해진 토큰 수를 초과하는 정보는 모델이 잊어버릴 수 있습니다. 따라서, 토큰의 개념을 이해하여 모델이 어디까지 문맥을 유지할 수 있는지에 대한 이해가 중요합니다.


비용 계산 단위

토큰 = 돈 + 연산량 + 응답 시간

 우리가 자주 사용하는 Chat GPT, Claude API는 모두 "토큰 수" 기준으로 과금합니다. 입력 토큰과 출력 토큰을 합하여 비용을 계산합니다. 예를 들어서, 다음과 같은 대화는 총 22 토큰(10 토큰 + 12 토큰)을 사용합니다.

구분 문장 토큰 수
질문 "오늘 서울 날씨는 어때?" 약 10 토큰
대답 "오늘 서울은 맑고, 17도 입니다." 약 12 토큰

효율성

토큰이 많으면, 모델이 '긴 문맥'을 이해하기 어렵습니다. 반면 토큰이 적은 경우에는 모델이 의미를 충분히 이해하지 못합니다. 따라서, 프롬프트 엔지니어링에서는 적은 토큰으로 많은 의미를 전달하는 문장 구조가 매우 중요합니다. 

"한 줄로 요약해줘" → 짧지만, 의미 명확
"이 글의 핵심 내용을 간결하게 정리해서 한 문장으로 알려주세요"   훨씬 많은 토큰 소모 


파이썬을 활용한 토큰 수 확인


파이썬을 활용하여 토큰을 확인하는 방법은 다음과 같습니다. 허깅 페이스의 transformers 라이브러리를 활용하여 GPT-2 모델의 토크나이저가 문장을 어떻게 토큰화하는지 확인할 수 있습니다. Ġ는 공백을 의미합니다.

# ! pip install transformers
from transformers import GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")

text = "Hello world!"
tokens = tokenizer.tokenize(text)

print('tokens: ', tokens)
print('token count', len(tokens))

파이썬 토큰 확인
파이썬 토큰 확인


반응형