토큰이란? AI가 문장을 읽고 만드는 기본 단위
지난 글에서는 LLM이 문맥에 이어질 내용을 확률적으로 예측하고, 선택한 결과를 다시 문맥에 넣어 긴 답변을 만든다는 것을 알아봤습니다. 이때 모델이 한 번에 예측하는 기본 단위가 바로 토큰(Token)입니다.
토큰은 AI가 글을 읽고 만드는 작은 조각입니다. 하나의 단어일 수도 있지만 단어의 일부, 문장 부호, 공백과 결합된 문자열이 될 수도 있습니다. 따라서 토큰을 단순히 ‘단어’라고만 생각하면 실제 동작을 이해하기 어렵습니다.
왜 문장을 토큰으로 나눌까?
신경망은 글자를 그대로 이해하지 않고 숫자로 계산합니다. 먼저 토크나이저(Tokenizer)가 입력 문장을 정해진 규칙에 따라 토큰으로 나누고, 각 토큰을 어휘 사전에 등록된 숫자 ID로 바꿉니다.
예를 들어 “오늘 날씨가 좋다”라는 문장이 여러 토큰으로 분리되면 각 조각은 고유한 토큰 ID에 대응합니다. 모델은 이 ID를 입력받은 뒤 다음 글에서 살펴볼 임베딩 벡터로 변환해 계산합니다.
토큰은 단어와 어떻게 다를까?
사람은 보통 띄어쓰기 단위로 단어를 구분하지만, 토크나이저는 모델이 학습한 어휘와 분할 알고리즘을 기준으로 문장을 나눕니다.
- 자주 등장한 짧은 단어는 하나의 토큰이 될 수 있습니다.
- 긴 단어나 드문 단어는 여러 부분 단어로 나뉠 수 있습니다.
- 쉼표와 마침표 같은 문장 부호가 별도 토큰이 될 수 있습니다.
- 공백이 다음 단어와 결합된 형태로 저장될 수도 있습니다.
Google의 대규모 언어 모델 입문 자료에서는 토큰이 단어, 부분 단어 또는 한 글자일 수 있으며, 현대 언어 모델은 주로 부분 단어 단위의 토큰화를 활용한다고 설명합니다.
토큰화 과정 살펴보기
- 원문 입력: 사용자가 자연어 문장을 입력합니다.
- 정규화와 분할: 토크나이저가 규칙에 따라 글을 처리하고 여러 토큰으로 나눕니다.
- ID 변환: 각 토큰을 어휘 사전의 숫자 ID에 연결합니다.
- 모델 입력: ID가 임베딩으로 변환되어 신경망 계산에 사용됩니다.
- 텍스트 복원: 생성된 토큰 ID를 다시 글자로 합쳐 사용자에게 보여줍니다.
그림의 한국어 분할과 숫자는 이해를 위한 예시입니다. 같은 문장이라도 사용하는 토크나이저와 어휘 사전이 다르면 토큰 경계와 ID가 모두 달라질 수 있습니다. Hugging Face Tokenizers 문서도 원문을 처리해 부분 단어 토큰으로 나누고 ID에 매핑하는 파이프라인을 설명합니다.
왜 부분 단어를 사용할까?
모든 단어를 하나씩 어휘 사전에 저장하면 신조어, 이름, 활용형을 모두 담기 어렵고 사전도 지나치게 커집니다. 반대로 모든 글자를 하나씩 나누면 사전은 작아지지만 문장이 너무 많은 토큰으로 길어질 수 있습니다.
부분 단어(Subword) 방식은 두 방법 사이의 균형을 잡습니다. 자주 쓰는 표현은 비교적 큰 조각으로 유지하고, 드문 단어는 이미 알고 있는 작은 조각으로 나눕니다. 예를 들어 영어 단어가 접두사·어근·접미사에 가까운 여러 조각으로 분리될 수 있습니다.
다만 토크나이저가 항상 사람이 생각하는 의미 단위로 정확히 나누는 것은 아닙니다. 분할 결과는 학습된 어휘와 알고리즘에 따라 정해집니다.
한글은 어떻게 토큰화될까?
한국어는 조사와 어미가 붙고 같은 어근이 여러 형태로 변하기 때문에 띄어쓰기만으로 처리하기 어렵습니다. 어떤 토크나이저는 자주 쓰는 단어 전체를 하나로 유지하지만, 다른 토크나이저는 어절이나 글자 일부를 더 작은 조각으로 나눌 수 있습니다.
영어에서 자주 쓰이는 “한 토큰은 몇 글자” 같은 대략적인 환산 값을 한글에 그대로 적용하면 정확하지 않을 수 있습니다. 언어와 토크나이저에 따라 같은 길이의 문장도 토큰 수가 달라지므로 실제 사용 모델의 계산 도구로 확인하는 것이 가장 정확합니다.
특수 토큰도 있다
모델에 따라 일반 글자 외에 특별한 역할을 하는 토큰을 사용하기도 합니다.
- 시작·종료 토큰: 문장이나 생성의 시작과 끝을 표시합니다.
- 구분 토큰: 두 문장이나 대화 역할을 나눕니다.
- 패딩 토큰: 여러 입력 길이를 맞출 때 빈자리를 채웁니다.
- 마스크 토큰: 학습 과정에서 가린 위치를 표시할 수 있습니다.
어떤 특수 토큰을 사용하는지는 모델의 구조와 학습 방식에 따라 다릅니다.
토큰 수가 중요한 이유
처리 가능한 문맥 길이와 연결된다
언어 모델은 한 번에 처리할 수 있는 토큰 수에 한계가 있습니다. 사용자 입력, 이전 대화, 참고 문서와 생성된 답변이 모두 문맥 공간을 사용합니다. 너무 길면 일부 내용을 줄이거나 여러 구간으로 나눠야 할 수 있습니다.
속도와 사용량에 영향을 줄 수 있다
처리하거나 생성하는 토큰이 많아질수록 일반적으로 계산할 양도 증가합니다. 토큰 기준으로 사용량을 측정하는 서비스에서는 입력과 출력 토큰 수가 비용에 영향을 줄 수도 있습니다. 다만 계산 방식과 가격은 서비스마다 다르므로 해당 서비스의 최신 안내를 확인해야 합니다.
답변 길이와 끝맺음에 영향을 준다
출력 토큰 한도가 너무 작으면 답변이 중간에서 끊길 수 있습니다. 반대로 필요 이상으로 긴 입력을 넣으면 중요한 지시가 많은 내용 속에 묻힐 수 있으므로 핵심 자료를 구조적으로 전달하는 것이 좋습니다.
토큰에 관한 흔한 오해
- 토큰 하나는 단어 하나다: 단어 일부나 문장 부호일 수도 있습니다.
- 같은 문장은 항상 같은 수로 나뉜다: 모델의 토크나이저에 따라 달라집니다.
- 토큰 ID 자체에 의미가 있다: ID는 어휘 항목을 가리키는 번호이며 숫자 크기가 의미의 크기를 뜻하지 않습니다.
- 글자 수만 알면 토큰 수를 정확히 계산할 수 있다: 언어와 분할 방식이 달라 정확한 일대일 환산은 어렵습니다.
한눈에 정리하기
- 토큰은 언어 모델이 텍스트를 처리하고 생성하는 기본 단위입니다.
- 토크나이저는 원문을 토큰으로 나누고 각 토큰을 숫자 ID로 바꿉니다.
- 토큰은 단어, 부분 단어, 글자 또는 문장 부호일 수 있습니다.
- 분할 방식과 ID는 모델마다 다릅니다.
- 토큰 수는 문맥 길이, 처리량, 답변 길이와 연결됩니다.
다음 글에서는 숫자 ID로 바뀐 토큰을 AI가 계산할 수 있는 의미 공간의 벡터로 표현하는 임베딩(Embedding)을 알아보겠습니다.
댓글
댓글 쓰기