SentencePiece 是 Google 开源的、与语言无关的无监督分词工具,其核心设计是把文本当作原始 Unicode 处理,不依赖特定语言的预分词规则,空白被表示为特殊符号 ▁(meta symbol),解码时可还原空格。
用途:构建多语言模型(无需语言特定规则)、处理中日韩(CJK)文本、需要可复现的分词(确定性词表)、直接在原始文本上训练(无需预分词)、以及轻量部署。官方给出的性能为约每秒 50,000 句、加载模型约占 6MB 内存,覆盖所有语言。若更看重训练速度与灵活性可选 HuggingFace Tokenizers,OpenAI 模型可用 tiktoken,英文任务可用 BERT WordPiece。
主要能力:支持 BPE(Byte-Pair Encoding,mBART 使用)与 Unigram(默认,T5、ALBERT、XLNet 使用)两种算法;可训练词表并编码为子词片段或 ID、再解码回文本;支持子词正则化(enable_sampling、alpha)以产生不同切分用于数据增强。
使用方式:Python 安装命令为 pip install sentencepiece;C++ 需 CMake,克隆 https://github.com/google/sentencepiece 后构建安装。命令行训练示例:spm_train --input=data.txt --model_prefix=m --vocab_size=8000 --model_type=bpe;Python API 使用 spm.SentencePieceTrainer.train(...)。加载模型用 spm.SentencePieceProcessor(model_file='m.model'),再调用 encode/decode。常用训练参数包括 vocab_size、model_type、character_coverage(英文 0.9995,CJK 用 1.0)、user_defined_symbols、unk_piece、num_threads 等;T5 风格训练可加入 extra_id 符号并设置 unk_id/eos_id/pad_id。可与 Transformers 集成(如 T5Tokenizer)。
适用场景:多语言与 CJK 文本建模、需要确定性分词的流水线、原始文本直接训练、资源受限的轻量部署。
限制与参考:资料给出的训练时间约为 100MB 语料 1–2 分钟(BPE)或 3–4 分钟(Unigram),1GB 语料 10–15 分钟或 30–40 分钟;分词速度约为 HF Tokenizers 的四分之一。官方仓库为 https://github.com/google/sentencepiece,论文为 https://arxiv.org/abs/1808.06226(EMNLP 2018),版本 0.2.0+。