토크나이저(Tokenizer)

·2025년 4월 29일

Data

목록 보기
8/10

1. 토크나이저의 역할

  1. 분할(Splitting)
    • 텍스트를 모델이 처리할 단위로 나눕니다.
    • 단순 공백 기반, 형태소 기반, 서브워드(subword) 기반 등 방식이 다양함.
  2. 정수화(Indexing)
    • 각 토큰을 미리 정의된 어휘(vocabulary)에 매핑해 정수 ID로 변환.
  3. 패딩(Padding) 및 트렁케이팅(Truncation)
    • 모델 입력 길이를 맞추기 위해 짧으면 <pad> 토큰을 채우고, 길면 잘라냄.
  4. 후처리(Post-processing)
    • 특별 토큰(예: <bos>, <eos>, <unk>)을 추가해 문장 경계를 표시하거나 사전에 없는 단어를 처리.

2. 주요 토크나이징 기법

기법특징
Whitespace공백 문자 기준으로 단어 단위 분할. 단순하지만 어휘 폭발 문제 발생
Morpheme형태소 분석기를 통해 의미 단위(어간·어미·접사 등)로 분할. 한국어에 유용
BPE자주 등장하는 문자 시퀀스를 병합하는 방식. 빈도 기반으로 어휘 구축
WordPiece구글이 제안. BPE와 유사하나 병합 시 확률 모델을 활용해 불필요 병합 방지
Unigram LM문장 내 토큰화 확률을 최대화하는 어휘를 선택. SentencePiece에 사용

3. 서브워드 토크나이저 학습 과정 (BPE 예시)

  1. 초기화: 모든 문자 단위(‘a’, ‘b’, ‘c’, …)를 어휘에 등록
  2. 빈도 계산: 학습 코퍼스에서 인접 문자 쌍의 빈도를 집계
  3. 병합: 가장 빈도가 높은 문자 쌍을 하나의 토큰으로 합치고 어휘에 추가
  4. 반복: 원하는 어휘 크기(vocabulary size)에 도달할 때까지 2–3 과정을 반복

이로써 자주 나오는 어절·부분어절이 토큰으로 학습되며, 희귀 단어는 서브워드 단위로 분해


4. 한국어 특화 처리

  • 형태소 기반: KoNLPy, Khaiii 같은 라이브러리로 어절을 형태소 단위로 분리
  • Subword 결합: 형태소 분해 후 서브워드 토크나이저(BPE/Unigram) 적용으로 OOV(사전에 없는 단어) 문제 해소

5. 실행 예시 (Python-유사 의사코드)

# 토크나이저 초기화 (SentencePiece 사용 가정)
tokenizer = SentencePieceProcessor(model_file='spm.model')

# 텍스트를 ID 시퀀스로 변환
ids = tokenizer.encode("안녕하세요")  

# ID 시퀀스를 다시 텍스트로 변환
tokens = tokenizer.decode(ids)  
# e.g. "안녕하세요"

0개의 댓글