什么是Tokenizer(分词器)

Tokenizer分词器)概述

Tokenizer 是自然语言处理NLP)中的基础组件,负责把原始文本切分成更小的单元(tokens),这些单元可以是完整的词、子词、字符,甚至是标点或特殊符号。通过这种切分,文本被转化为模型能够直接接受的离散序列,为后续的向量化、嵌入和深度学习提供输入格式。


1. 工作原理

  1. 文本归一化:统一大小写、去除多余空格、处理 Unicode 编码等。
  2. 切分规则:依据预定义的规则或统计模型,将文本划分为 token。
  3. 映射编码:每个 token 通常会映射到唯一的整数 ID(或词向量),供模型使用。

2. 常见类型与算法

类型 说明 代表算法/实现
基于规则的词级分词 按空格、正则或语言学规则直接切分为完整词。 WhitespaceTokenizerRegexTokenizer(Spark MLlib)
字符/字级分词 将文本拆成单个字符,常用于中文或字符语言。 NLTK char_tokenizeKeras Tokenizer 的 char_level=True
子词分词(Subword 在词与字符之间的粒度,兼顾词汇覆盖率与模型效率。 WordPieceBERT)、BPE(Byte‑Pair Encoding,GPT 系列)、SentencePiece(Unigram、BPE)
句子级分词 将文本划分为句子,常配合后续的词级或子词分词。 NLTK sent_tokenize、SpaCy sentencizer

3. 主流实现

框架/库 Tokenizer 名称 关键特性
Hugging FaceTransformers BertTokenizerGPT2Tokenizer 等 支持 WordPiece、BPE、SentencePiece,自动处理特殊标记([CLS]、[SEP])
Keras / TensorFlow Tokenizer 类 fit_on_texts 生成词表,texts_to_sequences 转为 ID 序列,支持 num_words 限制词表大小
PyTorch torchtext Vocab + basic_english tokenizer 轻量化词级分词,可自定义子词规则
Spark MLlib TokenizerRegexTokenizer 适用于大规模分布式文本预处理,默认空格切分
NLTK word_tokenizesent_tokenize 基于规则的经典分词器,支持多语言模型

4. 在模型中的作用

  1. 输入标准化:模型只能接受固定长度的数值序列,Tokenizer 把可变长的自然语言映射为统一的 token 序列。
  2. 词表构建:通过 fit_on_texts 或预训练词表,决定模型能识别的词汇范围。
  3. 子词处理:子词分词显著降低 OOV(未登录词)率,使模型在多语言或专业术语场景下仍能保持表现。
  4. 特殊标记:在 Transformer 系列模型中,Tokenizer 会自动添加 [CLS][SEP][PAD] 等控制标记,帮助模型区分句子边界和填充位置。

5. 使用示例(Python + Hugging Face)

from transformers import BertTokenizer

# 加载预训练的 BERT tokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

text = "Tokenizer 是自然语言处理中的关键组件。"
# 将文本切分为 token 并映射为 ID
encoded = tokenizer(text, return_tensors="pt")
print(encoded["input_ids"])

运行后会得到类似 [101, 19204, 3221, 8725, 1999, 1996, 2745, 102] 的整数序列,其中 101 为 [CLS]102 为 [SEP]


6. 注意事项

  • 词表大小 vs. 细粒度:词表过小会导致大量 OOV,词表过大则增加模型参数和计算成本。
  • 语言差异:中文常采用字符或子词分词,英文则多使用 WordPiece/BPE。
  • 一致性:训练、微调和推理阶段必须使用同一套 tokenizer,否则会出现 ID 对齐错误。
  • 特殊字符处理:标点、数字、表情等需要根据任务决定是否保留或过滤。

7. 发展趋势

  1. 自适应子词:结合语言模型的自学习能力,动态生成最优子词单元。
  2. 多模态 Tokenizer:将文本、图像、音频统一映射到同一 token 空间,支持跨模态检索。
  3. 轻量化实现:在移动端或边缘设备上使用更高效的子词算法(如 SentencePiece 的 Unigram)以降低计算开销。

总结:Tokenizer 是把自然语言转化为机器可处理的离散序列的关键桥梁。它的实现方式从最简单的基于空格的规则分词,到复杂的子词学习算法(WordPiece、BPE、SentencePiece),在各类 NLP 框架中都有成熟的实现。正确选择和配置 tokenizer,直接决定后续模型的输入质量和整体性能。

来源:www.aiug.cn
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!