
AI Token이란 무엇인가: 분할, 추론, 비용까지 AI가 문자를 처리하는 메커니즘
요약
AI 모델이 텍스트를 처리하는 기본 단위인 토큰(Token)의 개념과 작동 원리를 설명합니다. 토크나이저를 통한 문자 분할, 토큰 ID 변환 과정, 그리고 모델별 어휘표(Vocabulary) 차이에 따른 토큰 수의 변화를 다룹니다.
핵심 포인트
- 토큰은 자연어를 모델이 이해할 수 있는 숫자로 변환하기 위한 최소 단위입니다.
- 토크나이저의 방식에 따라 동일한 문장도 토큰 수가 달라질 수 있습니다.
- 토큰 ID는 어휘표(Vocabulary)에 정의된 숫자로, 모델 추론의 기초가 됩니다.
- 정확한 토큰 계산을 위해서는 사용 중인 모델의 공식 도구를 확인해야 합니다.
먼저, 가장 혼동하기 쉬운 점을 확인해 두고 싶다. 오늘 다루는 token은 로그인 인증에서 사용하는 token이나 암호 자산에서 말하는 token과는 전혀 다른 개념이다.
우리 인간에게는 "이 자료를 요약해 주세요"가 하나의 자연스러운 문장으로 보인다. 하지만 AI는 우리가 보고 있는 문장을 그대로 이해하고 있는 것이 아니다. 먼저 문자를 더 작은 단위로 분할하고, 그 후에 후속 처리를 수행한다. 이 "더 작은 단위"가 token이다.
이하, 크게 세 가지로 나누어 살펴보겠다. token이란 도대체 무엇인가, 추론은 어떻게 진행되는가, 그리고 비용은 어떻게 결정되는가. token을 이해하면 이 세 가지는 모두 논리적으로 연결된다.
가장 기본적인 흐름은 다음과 같다. 인간이 입력하는 것은 문자, 예를 들어 "token とは何か?"이다. 인간에게는 평범한 한 문장이지만, 모델 내부에서는 자연어 문자열을 그대로 처리할 수 없다. 그전에 **Tokenizer (분할기)**라는 처리를 거쳐야 한다.
Tokenizer의 역할은 두 가지다. 문자를 더 작은 단위로 분할하고, **어휘표 (vocabulary)**에 기반하여 각 단위를 번호로 변환한다. 이 번호가 token ID라고 불린다. 모델이 실제로 받는 것은 우리 눈에 보이는 문자가 아니라 숫자의 나열이다.
인간이 보는 것: token とは何か?
│
▼ ① Tokenizer로 분할
...
프로그래밍에 비유하면 이해하기 쉽다. 우리가 코드를 작성할 때 작성하는 것은 인간이 읽기 쉬운 고급 언어다. 하지만 컴퓨터가 실행할 때는 기계가 처리할 수 있는 형식으로 변환해야 한다. AI에 의한 자연어 처리도 이와 유사하여, 자연어는 먼저 tokenizer를 거쳐 token과 token ID로 변환되며, 그 숫자를 바탕으로 모델이 추론을 진행한다.
여기서 중요한 것은 실제로 어떻게 분할되는지, 몇 개의 token이 되는지, 어떤 ID에 대응하는지는 세계 공통으로 고정되어 있는 것이 아니다라는 점이다. 사용하는 모델이나 tokenizer에 따라 달라진다.
오해하기 쉬운 점을 살펴보자. token 수는 글자 수와 같지 않다. 단어 수와도 같지 않다.
예로 "お誕生日おめでとう"라는 일본어 문장을 들어보자. 겉보기에는 9글자다. 하지만 encoding, 즉 tokenizer의 분할 방식이 다르면 결과도 달라진다. OpenAI Cookbook의 예에서는 다음과 같다.
| Encoding | token 수 |
|---|---|
r50k_base (조금 오래됨) | 14 |
cl100k_base | 9 |
o200k_base | 8 |
따라서 어떤 문장의 token 수를 "영구적으로 고정된 정답"으로 기억할 필요는 없다. 정말로 기억해야 할 원칙은 하나, token은 tokenizer에 의해 결정된다는 것이다. 같은 문장이라도 모델이나 tokenizer가 바뀌면 token 수도 변할 수 있다.
실제 개발이나 비용 산정에서 정확한 숫자가 필요하다면, 대상 모델의 tokenizer나 공식 도구로 확인하는 것이 가장 확실하다.
한 단계 더 깊이 들여다보면, 모델마다 tokenizer나 어휘표 (vocabulary) 설계가 다른 경우가 있다.
이 어휘표는 사전의 목차와 같은 것이다. 분할된 단위가 얻어진 후, 그것을 대응하는 token ID로 변환한다. 즉 "문자에서 숫자"로의 변환에 사용된다.
여기서는 DeepSeek를 예로 든다. DeepSeek는 오픈 소스이므로 어휘표 설계를 실제로 볼 수 있다.
tokenizer.json을 보면, 예를 들어 다음과 같은 약속이 되어 있다.
id 0 → 시작을 나타내는 기호
id 1 → 종료를 나타내는 기호 ← 이것이 출력되면 "출력이 완료되었다"는 의미
id 2 → 공백
...
즉, AI의 어떤 추론에서 id 1의 token이 출력되었다면, 그것은 "출력이 완료되었다"는 의미가 된다.
여기서 가져야 할 감각은 AI에 입력되는 것은 최종적으로 모두 숫자 정보다라는 것이다. 그리고 인간이 입력한 문자를 대응하는 숫자로 변환하기 위해서는 이러한 표가 필요하다.
그렇다면 AI는 token ID라는 숫자를 받으면 즉시 추론을 시작하는 것일까? 사실은 그렇지 않다. 다음으로 그 token의 의미 정보를 취득해야 한다.
예를 들어 AI에게 apple
라는 단어를 입력했다고 가정하자. 이것이 먹는 사과를 의미하는지, 아니면 Apple 사나 iPhone 같은 의미인지 문맥에 따라 달라진다. 이를 구분하기 위해 의미 정보가 필요하다.
token ID가 파일 내에 정의된 번호인 반면, token의 의미는 일반적으로 학습을 통해 얻어지며, **고차원 벡터 (High-dimensional vector)**로 표현된다.
이는 "의미 공간 속의 좌표"라고 생각하면 이해하기 쉽다. 두 단어의 의미가 가까우면 그 공간 내에서의 위치도 가까워진다.
의미 공간 (이미지)
고양이 ● 강아지 ● 새끼 강아지 ← 동물. 서로 가까움
자동차 ● 트럭 ← 탈것. 동물과는 멀음
대규모 언어 모델 (LLM)은 추론을 할 때마다 동일한 차원 수의 벡터를 출력한다. 그리고 그 벡터가 어떤 token의 벡터와 가장 가까운지를 계산하여, 가장 가까운 token을 출력으로 선택한다.
개념적으로는 조금 추상적으로 느껴질 수 있지만, 수학적 원리는 대학 선형대수학 (Linear Algebra)의 기초와 상당히 유사하다. 관심이 있다면 Udemy 등에서 AI 원리에 관한 강의를 찾아보면 이해하기 쉬울 것이다.
지금까지의 요소들을 연결하면, 인간이 입력하는 문자로부터 최종 출력이 생성되기까지는 대략 다음과 같은 절차를 거친다.
- 문자를 입력한다
- 프로그램이 문자를 token으로 분할한다
- token을 대응하는 숫자 ID로 변환한다
- 숫자 ID로부터 대응하는 특징 벡터 (embedding)를 가져온다
- 특징 벡터에 **위치 정보 (Positional information)**를 더한다 - 이 [특징 벡터 + 위치 정보]로 구성된 고차원 행렬을 대규모 언어 모델에 입력하여 계산한다
- 계산할 때마다 token을 하나씩 출력하며, 종료 기호가 나올 때까지 계속한다
예시로 매우 심플한 질문을 사용해 보자. "일본에서 가장 높은 산은?"
첫 번째 단계, 문자의 입력. 즉, 우리 인간이 작성한 자연어 (Natural language)다.
두 번째 단계, token화. 이 문장은 7개의 token으로 분할되며, 각각에 ID가 대응된다.
[일본] [에서] [가장] [높은] [산] [은] [?]
│ │ │ │ │ │ │
ID ID ID ID ID ID ID
세 번째 단계, 각각의 token의 특징 벡터를 가져온다. 각 token의 특징 벡터는 모델의 학습이 완료된 후에는 기본적으로 고정되어 있다.
네 번째 단계, 특징 벡터에 위치 정보를 겹친다. 같은 단어라도 문장 안에서 나타나는 위치가 다르면 의미도 변한다. 예를 들어 "나는 당신을 사랑한다"와 "당신은 나를 사랑한다"는 사용하는 단어는 비슷해도 의미는 완전히 다르다. 위치 정보는 이 순서를 나타내기 위한 것이다.
다섯 번째 단계, 최종적으로 생성된 행렬 데이터를 대규모 언어 모델에 입력하여 추론을 시작한다. 추론에서는 한 번에 하나의 token만 출력하며, 종료 기호가 나올 때까지 이어진다.
1회차 추론 → 출력 벡터가 "후지산"에 가장 가까움 → "후지산"을 출력 (종료 기호가 아님, 계속 진행)
2회차 추론 → "입니다"에 가장 가까움 → "입니다"를 출력 (종료 기호가 아님, 계속 진행)
3회차 추론 → 마침표 "."를 출력 → (종료 기호가 아님, 계속 진행)
...
마지막으로 모델이 생성하는 답변은 "후지산입니다."가 된다.
세 번째와 네 번째 단계는 조금 더 강조해 두고 싶다.
세 번째 단계에서 모델은 token ID를 사용하여 내부의 "임베딩 테이블 (embedding table)"에서 대응하는 벡터를 검색한다. token ID는 목차 번호, 특징 벡터는 그 번호에 대응하는 내용이라고 생각하면 이해하기 쉽다. 이 단계는 추론 시에 그 자리에서 새로 계산하는 것이 아니라, 모델의 학습이 완료된 후 내부 파라미터 (Parameter)로서 이미 저장되어 있다. 추론 시에는 주로 token ID를 바탕으로 대응하는 벡터를 꺼내온다.
단, "의미"만으로는 불충분하다. 모델은 각각의 token의 순서도 알아야 한다. 그래서 네 번째 단계에서 **위치 벡터 (Positional vector)**를 더한다. embedding 벡터에 위치 벡터를 더함으로써 입력 행렬 $X$를 얻는다. 이 행렬에서는 대략 각 행이 하나의 token에 대응하고, 각 열이 해당 token의 특징 차원 (Feature dimension)에 대응한다.
여기서 중요한 직관은, 우리가 쓰고 있는 것은 하나의 문장이지만, 대규모 언어 모델에 들어갈 때는 숫자의 행렬이 된다는 점이다. 그 이후의 추론은 본질적으로 이 행렬을 중심으로 대량의 계산을 수행하는 처리 과정이다.
token을 이해하면 비용 구조도 상당히 설명하기 쉬워진다. token은 전기나 가스와 같다고 생각하면 좋다. 많이 사용하면 비용이 늘어나고, 적게 사용하면 비용도 억제할 수 있다.
많은 AI API에서는 token 수를 기준으로 요금이 계산된다. 보통 두 가지로 나뉜다.
입력 token (Input token): AI에게 전달하는 문자, 자료, 대화 이력, 로그, 코드 등.
출력 token (Output token): AI가 생성하는 답변.
실무상 기억해 두어야 할 포인트는 세 가지다.
가격은 보통 「100만 token당」으로 표시된다. 출력 token은 입력 token보다 비싼 경우가 많다. 동일한 입력을 반복해서 재사용할 경우, 일부 서비스에서는 캐싱 (Caching) 기능을 통해 비용을 낮출 수 있다.
일상 업무에 가까운 예로 token 양을 가늠해 보자.
예를 들어, 약 3,000자의 회의록이 있고 이를 AI에게 요약해 달라고 한다고 가정하자. 실제 호출 시에는 입력값이 회의록 본문뿐만이 아니다. "결정 사항, TODO, 담당자별로 표 형식으로 정리해 주세요"와 같은 지시 사항도 포함된다.
매우 거친 예시로서 다음과 같이 추산한다.
입력 ≈ 5000 tokens
출력 ≈ 1000 tokens
─────────────────────
...
만약 AI 제공사의 가격이 「100만 token당 500엔」이라고 한다면, 이 한 번의 호출에 드는 비용은 약 3엔이다.
물론 이 숫자는 고정된 공식이 아니라, 어디까지나 규모를 파악하기 위한 예시일 뿐이다. 일본어나 중국어 같은 텍스트에서는 대략 「1 token은 1자 내외」로 추산할 수 있는 경우도 많지만, 실제로는 모델이나 토크나이저 (tokenizer)에 따라 달라진다.
일상적인 판단이라면 거친 추산만으로도 충분할 때가 있다. 반면, 시스템 개발 · 예산 평가 · 대량 호출을 수행하는 경우에는 각사의 공식 토크나이저 (tokenizer)나 token counting 도구를 사용하여 정확하게 계산해야 한다.
동일한 태스크라도 제공사나 모델이 다르면 비용이 수십 배 차이 날 수 있다.
1,000회 정도의 유사한 태스크를 실행하는 예로 보면, 대체로 「OpenAI의 고성능 모델이 가장 비싸고, DeepSeek가 가장 저렴하다」는 형태가 된다.
고성능 모델이 적합한 경우: 복잡한 추론, 중요 문서, 품질 요구사항이 높은 상황.
저렴한 모델이 적합한 경우: 대량의 단순한 처리나 어느 정도의 오차를 허용할 수 있는 상황.
실무에서 중요한 것은 항상 가장 비싼 모델을 쓰는 것도, 항상 가장 저렴한 모델을 쓰는 것도 아니다. 태스크의 리스크, 품질 요구사항, 비용에 따라 적절한 모델을 선택하는 것이다.
마지막으로, AI token에 대해 오늘 기억해야 할 점을 네 가지로 정리한다.
token은 AI가 처리하는 정보량의 단위다. AI는 문장 전체를 그대로 처리하는 것이 아니라, 문장을 token으로 분할하고 이를 숫자 표현으로 변환하여 처리한다.
AI의 답변은 token을 하나씩 생성하며 만들어진다. 다음 token을 예측하고, 그것을 문맥 뒤에 이어 붙이며 답변이 끝날 때까지 계속한다.
입력이 길어질수록, 또한 출력이 길어질수록 비용과 처리 시간은 통상적으로 증가한다. 모델이 처리해야 하는 token이 늘어나기 때문이다.
실제로 사용할 때는 필요한 정보만 최대한 압축해서 전달하고, 출력 형식과 길이를 명확하게 지정한다. "안녕하세요", "감사합니다"와 같이 처리상 그다지 필요 없는 말을 매번 너무 많이 넣지 않는 것도 중요하다. AI에게는 감정이 있는 것이 아니므로, 목적에 필요한 정보를 간결하게 전달한다는 의식을 갖는 것이 좋다.
이 네 가지를 파악하면 AI 사용법이 「어렴풋이」에서 「예측 가능하게」로 바뀌어 갈 것이다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기