SuperAPI AI 工具集

sentencepiece

数据与分析

查看项目

更新于 10-30 06:45

技能介绍

SentencePiece 是一个无监督、语言无关的分词工具,将文本作为原始 Unicode 处理,不依赖特定语言的分词规则或预分词步骤。它由 Google 开发,常用于多语言和 CJK 文本场景。

一、适用场景 资料列出的典型用法包括:构建多语言模型(无需语言特定规则);处理中文、日文、韩文等 CJK 语言;需要可复现的分词(确定性词表);希望在原始文本上直接训练、无需预分词;以及需要轻量部署(约 6MB 内存、约 5 万句/秒)的场景。资料同时建议:若更看重训练速度与灵活性可考虑 HuggingFace Tokenizers;处理 OpenAI GPT-3.5/4 可用 tiktoken;英文为主任务可用 BERT WordPiece。

二、核心设计 SentencePiece 将空白视为符号“▁”(元符号),因此编码后的片段可保留空格信息,解码时可还原原始文本。例如“Hello world”会被编码为 ['▁Hello', '▁world'],解码后恢复为“Hello world”。

三、算法与训练 支持两类算法:BPE(Byte-Pair Encoding),资料称其被 mBART 使用;Unigram(默认),被 T5、ALBERT、XLNet 使用。训练可通过命令行或 Python API 完成,常用参数包括 input、model_prefix、vocab_size、model_type、character_coverage、user_defined_symbols、unk_piece、num_threads 等。字符覆盖率方面,英文与多语言常用 0.9995,CJK 建议 1.0。资料称 100MB 语料训练约需 1-2 分钟(BPE 16k)或 3-4 分钟(Unigram 8k)。

四、使用方式 Python 安装为 pip install sentencepiece;C++ 需 CMake 构建,给出克隆仓库、cmake、make、install 的命令。训练示例:命令行 spm_train --input=data.txt --model_prefix=m --vocab_size=8000 --model_type=bpe;Python 使用 spm.SentencePieceTrainer.train(...)。加载模型后用 spm.SentencePieceProcessor(model_file='m.model'),通过 encode 输出片段字符串或 ID,通过 decode 还原文本。还支持子词正则化(enable_sampling、alpha),用于数据增强。

五、集成与性能 可与 transformers 集成,T5 内部即使用 SentencePiece。资料列出支持模型:T5 系列(32k 词表、Unigram)、ALBERT(30k、Unigram)、XLNet(32k、Unigram)、mBART(250k、BPE)。分词速度约 5 万句/秒,资料对比 HF Tokenizers 约 20 万句/秒。项目 GitHub 星标 1 万以上,论文为 arXiv:1808.06226(EMNLP 2018),版本 0.2.0+。