sentencepiece

GitHub

SentencePiece 是无监督语言无关分词器,支持 BPE 和 Unigram。适用于多语言、CJK 文本处理及模型训练,提供快速、轻量且确定的分词能力。

02-tokenization/sentencepiece/SKILL.md Orchestra-Research/AI-Research-SKILLs

Trigger Scenarios

需要多语言或 CJK 文本分词 构建语言无关的 NLP 模型 需要可复现的分词结果

Install

npx skills add Orchestra-Research/AI-Research-SKILLs --skill sentencepiece -g -y
More Options

Non-standard path

npx skills add https://github.com/Orchestra-Research/AI-Research-SKILLs/tree/main/02-tokenization/sentencepiece -g -y

Use without installing

npx skills use Orchestra-Research/AI-Research-SKILLs@sentencepiece

指定 Agent (Claude Code)

npx skills add Orchestra-Research/AI-Research-SKILLs --skill sentencepiece -a claude-code -g -y

安装 repo 全部 skill

npx skills add Orchestra-Research/AI-Research-SKILLs --all -g -y

预览 repo 内 skill

npx skills add Orchestra-Research/AI-Research-SKILLs --list

SKILL.md

Frontmatter
{
    "name": "sentencepiece",
    "tags": [
        "Tokenization",
        "SentencePiece",
        "Language-Independent",
        "BPE",
        "Unigram",
        "Multilingual",
        "CJK Languages",
        "Unicode",
        "Deterministic",
        "Google"
    ],
    "author": "Orchestra Research",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Language-independent tokenizer treating text as raw Unicode. Supports BPE and Unigram algorithms. Fast (50k sentences\/sec), lightweight (6MB memory), deterministic vocabulary. Used by T5, ALBERT, XLNet, mBART. Train on raw text without pre-tokenization. Use when you need multilingual support, CJK languages, or reproducible tokenization.",
    "dependencies": [
        "sentencepiece",
        "transformers"
    ]
}

SentencePiece - Language-Independent Tokenization

Unsupervised tokenizer that works on raw text without language-specific preprocessing.

When to use SentencePiece

Use SentencePiece when:

  • Building multilingual models (no language-specific rules)
  • Working with CJK languages (Chinese, Japanese, Korean)
  • Need reproducible tokenization (deterministic vocabulary)
  • Want to train on raw text (no pre-tokenization needed)
  • Require lightweight deployment (6MB memory, 50k sentences/sec)

Performance:

  • Speed: 50,000 sentences/sec
  • Memory: ~6MB for loaded model
  • Languages: All (language-independent)

Use alternatives instead:

  • HuggingFace Tokenizers: Faster training, more flexibility
  • tiktoken: OpenAI models (GPT-3.5/4)
  • BERT WordPiece: English-centric tasks

Quick start

Installation

# Python
pip install sentencepiece

# C++ (requires CMake)
git clone https://github.com/google/sentencepiece.git
cd sentencepiece
mkdir build && cd build
cmake .. && make -j $(nproc)
sudo make install

Train model

# Command-line (BPE with 8000 vocab)
spm_train --input=data.txt --model_prefix=m --vocab_size=8000 --model_type=bpe

# Python API
import sentencepiece as spm

spm.SentencePieceTrainer.train(
    input='data.txt',
    model_prefix='m',
    vocab_size=8000,
    model_type='bpe'
)

Training time: ~1-2 minutes for 100MB corpus

Encode and decode

import sentencepiece as spm

# Load model
sp = spm.SentencePieceProcessor(model_file='m.model')

# Encode to pieces
pieces = sp.encode('This is a test', out_type=str)
print(pieces)  # ['▁This', '▁is', '▁a', '▁test']

# Encode to IDs
ids = sp.encode('This is a test', out_type=int)
print(ids)  # [284, 47, 11, 1243]

# Decode
text = sp.decode(ids)
print(text)  # "This is a test"

Language-independent design

Whitespace as symbol (▁)

text = "Hello world"
pieces = sp.encode(text, out_type=str)
print(pieces)  # ['▁Hello', '▁world']

# Decode preserves spaces
decoded = sp.decode_pieces(pieces)
print(decoded)  # "Hello world"

Key principle: Treat text as raw Unicode, whitespace = ▁ (meta symbol)

Tokenization algorithms

BPE (Byte-Pair Encoding)

spm.SentencePieceTrainer.train(
    input='data.txt',
    model_prefix='bpe_model',
    vocab_size=16000,
    model_type='bpe'
)

Used by: mBART

Unigram (default)

spm.SentencePieceTrainer.train(
    input='data.txt',
    model_prefix='unigram_model',
    vocab_size=8000,
    model_type='unigram'
)

Used by: T5, ALBERT, XLNet

Training configuration

Essential parameters

spm.SentencePieceTrainer.train(
    input='corpus.txt',
    model_prefix='m',
    vocab_size=32000,
    model_type='unigram',
    character_coverage=0.9995,  # 1.0 for CJK
    user_defined_symbols=['[SEP]', '[CLS]'],
    unk_piece='<unk>',
    num_threads=16
)

Character coverage

Language Type Coverage Rationale
English 0.9995 Most common chars
CJK (Chinese) 1.0 All characters needed
Multilingual 0.9995 Balance

Encoding options

Subword regularization

# Sample different tokenizations
for _ in range(3):
    pieces = sp.encode('tokenization', out_type=str, enable_sampling=True, alpha=0.1)
    print(pieces)

# Output (different each time):
# ['▁token', 'ization']
# ['▁tok', 'en', 'ization']

Use case: Data augmentation for robustness.

Common patterns

T5-style training

spm.SentencePieceTrainer.train(
    input='c4_corpus.txt',
    model_prefix='t5',
    vocab_size=32000,
    model_type='unigram',
    user_defined_symbols=[f'<extra_id_{i}>' for i in range(100)],
    unk_id=2,
    eos_id=1,
    pad_id=0
)

Integration with transformers

from transformers import T5Tokenizer

# T5 uses SentencePiece internally
tokenizer = T5Tokenizer.from_pretrained('t5-base')
inputs = tokenizer('translate English to French: Hello', return_tensors='pt')

Performance benchmarks

Training speed

Corpus BPE (16k) Unigram (8k)
100 MB 1-2 min 3-4 min
1 GB 10-15 min 30-40 min

Tokenization speed

  • SentencePiece: 50,000 sentences/sec
  • HF Tokenizers: 200,000 sentences/sec (4× faster)

Supported models

T5 family: t5-base, t5-large (32k vocab, Unigram) ALBERT: albert-base-v2 (30k vocab, Unigram) XLNet: xlnet-base-cased (32k vocab, Unigram) mBART: facebook/mbart-large-50 (250k vocab, BPE)

References

Resources

Version History

  • 773a529 Current 2026-08-20 11:52

Dependencies

  • required sentencepiece
  • required transformers

Same Skill Collection

01-model-architecture/litgpt/SKILL.md
01-model-architecture/mamba/SKILL.md
01-model-architecture/nanogpt/SKILL.md
01-model-architecture/rwkv/SKILL.md
01-model-architecture/torchtitan/SKILL.md
02-tokenization/huggingface-tokenizers/SKILL.md
03-fine-tuning/axolotl/SKILL.md
03-fine-tuning/llama-factory/SKILL.md
03-fine-tuning/peft/SKILL.md
03-fine-tuning/unsloth/SKILL.md
04-mechanistic-interpretability/nnsight/SKILL.md
04-mechanistic-interpretability/pyvene/SKILL.md
04-mechanistic-interpretability/saelens/SKILL.md
04-mechanistic-interpretability/transformer-lens/SKILL.md
05-data-processing/nemo-curator/SKILL.md
05-data-processing/ray-data/SKILL.md
06-post-training/grpo-rl-training/SKILL.md
06-post-training/miles/SKILL.md
06-post-training/openrlhf/SKILL.md
06-post-training/simpo/SKILL.md
06-post-training/slime/SKILL.md
06-post-training/torchforge/SKILL.md
06-post-training/trl-fine-tuning/SKILL.md
06-post-training/verl/SKILL.md
07-safety-alignment/constitutional-ai/SKILL.md
07-safety-alignment/llamaguard/SKILL.md
07-safety-alignment/nemo-guardrails/SKILL.md
07-safety-alignment/prompt-guard/SKILL.md
08-distributed-training/accelerate/SKILL.md
08-distributed-training/deepspeed/SKILL.md
08-distributed-training/megatron-core/SKILL.md
08-distributed-training/pytorch-fsdp2/SKILL.md
08-distributed-training/pytorch-lightning/SKILL.md
08-distributed-training/ray-train/SKILL.md
09-infrastructure/lambda-labs/SKILL.md
09-infrastructure/modal/SKILL.md
09-infrastructure/skypilot/SKILL.md
10-optimization/awq/SKILL.md
10-optimization/bitsandbytes/SKILL.md
10-optimization/flash-attention/SKILL.md
10-optimization/gguf/SKILL.md
10-optimization/gptq/SKILL.md
10-optimization/hqq/SKILL.md
10-optimization/ml-training-recipes/SKILL.md
11-evaluation/bigcode-evaluation-harness/SKILL.md
11-evaluation/lm-evaluation-harness/SKILL.md
12-inference-serving/llama-cpp/SKILL.md
12-inference-serving/sglang/SKILL.md
12-inference-serving/tensorrt-llm/SKILL.md

Metadata

Files
0
Version
773a529
Hash
47b1d10f
Indexed
2026-08-20 11:52

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-21 10:01
浙ICP备14020137号-1 $Map of visitor$