개요
Tokenization은 텍스트를 모델이 처리하는 토큰 단위로 나누고 각 토큰을 정수 ID 같은 내부 표현으로 바꾸는 과정이다. 토큰은 반드시 단어나 글자 하나와 일치하지 않으며, 많은 현대 언어 모델은 서브워드 단위를 사용한다.
서브워드 방식
SentencePiece는 입력을 미리 단어 단위로 분리했다고 가정하지 않고 원문 문장에서 직접 서브워드 모델을 학습할 수 있도록 설계된 언어 독립적 토크나이저·디토크나이저다.[1]
LLM과의 관계
LLM은 토큰의 연속을 입력으로 받아 다음 토큰이나 표현을 예측한다. 따라서 같은 문자열이라도 어떤 토크나이저를 쓰는지에 따라 토큰 수와 모델이 보는 단위가 달라질 수 있다.
어휘집과 분할 방식
토크나이저는 어떤 문자열 조각을 하나의 토큰으로 등록할지 정한 어휘집과, 입력을 그 어휘집 단위로 나누는 규칙을 함께 가진다. SentencePiece는 원문에서 직접 서브워드 단위를 학습하도록 설계돼 공백 기반 단어 분리가 자연스럽지 않은 언어에도 적용할 수 있다.[1]
토큰 수가 달라지는 이유
같은 문장도 토크나이저의 어휘와 분할 방식에 따라 토큰 수가 달라질 수 있다. 자주 등장하는 문자열은 하나의 토큰이 될 수 있고, 드문 문자열은 여러 조각으로 나뉠 수 있다. 그래서 문자 수나 단어 수를 그대로 모델 입력 길이로 환산할 수 없다.
문맥과 비용의 관계
Context Window는 보통 토큰 단위로 제한되며, 추론 비용과 지연도 입력·출력 토큰 수의 영향을 받는다. 여러 모델의 문맥 길이나 API 비용을 비교할 때는 서로 다른 토크나이저가 같은 텍스트를 몇 토큰으로 표현하는지도 확인할 필요가 있다.
예제: 글자·UTF-8 바이트·토큰은 다른 단위
공백 하나를 포함한 '서울 AI'는 유니코드 코드 포인트 5개이며 UTF-8로는 9바이트다. '서'와 '울'이 각각 3바이트, 공백과 A와 I가 각각 1바이트이기 때문이다. 이것만으로 모델의 토큰 수는 알 수 없다. 토큰 수는 선택한 토크나이저의 어휘·정규화·분할 규칙으로 직접 계산해야 한다.
화면에서 비슷하게 보이는 é도 U+00E9 한 코드 포인트로 저장하면 UTF-8 2바이트, e와 U+0301 결합 악센트로 저장하면 두 코드 포인트·3바이트다. 이는 인코딩 설명 예제이며 특정 모델의 토큰 측정값은 아니다. 화면의 글자 수, 코드 포인트 수, 바이트 수와 토큰 수를 구분하고 문맥 예산에는 실제 토큰 단위를 사용한다.
모델과 토크나이저를 함께 고정하기
모델 버전, 토크나이저 파일·어휘집, 특수 토큰과 메시지 형식을 같은 배포 묶음으로 기록한다. 같은 정수 ID라도 다른 어휘집에서는 다른 문자열을 뜻할 수 있다. 이름이 비슷한 토크나이저를 임의로 대신 쓰거나, 토큰 ID를 다른 모델에 그대로 전달하지 않는다.
요청의 역할·구분자·도구 정의 같은 부가 입력이 실제 모델 입력에 포함되는지도 확인한다. 평문 한 조각만 센 값과 전체 요청의 사용량이 다를 수 있다. 내부 길이 예산과 제공사의 과금·추론 토큰 산식은 별도 조건이므로, API 비용을 글자 수의 고정 배수로 추정하지 않는다. 문서 임베딩을 만들 때도 모델에 맞는 입력 처리 버전을 기록한다.
잘라내기 전에 지켜야 할 조건 찾기
가상의 AI 제품 안내가 '인터넷 연결이 필요하다. 단, 로컬 모드는 별도 설치 시 가능하다'라면 예외 부분을 잘라 '인터넷 연결이 필요하다'만 남기는 순간 질문에 따라 답이 달라진다. 입력을 줄일 때 문장·문서 경계와 조건을 고려하고 검색 원문의 위치를 남긴다. 글자나 바이트 경계에서 무작정 자르기보다 토크나이저와 문자열 디코딩 규칙을 함께 확인한다.
설명용 가상 배정에서 지시 200, 대화 500, 자료 300, 출력 여유 200토큰이면 합계 1,200토큰이다. 자료 150을 추가하면 1,350이 된다. 출력 여유는 실제 생성량과 같지 않으며, 이 합계는 특정 모델의 최대 길이나 과금 산식을 나타내지 않는다. 부정어·예외가 남는지와 전체 입력 길이를 동시에 확인한다.
다국어·코드·공백을 시험하는 방법
한국어와 영어의 같은 뜻, 제품 번호 X-20, 줄바꿈, 코드 들여쓰기, 결합 문자와 이모지 등을 별도 시험한다. 인코딩 후 디코딩한 결과를 원문과 비교하되, 토크나이저가 의도적으로 정규화하는 경우 그 차이를 먼저 문서화한다. 모든 토크나이저가 원문을 바이트 단위로 그대로 복원한다고 가정하지 않는다. 입력 길이와 응답 시간도 같은 입력 조건에서 비교한다.
SentencePiece ↗는 원문 문장에서 서브워드 모델을 학습하는 설계를 설명한다.[1] 서브워드 번역 연구 ↗는 드문 단어를 작은 단위의 연속으로 표현하는 접근을 다룬다.[2] 이 연구의 특정 번역 결과를 현재 모든 한국어 모델의 효율로 일반화하지 않는다.