728x90
반응형
SMALL

문자 단위 토큰화( Character - based Tokenization )이란 ?

문자 단위 토큰화는 텍스트를 단어가 아닌 글자(알파벳, 한글 자모음, 숫자, 문장 부호 등) 하나하나를 최소 단위의 토큰으로 나누는 방식이다. 

 

예시 : "Apple"

토큰화 결과 : ["A", "p", "p", "l", "e"]

한글의 경우, "사과"를 "사", "과"로 나누거나 더 작게 "ㅅ","ㅏ", "ㄱ", "ㅘ" 로 분리하는 방식까지 포함될 수 있다. 

 

장점 : 무적의 유연성

  • OOV 문제 완전 해결
    모든 단어는 결국 글자의 조합이다. 사전에 없는 신조어나 오타가 들어와도 , 이미 글자 단위의 정보는 사전에 있으므로 모델이 처리할 수 있다. 
  • 압도적으로 작은 사전 규모
    단어 단위 방식은 수만 ~ 수백만 개의 단어를 저장해야 했지만, 문자 단위는 알파벳26자나 한글 자모음 등 수백 개 내외의 토큰만으로 세상의 모든 문장을 표현할 수 있다. 

한계점

문자 단위 토큰화는 유연사지만, 다음과 같은 단점이 존재한다. 

  1. 시퀀스 길이 증가
    문장을 문자로 쪼개기 때문에 입력 길이가 매우 길어진다. 
  2. 의미 정보 부족
    문자 하나만으로는 의미를 가지기 어렵기 때문에 모델이 문맥을 이해하기 까지 더 많은 학습이 필요하다. 
  3. 학습 비효율
    긴 시퀀스를 처리해야 하므로 연산량 증가 및 학습 속도 저하가 발생한다. 

 

언제 사용하면 좋을까 ?

  • 철자 기반 모델 (오타 교정, 형태 분석)
  • 언어 독집적인 처리 (다국어 환경)
  • 특수 문자나 기호가 많은 데이터 

 

파이썬 코드

text = "Deeper neural networks are more difficult to train."

# 문자 단위로 분리
tokens = list(text)

# 글자 사전(Vocabulary) 구축
vocab = {char: i for i, char in enumerate(sorted(list(set(tokens))))}

print(f"토큰 예시: {tokens[:10]}")
print(f"사전 크기: {len(vocab)}")
print(f"ID 변환: {[vocab[c] for c in 'simple']}")

 

요약 

문자 단위 토큰화는 사전은 가볍고 OOV에는 강하지만, 의미 전달력이 떨어지고 연산량이 많다는 특징이 있다. 

문자 단위 토큰화는 유연성과 범용성은 뛰어나지만, 시퀀스 길이와 의미 표현 한계로 인해 실제 LLM에서는 잘 사용되지 않는다. 

결국 단어 단위의 '의미 정보'와 문자 단위의 '유연성' 사이에서 적절한 타협점을 찾아야 했다. 그 고민의 결과로 탄생하여 현재 GPT, BERT 등에서 표준으로 쓰이는 기술이 바로 서브워드 단위 토큰화이다. 

 

 

제미나이, 챗지피티 등을 이용 하여 작성 

728x90
반응형

+ Recent posts