分词与 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 数直接关系推理成本与长度上限。

小结

分词是文本到 token 的桥梁,子词切分以 BPE、WordPiece 为代表,兼顾词表与覆盖。记住配套 tokenizer、特殊 token 与长度限制,是调用大模型的第一步。

参考与延伸阅读

本文累计阅读