分词与 Tokenization:NLP 第一步
Tokenizer 把原始文本转成整数 token ID,是模型读取语言的入口。切分粒度决定了词表大小、未登录词处理与上下文长度成本。现代大模型普遍采用子词(subword)切分以平衡三者。
不同粒度
词级切分直观,但词表爆炸且难处理未登录词;字符级词表小却序列过长、语义稀疏;子词折中,把词拆成熟悉的片段,既控制词表又覆盖新词。中文还常叠加按字或按词切分。
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("bert-base-chinese")
ids = tok("自然语言处理很有趣", add_special_tokens=True)
print(ids.input_ids)
BPE 与 WordPiece
BPE 从字符出发,反复合并出现频率最高的相邻片段,构建词表。WordPiece 类似但用似然而非频次挑合并。二者都能把「unbelievable」拆成「un」「believ」「able」,让罕见词可由子词拼出。
注意点
同一模型必须用其专属 tokenizer,否则 ID 错位。特殊 token(如 [CLS]、
小结
分词是文本到 token 的桥梁,子词切分以 BPE、WordPiece 为代表,兼顾词表与覆盖。记住配套 tokenizer、特殊 token 与长度限制,是调用大模型的第一步。
参考与延伸阅读
- Hugging Face Tokenizers 文档。已核验。https://huggingface.co/docs/tokenizers/index
- BERT 论文(含 WordPiece 说明,Devlin 等 2018)。已核验。https://arxiv.org/abs/1810.04805
本文累计阅读 — 次