무슨 일이 일어난 걸까요?
대규모 언어 모델에 Prompt를 보내면 무슨 일이 일어날까요?
모델은 어떻게 결과를 돌려줄까요?
결과가 때때로 다른 이유는 무엇일까요?
먼저 Token(토큰)과 확률이라는 중요한 개념 두 가지를 알아야 합니다.
이 장에서는 Token부터 살펴보겠습니다.
먼저 문장 완성 실험을 해 봅시다
지금은 다른 생각을 잠시 내려놓고 다음 문장을 함께 보세요.
만약 네가 갑자기
이 문장을 짧게 완성해 보라고 하면 어떻게 쓰겠습니까?
잠시 멈추고 생각해 보세요.
장산과 리쓰가 각각 다음과 같이 답했다고 가정해 봅시다.
장산: 만약 네가 갑자기 재채기한다면
리쓰: 만약 네가 갑자기 고양이가 된다면
두 사람 모두 요구사항을 충족했지만 답은 서로 다릅니다.
왜 그럴까요?
한 문장 뒤에는 합리적인 표현이 하나만 있는 것이 아니기 때문입니다. 지금까지 본 내용, 알고 있는 단어, 그때 한 선택이 모두 다음에 무엇을 쓸지에 영향을 줍니다.
먼저 문장을 여러 덩어리로 바라봅시다
우리가 말하거나 글을 쓸 때는 문장 전체를 한 번에 완성해 두기보다, 이어서 말하면서 다음에 무엇을 쓸지 고르는 경우가 많습니다.
같은 문장도 멈추는 위치가 달라질 수 있습니다.
내가, 이, 글을, 쓰고, 있을, 때, 나도, 한, 글자씩, 생각하고, 있다
내가, 이 글을, 쓰고 있을, 때, 나도 한 글자씩, 생각하고, 있다
일부러 멈추는 위치를 조절한 것은 아닙니다. 잠시 쉬고 싶다고 느낀 곳에 쉼표를 넣었을 뿐인데, 두 번의 위치가 완전히 같지 않습니다.
지금은 쉼표 사이의 내용을 여러 덩어리의 “표지”라고 생각해 봅시다. 앞에 무엇을 썼는지가 다음 덩어리로 무엇이 올 수 있는지에 영향을 줍니다.
장산에게 다시 한 번 써 달라고 해 봅시다
장산에게 한 번 더 쓰게 하면 이렇게 쓸 수도 있습니다.
만약 네가 갑자기 여기에 나타난다면
물론 지난번과 같은 답을 할 수도 있습니다.
우리는 장산이 아니므로 그가 무엇을 고를지 알 수 없습니다. 다만 자신이 아는 글자, 단어와 표현만 사용할 수 있고, 모르는 내용은 틀리게 쓰거나 “지어낼” 수도 있습니다.
그렇다면 이 과정을 우선 세 단계로 볼 수 있을까요?
- 먼저 일정한 어휘와 문장을 알고 있다.
- 지금까지 나온 내용을 보고 뒤에 무엇이 올 수 있는지 판단한다.
- 가능한 표현이 여러 개라면 그중 하나를 고른다.
여기서 잠깐 멈추고 생각해 보세요. 평소 말하거나 글을 쓸 때도 비슷한 느낌을 받은 적이 있나요?
세 가지 작은 연습
아래의 답을 미리 보지 마세요. 종이에 쓰거나 화면에 직접 입력하면서 문장을 어떻게 조금씩 이어 가는지 살펴봅시다.
문장 부호도 글자 수에 포함해 짧은 문장으로 완성하세요.
내 고향은 바로
다음 문장을 완성하세요.
나는 오늘 gptpmt에서 ……
다음 형식으로 문장을 만드세요.
왜냐하면……그래서……
다 썼나요?
이 문장 완성 실험은 텍스트를 생성할 때 앞의 내용이 뒤에 나올 수 있는 내용에 영향을 준다는 직관을 갖게 해 줍니다.
다만 이것은 비유일 뿐입니다. 대규모 언어 모델이 Token을 처리하는 방식은 인간의 뇌가 실제로 생각하고 말하는 메커니즘과 같지 않습니다.
Token이란 무엇인가?
모델은 우리가 이해하는 “글자 수”나 “단어 수”를 기준으로 전체 텍스트를 직접 처리하지 않습니다.
텍스트가 모델에 들어가기 전에 해당 모델의 Tokenizer(토크나이저, 텍스트 분할기)를 거쳐 일련의 Token으로 변환됩니다. 모델은 이 Token들을 처리하고 새로운 Token을 차례로 생성한 뒤, 마지막에 우리가 보는 텍스트로 변환합니다.
Token 하나는 다음과 같을 수 있습니다.
- 완전한 단어 하나
- 단어의 일부
- 한자나 문자의 일부
- 공백과 텍스트의 조합
- 문장 부호 또는 그 밖의 바이트 시퀀스
따라서 Token 수는 문자 수도, 단어 수도 아닙니다.
예를 들면 다음과 같습니다.
I love prompt engineering.
我喜欢提示工程。
이 두 문장이 몇 개의 Token으로 나뉘는지는 글자 수만 보고 알 수 없습니다. 텍스트가 완전히 같아도 모델이나 인코딩이 바뀌면 분할 방식과 Token 수가 달라질 수 있습니다.
초기 GPT 모델에서 흔히 사용된 Tokenizer는 BPE(Byte Pair Encoding, 바이트 페어 인코딩)와 그 변형을 사용했습니다. 오늘날에는 모델마다 다른 어휘 집합과 인코딩 방식을 사용할 수 있으므로, 오래된 스크린샷 하나의 결과를 모든 모델에 적용되는 고정 규칙으로 보면 안 됩니다.
낯선 환경에서 힘을 못 쓰는 Tokenizer
먼저 영어 문장 하나를 보겠습니다.
I love GPT pmt.
여기에는 글자, 공백, 단어와 문장 부호가 있습니다. Tokenizer가 반드시 완전한 단어 단위로 나누는 것은 아닙니다. I가 단독 Token이 될 수도 있고, 앞쪽 공백이 뒤의 글자와 묶일 수도 있으며, GPT가 더 작은 조각으로 나뉠 수도 있습니다.
왜 그럴까요?
Tokenizer는 우리가 국어 시간에 배운 “글자”와 “단어”가 아니라 자기 어휘 집합과 인코딩 규칙에 따라 텍스트를 나누기 때문입니다.
그렇다면 중국어는 어떨까요?
한자 하나가 항상 Token 하나라고 먼저 추측할 수 있습니다.
정말 그럴까요?
앞의 GPT도 “쪼개질” 수 있다면 한자도 “쪼개질” 수 있을까요? 다음 문장의 爱를 봅시다.
我爱 GPT pmt。
한자가 실제로 가운데에서 잘리는 것은 아닙니다. 다만 컴퓨터는 문자를 인코딩으로 표현하고, 바이트 단위로 텍스트를 처리하는 일부 Tokenizer는 한자의 바이트열을 둘 이상의 Token으로 나눌 수 있습니다. 오래된 도구가 이런 조각을 하나씩 표시할 때는 알아보기 어려운 대체 문자가 나타나기도 했습니다.
먼저 재현할 수 있는 실제 결과 하나를 보겠습니다. 2026-08-31 기준 OpenAI 공식 tiktoken 테스트에서 cl100k_base는 hello world를 [15339, 1917]로 인코딩하며, 모두 2 Token입니다. 다시 디코딩하면 원문으로 돌아옵니다. 이 테스트는 공식 테스트 파일에서 확인할 수 있습니다.
이 결과는 지정한 인코딩과 입력에만 해당합니다. 다른 모델이나 인코딩도 같은 결과를 낸다는 뜻은 아닙니다.
설명만 읽고 끝내지 말고 실제 분할 실험을 직접 해 봅시다.
- 현재 사용하는 서비스의 공식 Tokenizer 또는 계산 도구를 엽니다.
- 테스트 날짜, 서비스와 모델 이름, 도구에 표시되는 인코딩 이름을 기록합니다.
I love GPT pmt.와我爱 GPT pmt。를 각각 입력합니다.- 도구가 실제로 보여 준 분할과 Token 수, 제공되는 경우 Token ID도 기록합니다.
- 모델이나 인코딩을 바꿀 수 있다면 다른 옵션으로 같은 테스트를 반복합니다.
결과마다 모델, 인코딩과 날짜를 함께 적어 두세요. 나중에 결과가 바뀌었을 때 텍스트가 바뀐 것인지, 모델, 어휘 집합 또는 도구가 업데이트된 것인지 구분할 수 있습니다.
간단히 말해 “한자를 쪼갠다”는 표현은 한 가지 현상을 기억하는 데 도움이 됩니다. 사람에게 완전한 한 글자가 반드시 Token 하나에만 대응하는 것은 아닙니다.
하지만 이것도 모든 모델에 고정된 결론은 아닙니다. 모델, 어휘 집합 또는 인코딩을 바꾸면 같은 한자가 Token 하나를 사용할 수도, 여러 개를 사용할 수도 있습니다. 중국어가 영어보다 언제나 더 많은 Token을 쓰는 것도 아닙니다. 정확한 수는 목표 모델에 맞는 도구로 직접 시험해야 합니다.
Token ID란 무엇인가?
Tokenizer는 각 Token을 어휘 집합의 정수 식별자에 대응시킵니다. 이 숫자가 Token ID입니다.
텍스트: 你好
Token: [你][好]
Token ID: [예시 ID 1][예시 ID 2]
위 내용은 개념을 설명하기 위한 것일 뿐, 실제 모델의 분할 결과를 나타내지 않습니다.
Token ID는 모델의 어휘 집합에 있는 일련번호와 비슷합니다. 모델이나 인코딩이 바뀌면 같은 텍스트의 Token ID도 완전히 달라질 수 있습니다. 단어의 중요도, 사실의 신뢰성 또는 모델의 확신을 나타내지도 않습니다.
Token을 알아야 하는 이유는 무엇인가?
먼저 모델이 한 번에 처리할 수 있는 내용에는 용량 제한이 있습니다. 입력, 대화 기록, 도구 설명과 출력이 모두 Token을 사용합니다.
또 “한글 500자를 써라”라는 요구와 “생성할 Token 수를 최대 몇 개로 제한한다”는 것은 같은 말이 아닙니다. 업무상 글자 수를 엄격히 맞춰야 한다면 모델이 생성한 뒤 다시 확인해야 합니다.
마지막으로 많은 API가 입력과 출력에 사용된 Token을 기록합니다. 구체적인 측정 방식은 서비스와 모델에 따라 달라지므로 실제 인터페이스 문서와 반환된 usage 데이터를 기준으로 해야 합니다.
정확한 수가 필요할 때 “한 글자는 Token 몇 개” 같은 고정 공식을 적용하지 마세요. 먼저 실제 모델을 확인한 다음 해당 서비스의 Tokenizer나 계산 인터페이스를 사용하세요.
OpenAI 사용자는 공식 Tokenizer에서 텍스트가 분할되는 모습을 확인할 수 있습니다. 다른 서비스는 각자의 공식 도구와 문서를 사용해야 합니다.
처음 질문으로 돌아가 봅시다
모델은 일련의 Token을 받은 뒤 다음 Token이 무엇인지 어떻게 결정할까요?
같은 문장이 때로 다른 방식으로 이어지는 이유는 무엇일까요?
이를 이해하려면 확률과 샘플링을 계속 살펴봐야 합니다.
이전 장: 첫 대화
다음 장: 확률, 샘플링과 Temperature