[ PROMPT_NODE_23020 ]
Tokenization Sentencepiece 训练
[ SKILL_DOCUMENTATION ]
# SentencePiece 训练指南
训练 SentencePiece 模型的完整指南。
## 训练工作流
### 第一步:准备语料库
bash
# 纯文本文件,每行一个句子(推荐)
cat corpus.txt
# Hello world
# This is a test
# SentencePiece is language-independent
# 或者使用原始文本(SentencePiece 会处理句子拆分)
### 第二步:训练模型
**命令行**:
bash
spm_train
--input=corpus.txt
--model_prefix=m
--vocab_size=8000
--model_type=unigram
--character_coverage=0.9995
**Python API**:
python
import sentencepiece as spm
spm.SentencePieceTrainer.train(
input='corpus.txt',
model_prefix='m',
vocab_size=8000,
model_type='unigram'
)
**输出**:`m.model` (二进制), `m.vocab` (文本词表)
### 第三步:加载和使用
python
sp = spm.SentencePieceProcessor(model_file='m.model')
pieces = sp.encode('Test sentence', out_type=str)
## 训练参数
### 核心参数
python
spm.SentencePieceTrainer.train(
# 必须
input='corpus.txt', # 输入语料库
model_prefix='output', # 输出前缀
vocab_size=8000, # 目标词表大小
# 算法
model_type='unigram', # 'unigram', 'bpe', 'char', 'word'
# 覆盖率
character_coverage=0.9995, # 大多数语言为 0.9995,CJK 为 1.0
# 归一化
normalization_rule_name='nmt_nfkc', # 'nmt_nfkc', 'nfkc', 'identity'
# 性能
num_threads=16, # 训练线程数
input_sentence_size=10000000 # 加载的最大句子数
)
### 特殊标记
python
spm.SentencePieceTrainer.train(
input='corpus.txt',
model_prefix='m',
vocab_size=32000,
# 控制符号(用于模型控制的特殊标记)
control_symbols=['', '', ''],
# 用户定义符号(从不拆分)
user_defined_symbols=['[MASK]', '[SEP]', '[CLS]'],
# 特殊标记片段
unk_piece='',
bos_piece='',
eos_piece='',
pad_piece='',
# 特殊标记 ID
unk_id=0,
bos_id=1,
eos_id=2,
pad_id=3
)
### 高级选项
python
spm.SentencePieceTrainer.train(
input='corpus.txt',
model_prefix='m',
vocab_size=32000,
# 字节回退(处理未知字符)
byte_fallback=True,
# 数字处理
split_digits=True, # 单独拆分数字
# 脚本拆分
split_by_unicode_script=True, # 按 Unicode 脚本拆分
split