Transformers v5 토크나이제이션 업데이트

Transformers v5는 토크나이저의 아키텍처 설계를 학습된 어휘와 분리하는 대대적인 재설계를 도입했습니다. 이 변화로 개발자는 토크나이저를 불투명한 블랙 박스가 아니라 구성 가능한 템플릿으로 다룰 수 있게 되었으며, 이는 PyTorch가 신경망 아키텍처와 학습된 가중치를 분리하는 방식과 유사합니다.

아키텍처와 파라미터의 분리

Transformers v5에서는 토크나이저 아키텍처(정규화기, 사전 토크나이저, 모델 타입, 후처리기, 디코더)가 어휘와 병합 규칙과 같은 학습된 파라미터와 명확히 구분됩니다. 이는 토크나이저가 사전 학습된 체크포인트 파일에 강하게 결합되어 있어 사용 중인 정규화 또는 사전 토크나이징 전략을 파악하기 어려웠던 버전 4와는 다른 접근 방식입니다.

이 모듈식 접근 덕분에 토크나이저 클래스가 이제 자신의 구조를 명시적으로 선언합니다. 예를 들어 v5의 LlamaTokenizer는 Byte Pair Encoding (BPE)을 사용하고 입력 텍스트를 정규화하지 않으며, 디코딩 시 메타스페이스 문자 를 공백으로 교체한다는 것을 명확히 정의합니다.

통합 백엔드와 간소화된 계층 구조

Transformers v5는 모든 모델에 대해 "slow" 파이썬 토크나이저와 "fast" 러스트 기반 토크나이저 두 가지 구현을 제공하던 이전의 이중 구현 시스템을 없앴습니다.

통합 파일 구조

  • 모델당 단일 파일: 라이브러리는 이제 모델당 하나의 파일(tokenization_llama.py 등)만 사용합니다.
  • 선호 백엔드: TokenizersBackend를 통한 러스트 기반 토크나이징이 기본으로 선호되며, 코드 중복을 줄이고 slow와 fast 버전 간의 동작 차이를 없앱니다.

클래스 계층 구조

  • PreTrainedTokenizerBase: 모든 토크나이저가 구현해야 하는 공통 인터페이스를 정의하는 추상 기본 클래스이며, 특수 토큰, 인코딩/디코딩 인터페이스, 직렬화, 채팅 템플릿 등을 처리합니다.
  • TokenizersBackend: 고성능 토크나이징을 위해 러스트 기반 tokenizers 라이브러리를 감싸는 주요 백엔드입니다.
  • PythonBackend: 사용자 정의 로직이나 레거시 호환성을 위한 순수 파이썬 믹스인입니다.
  • SentencePieceBackend: 구글의 SentencePiece 라이브러리를 사용하는 모델을 전담합니다.

모델별 토크나이저를 처음부터 학습하기

아키텍처와 파라미터가 분리되었기 때문에 사용자는 "빈" 토크나이저 아키텍처를 인스턴스화하고 도메인 특화 코퍼스에 대해 학습시킬 수 있습니다. 이전에는 저수준 프리미티브를 사용해 파이프라인을 직접 재구성해야 했습니다. v5에서는 개발자가 LlamaTokenizer와 같은 모델별 클래스를 초기화하고 train_new_from_iterator를 호출해 맞춤 어휘와 병합 규칙을 채우면서도 모델 고유의 공백 처리와 특수 토큰 규칙을 그대로 유지할 수 있습니다.

토크나이제이션 파이프라인 및 래퍼 레이어

Transformers에서 토크나이제이션은 다섯 개의 독립 단계로 이루어집니다:

  1. Normalizer: 텍스트를 표준화합니다(예: 소문자 변환).
  2. Pre-tokenizer: 텍스트를 초기 청크로 분할합니다.
  3. Model: 알고리즘을 적용합니다(BPE, Unigram, WordPiece 등).
  4. Post-processor: 특수 토큰(BOS, EOS, 패딩 등)을 추가합니다.
  5. Decoder: 토큰 ID를 다시 텍스트로 변환합니다.

원시 tokenizers 러스트 라이브러리가 이러한 메커니즘을 담당하지만, transformers 래퍼는 모델 인식 기능을 추가합니다. 여기에는 apply_chat_template을 통한 채팅 템플릿 적용, 자동 특수 토큰 삽입, 컨텍스트 길이에 맞춘 잘라내기, 패딩을 포함한 배치 인코딩 등이 포함됩니다.

비교: Transformers v4 vs. v5

항목 V4 V5
모델당 파일 수 두 개 (tokenization_X.py, tokenization_X_fast.py) 하나 (tokenization_X.py)
기본 백엔드 파이썬과 러스트가 분리 러스트(TokenizersBackend)가 선호
아키텍처 가시성 직렬화 파일에 숨김 클래스 정의에 명시적 표시
처음부터 학습 파이프라인을 수동으로 구성해야 함 tokenizer.train(files=[...]) 사용
구성 요소 검사 어려움, 문서화 부족 직접 속성 접근 가능 (tokenizer.normalizer 등)
상위 클래스 PreTrainedTokenizer, PreTrainedTokenizerFast TokenizersBackend, SentencePieceBackend, PythonBackend

Sources