허허의 오늘은 뭐 먹지?
GPT(chatgpt계열)에서 토큰(token) 수 세기 본문
GPT에서 말하는 "토큰(Token)"이란, 텍스트(문자열)를 모델이 처리할 수 있는 단위로 쪼개어 놓은 것을 의미한다.
예를 들어, 사람이 작성한 글(문장, 단어, 문장부호 등)을 GPT가 이해하기 위해선 이를 내부적으로 작은 조각들(토큰)으로 분할해야 한다.
아래는 토큰에 대한 주요 특징이다:
- 텍스트의 최소 처리 단위
- 토큰은 단어 전체가 될 수도 있고, 단어의 일부(접사)나 문장부호가 붙은 형태가 될 수도 있다.
- 예를 들어, “playing”이라는 단어가 play + ing 두 개의 토큰으로 분리될 수 있다.
- 공백, 구두점, 특별 기호 등도 독립된 토큰으로 처리될 수 있다.
- 언어 모델 학습과 추론에 활용
- GPT는 입력으로 들어오는 텍스트를 토큰 단위로 인식하고, 각 토큰을 벡터(수치)로 변환해 모델에 입력한다.
- 모델이 다음에 올 토큰을 예측하거나, 문맥 속에서 어떤 토큰이 적절한지를 판단하는 방식으로 작동한다.
- 컨텍스트 윈도우(Context Window)와 토큰 제한
- GPT는 한 번에 처리할 수 있는 토큰의 최대 개수(컨텍스트 윈도우 크기)가 정해져 있다.
- 예를 들어, GPT-3.5 계열 모델은 수천 개에서 만여 개의 토큰 정도가 한계이며, 이를 넘어서면 이전 문맥(토큰)을 잊어버린다.
- 가격 및 사용량 측정 단위
- ChatGPT API나 OpenAI API를 사용할 때, 가격과 사용량이 ‘토큰’을 기준으로 측정된다.
- 예를 들어, “입력 토큰 N개, 출력 토큰 M개 사용 시 비용”과 같은 식으로 과금이 이뤄진다.
- 토큰화(Tokenization) 알고리즘
- GPT 시리즈는 BPE(Byte Pair Encoding)와 같은 기법을 활용해 텍스트를 토큰으로 분할한다.
- 이 알고리즘은 전체 텍스트에서 가장 자주 등장하는 글자열(서브워드)을 기준으로 점진적으로 토큰을 생성한다.
정리하면, GPT 토큰(Token)이란 GPT 모델이 텍스트를 이해하고 처리하기 위해 사용하는 기본 단위다.
이 토큰을 기준으로 모델이 맥락을 파악하고 결과를 생성하며,
API 비용도 토큰 양에 따라 책정된다.
그럼 토큰의 크기는 어떻게 측정할 수 있을까?!
ChatGPT(또는 GPT 계열 모델)에서 토큰 크기(토큰 개수)를 확인하는 방법은 크게 두 가지다.
- API 사용 시 응답에 포함되는 사용량(Usage) 확인
- 직접 토큰화 라이브러리를 사용해 토큰 개수 계산
아래에서 두 가지 방법을 차례대로 설명한다.
1. API 사용 시 사용량(Usage) 확인하기
OpenAI API를 직접 호출해 ChatGPT(GPT-3.5, GPT-4 등)를 사용할 때는, 응답(Response)에 usage 항목이 포함될 수 있다. 이 필드를 통해 실제로 사용된 **프롬프트 토큰(prompt_tokens)**과 응답 토큰(completion_tokens) 수를 확인할 수 있다.
예시 응답(JSON)에서 usage 정보가 다음과 같이 제공된다.
{
"id": "chatcmpl-1234",
"object": "chat.completion",
"created": 1677652288,
"model": "gpt-3.5-turbo-0301",
"usage": {
"prompt_tokens": 15,
"completion_tokens": 34,
"total_tokens": 49
},
"choices": [ ... ]
}
- prompt_tokens: 사용자 프롬프트(질문)에 사용된 토큰 수
- completion_tokens: 모델이 생성한 답변(결과)에 사용된 토큰 수
- total_tokens: 이 둘을 합친 값
API 기반으로 ChatGPT를 사용 중이라면, 이 값을 보고 손쉽게 대화에 사용된 토큰 수를 알 수 있다.
2. 직접 토큰화(Tokenization) 라이브러리 사용하기
2.1 tiktoken 라이브러리
OpenAI에서 제공하는 tiktoken 라이브러리는 GPT 계열 모델이 텍스트를 어떻게 토큰화하는지 시뮬레이션해볼 수 있도록 해준다.
- 파이썬(python) 환경에서 사용 가능
- GPT 모델별로 다른 토큰화 방식을 사용할 수 있음
설치
pip install tiktoken
사용예시
import tiktoken
# 1) 사용할 모델에 맞는 tokenizer 불러오기
tokenizer = tiktoken.get_encoding("cl100k_base")
# 예: GPT-3.5-turbo나 GPT-4에서 주로 사용하는 인코딩
text = "안녕하세요, ChatGPT 토큰을 어떻게 세나요?"
# 2) 텍스트를 토큰 리스트로 변환
tokens = tokenizer.encode(text)
print("토큰 리스트:", tokens)
print("토큰 개수:", len(tokens))
- get_encoding("cl100k_base"):
- GPT-3.5-turbo나 GPT-4에서 사용되는 인코딩 방식
- 모델별로 “gpt2” 또는 “r50k_base” 등 다른 인코딩을 쓸 수도 있다.
- tokens는 정수 ID 리스트이며, len(tokens)가 곧 토큰 수가 된다.
2.2 모델별 토큰화 차이
GPT-4, GPT-3.5-turbo, GPT-3 등 모델별로 토큰화 룰이 약간씩 다를 수 있다.
tiktoken에서 공식적으로 권장하는 인코딩 옵션은 다음과 같다.
- GPT-3.5-turbo, GPT-4: cl100k_base
- GPT-3 (text-davinci-003 등): r50k_base or p50k_base (권장: p50k_base)
사용 중인 모델에 맞춰 적절한 인코딩 옵션을 선택하면 실제 모델과 동일하게 토큰을 쪼갤 수 있다.
3. ChatGPT 웹 인터페이스(브라우저)에서 토큰 확인하기
- ChatGPT 웹 인터페이스(https://chat.openai.com 등)에서는 기본적으로 토큰 수를 직접 보여주지 않는다.
- 다만, 대화맥락이 길어질수록 “이전 내용 일부를 잊어버리는” 현상이 발생할 수 있는데, 이는 컨텍스트 윈도우(모델이 한 번에 처리 가능한 최대 토큰 수) 한계를 넘어설 때 나타난다.
- 정확한 토큰 수를 확인하려면, 자신이 작성한 메시지(프롬프트)를 복사하여 토큰화 라이브러리(tiktoken) 또는 토큰 카운터 웹 툴을 사용해 세는 방법을 쓴다.
'AI' 카테고리의 다른 글
sLLM (Smaller Large Language Model) 이란? (1) | 2025.01.23 |
---|---|
AI 인프라 프로바이더와 시장 (0) | 2025.01.22 |
GPT 메모리란? (0) | 2025.01.22 |
몇가지 시나리오에 따른 gpt 프롬프트 샘플 (0) | 2025.01.22 |
gpt 프롬프트 작성 가이드 (0) | 2025.01.22 |