HuggingFace - Tokenizer
数据预处理
- Step1 分词:使用分词器对文本数据进行分词(字、字词);
- Step2 构建词典:根据数据集分词的结果,构建词典映射(这一步并不绝对,如果采用预训练词向量,词典映射要根据词向量文件进行处理);
- Step3 数据转换:根据构建好的词典,将分词处理后的数据做映射,将文本序列转换为数字序列:
- Step4 数据填充与截断:在以batch输入到模型的方式中,需要对过短的数据进行填充,过长的数据进行截断, 保证数据长度符合模型能接受的范围,同时batch内的数据维度大小一致。
基本使用
- 加载保存(from_pretrained/save_pretrained)
- 句子分词(tokenize)
- 查看词典(vocab)
- 索引转换(convert_tokens_to_ids /convert ids_to_tokens)
- 填充截断(padding/truncation)
- 其他输入(attention_mask/token_type_ids)
Fast vs Slow Tokenizer
在 Hugging Face 的 transformers 库中,Tokenizer(分词器) 分为 Fast Tokenizer 和 Slow Tokenizer 两种实现。它们功能相同,但底层实现和性能有显著差异。
🚀 Fast vs Slow Tokenizer 对比
| 特性 | Fast Tokenizer | Slow Tokenizer |
|---|---|---|
| 实现语言 | Rust (通过 tokenizers 库) | Python |
| 速度 | ⚡️ 非常快(尤其在批量处理时) | 较慢 |
| 内存占用 | 更低 | 更高 |
| 功能完整性 | ✅ 完整支持主流模型 | ✅ 完整支持 |
| 额外功能 | ✅ 支持 offset_mapping(字符级位置映射)✅ 更好的对齐(如 NER 任务) | ❌ 不支持或支持有限 |
| 是否推荐 | ✅ 强烈推荐 | ❌ 仅作兼容或调试用 |
执行示例
PS D:\code\klc\test\share4ai\docs\basic\huggingface> python.exe .\fast_tokenizer.py
Tokens: ['[CLS]', 'hello', ',', 'my', 'name', 'is', 'john', '.', '[SEP]']
Offsets: [(0, 0), (0, 5), (5, 6), (7, 9), (10, 14), (15, 17), (18, 22), (22, 23), (0, 0)]
