🎯 概述分词器(Tokenizers)是将文本转换为模型可理解的数字序列的关键组件,直接影响模型的性能和效率。🏗️ 主流分词算法1️⃣ BPE (Byte Pair Encoding)原理:通过合并高频字符对来构建词汇表优点:●有效处理未登录词●词汇量可控●多语言支持好缺点:●可能产生不完整的词●对中文支持有限实现示例:2️⃣ WordPiece原理:基于最大似然估计逐步合并词片段特点:●Google开发,用于BERT●在词前添加##标记子词●更适合英文示例:3️⃣ SentencePiece原理:将文本视为Unicode序列,不依赖空格分词优势:●语言无关性●支持中文、日文等无空格语言●可逆转换配置示例:📊 算法对比特性BPEWordPieceSentencePiece分词粒度子词子词子词/字符语言支持英文为主英文为主多语言空格处理依赖空格依赖空格不依赖空格训练速度快中等慢模型大小小中等大🎯 实战应用中文分词最佳实践12345678910111213141516
使用SentencePiece处理中文
import sentencepiece as spm
训练中文分词器
spm.SentencePieceTrainer.train( input='chinese_corpus.txt', model_prefix='chinese_sp', vocab_size=32000, character_coverage=0.995, # 覆盖99.5%字符 model_type='bpe')
使用分词器
sp = spm.SentencePieceProcessor(model_file='chinese_sp.model')tokens = sp.encode('大模型面试宝典', out_type=str)print(tokens) # ['大', '模型', '面试', '宝典']英文分词示例123456
使用Hugging Face Tokenizers
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')tokens = tokenizer.tokenize("transformer architecture")print(tokens) # ['transform', '##er', 'arch', '##itecture']🔍 技术细节词汇表构建流程1预处理:清洗文本,标准化2训练:基于语料库学习分词规则3验证:检查分词质量4优化:调整超参数特殊标记处理●[PAD]:填充标记●[UNK]:未知词标记●[CLS]:分类标记●[SEP]:分隔标记●[MASK]:掩码标记(用于MLM)📚 深入阅读●注意力机制详解●主流大模型结构🎯 面试重点1BPE和WordPiece的区别?2如何处理中文分词?3词汇表大小如何选择?4OOV(未登录词)问题如何解决?