google/sentencepiece

Unsupervised text tokenizer for Neural Network-based text generation.

SentencePiece – 언어에 독립적인 서브워드 토크나이저

개요 – SentencePiece는 빠르고 가벼운 라이브러리(C++ 코어와 Python, Go, Rust 등 바인딩)로, 원시 텍스트에서 직접 서브워드 토크나이제이션 모델을 학습하고 적용합니다. 가장 일반적인 두 가지 서브워드 알고리즘인 Byte‑Pair Encoding(BPE)과 Unigram 언어 모델을 지원하며, 추가 전처리 없이 어디서나 사용할 수 있는 단일 자체 포함 .model 파일을 생성합니다.

AI에 중요한 이유 – 최신 신경 언어 모델(예: LLM, 번역 시스템, 음성 인식 파이프라인)은 고정 크기 어휘가 필요합니다. SentencePiece를 사용하면 완전히 데이터 기반 방식으로 어휘를 만들 수 있으며, 공백, 유니코드, 명시적 단어 경계가 없는 언어(중국어, 일본어, 태국어 등)를 언어별 토크나이저 없이 처리할 수 있습니다. 토크나이제이션은 무손실로, 원래 문자열을 정확히 재구성할 수 있어 디토크나이제이션이 간단해집니다.

주요 기능

  • 언어 독립적 훈련 – 원시 문장을 입력만 하면 됩니다. 외부 토크나이저 불필요.
  • 두 가지 서브워드 알고리즘 – BPE와 Unigram, 둘 다 선택적 서브워드 정규화(샘플링) 및 데이터 증강을 위한 BPE‑Dropout 지원.
  • 빠른 C++ 구현 – 초당 약 50k 문장, 메모리 사용량 약 6MiB.
  • 제로 의존성 런타임(SentencePiece Lite) – 메모리 매핑 가능한 소형 C++20 라이브러리(약 45KB 정적 라이브러리). 온디바이스 또는 고처리량 서버에서 사용 가능.
  • 크로스 언어 바인딩 – Python(pip install sentencepiece), Go, Rust, 순수 C API.
  • 자체 포함 모델 파일 – .model 파일에 어휘, 정규화 규칙, 분할 로직이 번들되어 플랫폼 간 동일한 결과를 보장.
  • 벤치마크 성능 – 멀티스레드 워크로드에서 Hugging Face의 fast tokenizers보다 4~10배 빠름(README의 표 참조).

일반적인 워크플로우(Python)

import sentencepiece as spm
# 1️⃣ 원시 텍스트 파일에서 훈련
spm.SentencePieceTrainer.train(
    input='data.txt', model_prefix='my', vocab_size=8000)

# 2️⃣ 모델 로드
sp = spm.SentencePieceProcessor(model_file='my.model')

# 3️⃣ 인코딩/디코딩
ids   = sp.encode('Hello world!', return_type=int)
pieces = sp.encode('Hello world!', return_type=str)
print(sp.decode(ids))   # → "Hello world!"

동일한 모델을 C++, Go, Rust에서 동등한 API로 사용할 수 있습니다.

사용 시기

  • 사용자 정의 서브워드 어휘가 필요한 새로운 LLM, 번역 또는 음성 모델 구축.
  • 명확한 단어 구분자가 없는 언어 작업.
  • 의존성 없는 작은 런타임이 필요한 엣지 디바이스 또는 고처리량 서버에 토크나이제이션 배포.
  • 여러 프로그래밍 환경에서 결정적이고 가역적인 토크나이제이션 원할 때.

리소스 – 리포지토리에는 광범위한 문서(CLI 가이드, C++/Python API 참조, 훈련 옵션 치트 시트, Docker 배포 지침)와 재현성을 위한 성능 벤치마크 스위트가 포함되어 있습니다.

라이선스 – Apache 2.0(허용적이며 상업적 친화적).

관련

  • 프로젝트
  • Dispatch
  • Dispatch
  • 프로젝트
  • 프로젝트