[Study] Tokenizers(nlp)

승민·2025년 11월 26일

Study

목록 보기
6/6
  1. 목적
    자연어 처리 모델들의 토크나이저들의 원리를 파악하여 장점, 단점을 확인 및 어떠한 방식으로 사용하는지 파악해보자
  2. 한국어 토크나이저는 어떻게 발전했는지 알아보자
    3 Tokenizer Comparison

1. Tokenizers

  • 현재 LLM에서 가장 많이 쓰이는 tokenizer는 Subword 기반(BPE, WordPiece, SentecePiece 등)
  • 각 토크나이저는 어휘 크기, 토큰 수, 속도, 언어적 특성, OOV 정책 등에서 서로 trade-off가 존재
  • 최근 연구들은 단순 빈도 기반 병합(BPE)의 한계를 보완하거나 아예 토크나이징을 제거하는 방향으로 발전
NoTokenizer정의동작 원리학습 효과
1BPE (Byte-Pair Encoding)가장 자주 등장하는 문자쌍(bigram)을 반복적으로 병합해 서브워드 생성① 말뭉치를 문자 단위로 분리 → ② bigram 빈도 계산 → ③ 가장 많이 등장한 pair 병합 → ④ 반복 수행희귀 단어 분해 능력이 높고, 안정적이며 빠른 학습 / 하지만 너무 자주 등장하는 패턴에 과도하게 병합될 수 있음
2WordPiece확률 최대화(Likelihood maximization) 기반 병합을 수행하는 서브워드 모델① 후보 서브워드를 만들고 점수(score)를 계산 → ② corpus likelihood가 가장 커지는 병합 선택 → ③ 반복BPE보다 더 언어 모델링 목표에 맞춘 병합 생성 → 희귀 단어 처리 개선 / 다만 학습 속도는 더 느림
3Unigram단일 서브워드 집합 중 최적의 조합을 선택하는 확률 모델① 충분히 큰 서브워드 후보 집합 생성 → ② 각 서브워드에 확률 부여 → ③ 전체 likelihood를 가장 높이는 방향으로 서브워드 제거(pruning)가장 유연하고 자연스럽게 분해되는 토큰 집합을 만들며, 한국어·일본어 같은 형태소 복잡한 언어에서 탁월함

1-1. Byte Pair Encoding(BPE)

  • 사용 모델
    • Transformer
    • GPT-1, 2, 3
    • RoBERTa
    • LLaMA1, 2
  • 정의
    • 원래는 데이터 압축 알고리즘으로 고안
    • NLP에서는 자주 등장하는 문자(or byte) 쌍을 반복적으로 병합해 사전을 구성하는 방식으로 사용
    • 병합을 몇 번 할지, 원하는 어휘(vocabualry) 크기를 정해서 그만큼 병합
    • 많은 LLM이 Byte-level BPE를 사용. 즉, UTF-8 바이트 스크림을 기본 단위로 삼음
  • 장점
    • OOV(out-of-vocabulary) 문제 완화
      • 희귀 단어나 신조어도 서브워드 단위로 분해 가능 → 어휘 외 단어 대응이 유연함
    • 어휘 크기 조절 가능
      • 병합 횟수나 목표 어휘 크기를 조정해서 모델 크기/토큰 수 균형 맞추기 쉬움
    • 보편성
      • 여러 언어에 기본적으로 적용 가능
      • 바이트 단위 사용 시 다양한 문자셋 지원
  • 단점
    • 불균형 빈도 문제: 자주 병합된 쌍은 유용하지만, 병합된 이후 일부 하위 구성 단위(scaffold token)가 적게 등장하면 학습에 비효율적일 수 있음
    • 의미 단위와 항상 정렬되지는 않음
      • 병합이 빈도 기반이기 때문에, 언어의 의미적 경계(형태소, 단어 등)와 꼭 일치하지 않을 수 있음
    • 사전 구축 비용
      • 대규모 코퍼스를 기반으로 병합 규칙을 학습해야 해서 비용이 듬

1-2. WordPiece

  • 사용 모델
    • BERT
    • DistilBERT
    • ELECTRA
  • 정의
    • 구글이 개발한 Subword Tokenizer. BERT와 같은 모델에서 사용
    • 병합 방식은 BPE와 유사하지만, Likelihood기반 쌍을 합치는 전략을 사용함
    • 토크나이징 시에는 "최장 매칭(Longest-match-first)" 전략 (최대 접두사 매칭) 을 사용함
    • 최근에는 WordPiece 토크나이징을 선형 시간(O(N))으로 처리하는 알고리즘도 제안
  • 장점
    • 효율적 인코딩
      • 최장 매칭 전략 덕분에 하나의 단어를 가능한 큰 토큰으로 분해 → 토큰 수를 줄일 수 있음
    • 속도 최적화 기능
      • 최근 연구에서는 속도를 매우 빠르게 함(Fast WordPiece tokenizer)
    • 폭 넓은 사용
      • BERT, DistilBERT, Electra 등 다양한 모델에서 사용되어, 생태계가 잘 갖춰져 있음
  • 단점
    • 사전 훈련 어려움
      • WordPiece 학습 알고리즘은 공개된 구현이 제한적이고 원본 논문 코드가 완전히 공개되어 있지 않음
      • 실제 사전 생성 방식에 여러 구현 차이가 존재
    • Greedy 전략의 한계
      • 최장 매칭 방식은 압축 효율 면에서 최적이 아닐 수 있음
      • Likelihood 기반 병합이지만, 토크나이징 시 greedy-match는 전역 최적이 아님
    • 언어 중립성 제한
      • 언어마다 WordPiece 최적화가 어려울 수 있음(띄어쓰기가 없는 언어)

1-3. SentencePiece(Unigram / BPE)

  • 사용 모델
    • T5
    • ALBERT
    • XLNet
    • mT5(multilingual)
    • LLaMA(BPE 변형)
  • 정의
    • 구글이 제안한 언어 독립적(subword) 토크나이저 라이브러리
    • Raw Sentence에서 직접 토크나이저를 학습할 수 있음
    • 공백 문자를 특별한 심볼로 다루고 이를 통해 재구성이 가능
      • BPE 기반
      • Unigram 언어 모델 기반
  • 장점
    • 언어 독립성
      • 언어별 전처리 규칙(예: 띄어쓰기, 형태소 분석 등)이 필요 없음
    • End-to-End
      • Raw 텍스트에서 바로 학습 가능 → 단순하고 일관된 파이프라인
    • 유연한 모델 선택
      • BPE 또는 Unigram 중에서 어휘 특성이나 작업에 맞게 선택 가능
    • 재구성 가능
      • 디코트나이징이 가능해서 모델 출력 → 원문 복원 가능
    • 높은 처리 속도: 논문에서 문장 단위 토크나이징 속도가 매우 빠름
  • 단점
    • 무작위성(Unigram)
      • 확률 기반으로 토큰 선택을 하기에, 같은 문장에 대해 여러 분할이 가능할 수 있고 결정적이지 않을 수 있음
    • 사전 크기 조절 어려움
      • 너무 큰 vocab을 만들면 비효율
      • 너무 작은 vocab을 만들면 표현력 부족
      • 즉, 균형을 맞추는 것이 어려움
    • 모델 크기와 토큰화 비용
      • 매우 큰 corpus에서 모델 학습이 비용이 많이 듬

2. 한국어 발전 방향

띄어쓰기 → 형태소 분석 → Subword(서브워드) → (현재)Byte-level → (연구)토크나이저 없는 방식

  • 큰 vocab + SentencePiece(Unigram) 조합
    • 한국어 특성을 반영하고, 대규모 데이터에서 안정적.
      • Google’s GLaM Korean
      • Kakao Brain “KoGPT”
      • 네이버 HyperCLOVA
  • Byte-level BPE + Korean Post-processing
    • 언어 공정성 + 신조어 대응 최고의 선택.
    • GPT-4 계열
    • LLaMA-3 Korean-adaptive 모델들

2-1. 초기: 띄어쓰기 + 규칙 기반 토크나이징

  • 초기 토크나어지(단순 띄어쓰기, 조사/어미 분리 규칙, 품사 태깅)
    • 한국어는 영어와 다르게 띄어쓰기만으로는 단어 경계를 찾기 어려운 언어
        • 나는밥을먹었습다
        • 나/는/밥/을/먹었/습니다.
    • 하지만 한국어는 형태 변화가 많아서 규칙 기반에서는 한계가 존재

2-2. 형태소 분석기(Morphological Analyzer)

  • 단어를 형태소(morpheme) 단위로 자른다
  • 조사/어미/접사 같은 문법 요소도 인식
  • 한국어 문장 구조를 꽤 잘 반영
    • Mecab, Kkma, Komoran, ...
      • 예(Mecab)
        • 나는 밥을 먹었습니다
        • 나/NP + 는/JX, 밥/NNG + 을/JKO, 먹/VV + 었/EP + 습니다/EF + ./SF
  • 단점
    • 사전 기반 → 신조어, 인터넷 용어 처리에 어려움
    • 사전 업데이트 필요
    • 속도/확장성 문제
    • LLM 같은 대규모 pretraining에는 비효율적

2-3. 딥러닝

  • 2018년 이후로 한국어도 형태소 기반 → Subword 기반으로 전환
  • 대표
    • SentencePiece(Unigram, BPE)
    • Byte-level BPE
  • 이유
    • 대규모 학습에서 형태소 분석기의 저오학도 때문에 전체 파이프라인이 영향
    • 사전 기반이라 새로운 단어 처리가 안됨
    • GPU 병렬 처리에 불편
  • 특징
    • Raw Text 그대로 학습 → 한국어 띄어쓰기 문제 해결
    • 신조어, 오타 대응 가능
    • LLM 학습 속도 빠름
      • 예: ▁나는 ▁밥을 ▁먹 었 습니다 .
  • 장점
    • 언어 중립적
    • 대규모 pretraining에 최적
  • 단점
    • 형태소 의미 단위와 다름
    • 먹었습니다 → 먹 었 습니다
    • 토큰 수가 늘어날 수 있음(효율 감소)

2-4. 최근: Multilingual LLM + Byte-level 토큰화

  • 한국어는 자모 분해, 띄어쓰기 들쑥날쑥 문제 때문에 오히려 Byte-level이 안정적
    • Byte-level BPE(GPT2, GPT3, LLaMA 등)
    • Tiktoken(Korean support)
    • 토크나이저 없는 방식 연구(characters, bytes)
  • 예를 들어 GPT 계열은 "가"를 UTF-8 byte로 분해해서 다룸:
    • 가 → EAB080 (UTF-8 byte sequence)
  • 장점
    • 모든 언어를 동일 방식으로 처리
    • 신조어, 이모지 대응 강함
  • 단점
    • 토큰 길이가 길어질 수 있음 → 비용증가

0개의 댓글