什么是Tokenizer

什么是Tokenizer

内容

在自然语言处理(NLP)中,Tokenizer(分词器/令牌生成器) 是将原始文本转换为模型可处理的结构化数据的核心组件。它的核心任务是将句子拆分为更小的单元(Token),并将这些单元映射为数字ID,供机器学习模型(如BERT、GPT)理解和计算。


一、Token 是什么?

Token 是文本的最小处理单元,其形式取决于分词策略:

  1. 单词级(Word-level)
    将文本按空格或标点分割为完整单词。
    示例
    "Don't hesitate."["Don", "t", "hesitate", "."]
    缺点:词汇表庞大,无法处理未见过的新词(如专业术语)。

  2. 字符级(Character-level)
    将文本拆分为单个字符。
    示例
    "apple"["a", "p", "p", "l", "e"]
    缺点:序列过长,语义信息稀疏。

  3. 子词级(Subword-level)(主流方法)
    平衡单词和字符的优势,将词拆分为常见子词。
    示例(使用 Byte-Pair Encoding, BPE):
    "unhappy"["un", "happy"]
    优势:能处理未知词汇,词汇表更紧凑。


二、Tokenizer 的核心功能

  1. 文本标准化

    • 统一转为小写(可选)
    • 去除多余空格
    • 处理标点符号
    • 处理特殊字符(如Emoji)
  2. Token 拆分
    根据预定义规则(如BPE、WordPiece)分割文本。

  3. 映射为数字ID
    将Token转换为模型可理解的词汇表索引。
    示例

    tokenizer.encode("Hello world!") → [101, 7592, 2088, 102]  # BERT的输入ID
    
  4. 添加模型所需特殊Token

    • [CLS]:分类任务中表示句首(BERT)
    • [SEP]:分隔句子
    • <s> / </s>:标记文本开头和结尾(如GPT)

三、常见 Tokenizer 类型

类型 算法 代表模型 特点
WordPiece 贪心合并高频子词 BERT, DistilBERT 适合处理英文、德文等空格分隔语言
Byte-Pair Encoding (BPE) 统计合并高频字节对 GPT, RoBERTa 支持多语言,处理未知词能力强
SentencePiece 无损分词 T5, ALBERT 直接处理原始文本(包括空格、特殊符号)
Unigram 概率模型 XLNet 灵活调整词汇表大小

四、如何使用 Tokenizer?(代码示例)

以 Hugging Face Transformers 库为例:

  1. 加载预训练 Tokenizer

    from transformers import AutoTokenizer
    tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
    
  2. 文本 → Token ID

    text = "I love natural language processing!"
    encoded_input = tokenizer(text, padding=True, truncation=True, return_tensors="pt")
    # 输出:
    # {'input_ids': tensor([[101, 1045, 2293, 3019, 2653, 2738, 999, 102]]),
    #  'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1]])}
    
  3. Token ID → 文本

    decoded_text = tokenizer.decode(encoded_input["input_ids"][0])
    # 输出: "[CLS] i love natural language processing! [SEP]"
    

五、Tokenizer 的关键文件

  1. vocab.txt
    词汇表文件,每行对应一个Token及其ID。

    [PAD] 0
    [CLS] 1
    [SEP] 2
    hello 3
    world 4
    ...
    
  2. merges.txt(BPE 用)
    记录子词合并规则(从字符级逐步合并为子词)。

    e n
    t h
    i s
    ...
    

六、实际应用注意事项

  1. 匹配模型与 Tokenizer
    使用与模型配套的 Tokenizer(如 bert-base-uncased 模型对应同名的 Tokenizer)。

  2. 处理多语言文本
    选择支持多语言的 Tokenizer(如 xlm-roberta-base)。

  3. 自定义词汇表
    针对特定领域(如医学、法律)重新训练 Tokenizer:

    from tokenizers import BertWordPieceTokenizer
    tokenizer = BertWordPieceTokenizer()
    tokenizer.train(files=["data.txt"], vocab_size=32000)
    tokenizer.save_model("custom_tokenizer")
    
  4. 处理长文本
    设置 max_lengthtruncation 策略:

    encoded_input = tokenizer(text, max_length=512, truncation=True)
    

七、总结

Tokenizer 是 NLP 模型的“翻译官”,将人类语言转化为机器语言。理解其工作原理和正确使用方式,是构建高效 NLP 系统的关键步骤。

posted @ 2025-03-02 01:00  Gold_stein  阅读(459)  评论(0)    收藏  举报