Tokenization in Transformers v5: Simpler, Clearer, and More Modular
Quick Summary
트랜스포머스 버전 5는 토크나이저의 구조와 학습된 어휘를 분리하고 내부 구성과 클래스 계층을 명확히 해, 토큰화를 더 쉽게 분석·변경·학습할 수 있도록 재설계한다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
트랜스포머스 버전 5는 토크나이저의 구조와 학습된 어휘를 분리하고 내부 구성과 클래스 계층을 명확히 해, 토큰화를 더 쉽게 분석·변경·학습할 수 있도록 재설계한다.
📌 핵심 요약
- 언어 모델은 원문이 아니라 토큰 아이디의 정수열을 입력받으며, 토크나이저는 텍스트를 문자·단어·부분 단어 단위의 토큰과 아이디로 변환한다.
- 토큰화는 정규화기, 사전 토큰화기, 토큰화 모델, 후처리기, 디코더가 순차적으로 작동하는 독립적이고 교체 가능한 파이프라인이다.
- 현대 언어 모델에서는 빈번한 문자 쌍을 병합하는 바이트 페어 인코딩, 확률적으로 분할을 선택하는 유니그램, 가능도 기반 기준을 사용하는 워드피스가 주요 알고리즘으로 쓰인다.
- 토크나이저스 라이브러리가 빠른 범용 변환 엔진을 제공한다면, 트랜스포머스는 채팅 템플릿, 특수 토큰, 문맥 길이 제한, 배치 패딩, 텐서 반환 등 모델별 규칙을 추가한다.
- 트랜스포머스 버전 5의 핵심 방향은 공통 인터페이스, 백엔드, 모델별 설정의 책임을 분명히 하고 토크나이저 설계와 학습된 어휘를 분리해 모듈성과 이해 가능성을 높이는 것이다.
🧩 주요 포인트
- 언어 모델은 원문이 아니라 토큰 아이디의 정수열을 입력받으며, 토크나이저는 텍스트를 문자·단어·부분 단어 단위의 토큰과 아이디로 변환한다.
- 토큰화는 정규화기, 사전 토큰화기, 토큰화 모델, 후처리기, 디코더가 순차적으로 작동하는 독립적이고 교체 가능한 파이프라인이다.
- 현대 언어 모델에서는 빈번한 문자 쌍을 병합하는 바이트 페어 인코딩, 확률적으로 분할을 선택하는 유니그램, 가능도 기반 기준을 사용하는 워드피스가 주요 알고리즘으로 쓰인다.
- 토크나이저스 라이브러리가 빠른 범용 변환 엔진을 제공한다면, 트랜스포머스는 채팅 템플릿, 특수 토큰, 문맥 길이 제한, 배치 패딩, 텐서 반환 등 모델별 규칙을 추가한다.
- 트랜스포머스 버전 5의 핵심 방향은 공통 인터페이스, 백엔드, 모델별 설정의 책임을 분명히 하고 토크나이저 설계와 학습된 어휘를 분리해 모듈성과 이해 가능성을 높이는 것이다.
🧠 상세 정리
1. 트랜스포머스 버전 5가 해결하려는 문제
글은 토크나이저를 내부를 알기 어려운 블랙박스로 다루는 관행에서 벗어나, 직접 살펴보고 수정하며 처음부터 학습할 수 있는 구성요소로 이해하는 데 초점을 둔다. 트랜스포머스 버전 5의 큰 변화는 토크나이저의 설계 구조와 학습으로 얻어진 어휘를 분리하는 것으로, 신경망 구조와 학습 가중치를 나누는 방식에 비유된다. 이러한 분리는 어떤 처리 단계와 알고리즘을 사용하는지에 관한 구조적 정의를 특정 모델에서 학습된 어휘 및 병합 규칙과 구별하려는 것이다. 글은 이 재설계를 통해 내부 동작, 클래스 계층, 백엔드의 역할을 더 명확하게 만들고 토크나이저를 분석하거나 모델에 맞게 변경할 때 생기는 마찰을 줄이는 것을 목표로 제시한다.
2. 언어 모델이 텍스트를 읽는 방식
언어 모델은 원시 문자열을 그대로 읽지 않고 일반적으로 토큰 아이디 또는 입력 아이디라고 부르는 정수의 연속을 처리한다. 토큰화는 원문을 이 정수열로 바꾸는 과정이며, 각 토큰은 문자 하나나 단어 전체 또는 부분 단어 조각처럼 모델이 인식하는 최소 문자열 단위가 될 수 있다. 예시에서 Hello world는 두 개의 아이디로 변환되고, 두 번째 토큰은 앞쪽 공백까지 포함한 world 문자열을 하나의 단위로 나타낸다. 어휘는 각 고유 토큰과 토큰 아이디의 대응 관계를 보관하므로, 같은 텍스트라도 토크나이저의 어휘와 분할 규칙에 따라 서로 다른 토큰열이 만들어질 수 있다.
3. 압축 관점과 단계별 토큰화 파이프라인
좋은 토크나이저는 텍스트를 가능한 적은 수의 토큰으로 표현해, 모델 크기를 늘리지 않고도 주어진 문맥 공간에 더 많은 내용을 담도록 돕는다. 따라서 토크나이저 학습은 대상 데이터셋을 효과적으로 압축하는 분할 및 결합 규칙을 찾는 작업으로 설명되며, 데이터의 언어와 분포에 따라 적합한 규칙도 달라질 수 있다. 실제 처리는 대소문자·유니코드·공백을 정리하는 정규화기, 텍스트를 초기 조각으로 나누는 사전 토큰화기, 알고리즘으로 아이디를 정하는 모델, 시작·종료·패딩 토큰을 더하는 후처리기, 아이디를 텍스트로 되돌리는 디코더의 순서로 진행된다. 각 구성요소는 독립적이어서 전체 구현을 다시 작성하지 않고도 정규화 방식이나 토큰화 알고리즘 같은 특정 단계만 교체할 수 있다.
4. 주요 토큰화 알고리즘의 차이
글은 현대 언어 모델 토크나이저에서 널리 사용되는 알고리즘으로 바이트 페어 인코딩, 유니그램, 워드피스를 소개한다. 바이트 페어 인코딩은 가장 자주 함께 나타나는 문자 쌍을 반복적으로 병합하는 결정론적 방식이며, 널리 사용되는 대표적인 알고리즘이다. 유니그램은 큰 초기 어휘에서 출발해 가장 가능성이 높은 분할을 선택하는 확률적 접근을 사용하므로 엄격한 병합 절차를 따르는 바이트 페어 인코딩보다 유연하게 설명된다. 워드피스는 바이트 페어 인코딩과 유사하게 부분 단어를 구성하지만, 단순 빈도와는 다른 가능도 기반 기준을 사용하며 모델마다 내부 토큰화 모델을 확인해 어떤 알고리즘이 적용됐는지 살펴볼 수 있다.
5. 토크나이저스 라이브러리의 역할과 한계
토크나이저스는 러스트로 구현된 빠르고 효율적인 범용 토큰화 엔진으로, 특정 언어 모델에 종속되지 않은 채 텍스트를 토큰 아이디로 바꾸고 다시 문자열로 복원하는 핵심 작업을 담당한다. 이 라이브러리를 직접 사용하면 입력 문자열에 대응하는 아이디와 문자열 조각을 얻을 수 있지만, 결과는 어디까지나 원시 토큰화에 해당한다. 예를 들어 대화형 모델이 사용자와 어시스턴트의 역할을 어떤 형식으로 구분해야 하는지, 어느 위치에 특별한 경계 토큰을 넣어야 하는지는 범용 엔진 자체가 알지 못한다. 즉 토크나이저스는 알고리즘과 변환 메커니즘을 구현하지만, 그 알고리즘을 특정 모델의 입력 규약과 연결하는 관례까지 제공하지는 않는다.
6. 트랜스포머스가 추가하는 모델 인식 기능
트랜스포머스의 토크나이저 계층은 범용 토크나이저스 백엔드를 감싸고, 개별 언어 모델이 기대하는 입력 형식을 적용하는 추상화 계층을 제공한다. 대화형 모델에서는 채팅 템플릿을 이용해 사용자와 어시스턴트 역할을 배치하고, 대화 구간의 시작과 끝을 표시하는 특수 토큰과 구분자를 올바른 위치에 삽입할 수 있다. 이 밖에도 모델이 요구하는 시작·종료 토큰의 자동 추가, 최대 문맥 길이에 맞춘 잘라내기, 여러 입력을 같은 길이로 맞추는 배치 패딩, 파이토치 텐서나 넘파이 배열 같은 반환 형식 선택을 지원한다. 인코딩, 디코딩, 토큰과 아이디의 상호 변환처럼 널리 쓰이는 공통 인터페이스도 이 계층에서 일관된 방식으로 제공된다.
7. 공통 인터페이스를 정의하는 기본 클래스
트랜스포머스의 토크나이저는 공통 인터페이스를 정의하는 기본 클래스, 실제 변환을 수행하는 백엔드 클래스, 특정 모델에 필요한 설정을 제공하는 모델별 클래스의 계층으로 구성된다. 최상위의 사전학습 토크나이저 기본 클래스는 모든 토크나이저가 구현해야 할 공통 계약을 정의하며, 실제 토큰화 엔진의 종류와 무관한 기능을 맡는다. 여기에는 시작·종료·패딩·미등록 토큰 같은 특수 토큰 속성, 텍스트를 아이디와 어텐션 마스크로 바꾸는 호출 및 인코딩 인터페이스, 아이디를 텍스트로 복원하는 디코딩 인터페이스가 포함된다. 또한 토크나이저 파일을 내려받고 저장하는 직렬화 기능과 설정에 저장된 진자 템플릿으로 대화를 구성하는 채팅 템플릿 기능도 이 기본 계층에 위치한다.
8. 백엔드 분리와 모델별 토크나이저 구성
토크나이저스 백엔드 클래스는 공통 기본 클래스를 상속하면서 내부에 러스트 토크나이저 객체를 보관하고, 실제 인코딩과 같은 계산 집약적 작업을 이 객체에 위임한다. 파이썬 래퍼는 그 위에서 특수 토큰과 채팅 형식 같은 모델 인식 기능을 더하며, 라마와 젬마 같은 모델별 토크나이저 클래스는 올바른 어휘, 병합 규칙, 정규화 설정, 특수 토큰을 백엔드에 구성한다. 한편 순수 파이썬 백엔드는 표준 토크나이저스 파이프라인에 들어맞지 않는 사용자 정의 동작과 오래된 구현의 호환성을 지원하기 위한 혼합 계층으로 설명된다. 이러한 책임 분리는 공통 사용법을 유지하면서도 실행 엔진과 모델별 규칙을 구별하게 하며, 버전 5가 지향하는 더 단순하고 명확하며 모듈화된 토크나이저 구조의 기반이 된다.
🧾 핵심 주장 / 시사점
- 토큰 수는 단순한 전처리 결과가 아니라 제한된 문맥 창에 얼마나 많은 정보를 담을 수 있는지를 좌우하므로, 토크나이저의 압축 효율은 모델 활용 효율과 직접 연결된다.
- 범용 토큰화 알고리즘과 모델별 입력 규약을 분리하면 동일한 고속 엔진을 활용하면서도 채팅 형식, 특수 토큰, 패딩과 잘라내기 같은 요구사항을 모델별로 일관되게 관리할 수 있다.
- 토크나이저 구조와 학습된 어휘를 구별하는 설계는 기존 토크나이저를 분석하거나 일부 처리 단계만 교체하고 새로운 데이터에 맞는 어휘를 학습할 때 불필요한 결합을 줄여 준다.
✅ 액션 아이템
- 트랜스포머스 v5의 분리 원칙을 적용해 토크나이저 구조와 학습 어휘를 나누고 공통 인터페이스, 백엔드, 모델별 규칙의 책임을 명확히 정비한다.
- 정규화기→사전토큰화기→토큰화 모델→후처리기→디코더로 구성된 파이프라인을 독립 컴포넌트 단위로 점검해 교체 가능성을 검증한다.
- BPE, 유니그램, 워드피스가 동일 텍스트에서 토큰 수와 분할 경계에 미치는 차이를 비교해 입력 정합성 관점의 기준을 설정한다.
❓ 열린 질문
- 공통 인터페이스와 백엔드 분리를 강화할 때 채팅 템플릿, 특수 토큰, 컨텍스트 길이 제한은 어느 경계에서 모델별 규칙으로 분리하는 것이 적절한가?
- 정규화기·사전토큰화기·모델·후처리기 교체 시 토큰 ID 의미가 유지되는지 어떤 검증 지표로 판단할 것인가?
- 텍스트 특성별로 BPE, 유니그램, 워드피스 중 어느 분할 방식이 오분절 위험을 줄이고 맥락 보존을 더 안정적으로 달성할 수 있을까?