[ PROMPT_NODE_23012 ]
pipeline
[ SKILL_DOCUMENTATION ]
# 分词工作流组件
归一化器、预分词器、模型、后处理器和解码器的完整指南。
## 工作流概述
**完整分词工作流:**
原始文本
↓
归一化 (清洗, 小写化)
↓
预分词 (拆分为单词)
↓
模型 (应用 BPE/WordPiece/Unigram)
↓
后处理 (添加特殊 Token)
↓
Token ID
**解码过程相反:**
Token ID
↓
解码器 (处理特殊编码)
↓
原始文本
## 归一化器 (Normalizers)
清洗并标准化输入文本。
### 常见归一化器
**小写化:**
python
from tokenizers.normalizers import Lowercase
tokenizer.normalizer = Lowercase()
# 输入: "Hello WORLD"
# 输出: "hello world"
**Unicode 归一化:**
python
from tokenizers.normalizers import NFD, NFC, NFKD, NFKC
# NFD: 规范分解
tokenizer.normalizer = NFD()
# "é" → "e" + "́" (独立字符)
# NFC: 规范组合 (默认)
tokenizer.normalizer = NFC()
# "e" + "́" → "é" (组合)
# NFKD: 兼容分解
tokenizer.normalizer = NFKD()
# "fi" → "f" + "i"
# NFKC: 兼容组合
tokenizer.normalizer = NFKC()
# 最激进的归一化
**去除重音:**
python
from tokenizers.normalizers import StripAccents
tokenizer.normalizer = StripAccents()
# 输入: "café"
# 输出: "cafe"
**空白处理:**
python
from tokenizers.normalizers import Strip, StripAccents
# 移除首尾空白
tokenizer.normalizer = Strip()
# 输入: " hello "
# 输出: "hello"
**替换模式:**
python
from tokenizers.normalizers import Replace
# 将换行符替换为空格
tokenizer.normalizer = Replace("\n", " ")
# 输入: "hello\nworld"
# 输出: "hello world"
### 组合归一化器
python
from tokenizers.normalizers import Sequence, NFD, Lowercase, StripAccents
# BERT 风格归一化
tokenizer.normalizer = Sequence([
NFD(), # Unicode 分解
Lowercase(), # 转换为小写
StripAccents() # 去除重音
])
# 输入: "Café au Lait"
# NFD 后: "Café au Lait" (e + ́)
# Lowercase 后: "café au lait"
# StripAccents 后: "cafe au lait"
### 用例示例
**不区分大小写的模型 (BERT):**
python
from tokenizers.normalizers import BertNormalizer
# 一体化 BERT 归一化
tokenizer.normalizer = BertNormalizer(
clean_text=True, # 移除控制字符
handle_chinese_chars=True, # 在中文字符周围添加空格