HuggingFace课程解析:深入理解Transformer分词器的标准化与预分词处理
引言
在自然语言处理(NLP)领域,文本预处理是构建高效模型的关键步骤。本文将深入探讨Transformer模型分词过程中的两个核心预处理阶段:标准化(Normalization)和预分词(Pre-tokenization)。这些概念是理解现代NLP模型如何处理文本的基础。
分词流程概述
Transformer模型的分词过程可以概括为以下几个关键步骤:
- 标准化处理
- 预分词
- 应用分词算法(BPE/WordPiece/Unigram)
- 生成最终token序列
本文将重点解析前两个预处理步骤,为后续理解不同分词算法奠定基础。
标准化处理:文本清洗的艺术
标准化是分词流程中的第一步,其目的是将原始文本转换为更规范、更一致的形式。这一步骤类似于数据清洗,主要包括以下常见操作:
- 大小写转换:将文本统一为小写或保留原大小写
- 重音符号处理:去除或保留重音符号
- Unicode标准化:使用NFC或NFKC等形式统一字符表示
- 多余空格处理:删除不必要的空格或制表符
- 特殊字符处理:处理连字符、斜杠等特殊符号
实践示例
以BERT分词器为例,我们可以观察到标准化处理的实际效果:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
print(tokenizer.backend_tokenizer.normalizer.normalize_str("Héllò hôw are ü?"))
输出结果为:
'hello how are u?'
这个例子展示了BERT的uncased版本如何将文本转换为小写并去除重音符号。相比之下,BERT的cased版本会保留原始大小写但依然会去除重音符号。
预分词:文本的初步分割
预分词是将标准化后的文本初步分割为更小单元的过程,这些单元将成为后续分词算法处理的基础。不同的分词器采用不同的预分词策略:
常见预分词方法
-
基于空格和标点的分割:
- 典型代表:BERT分词器
- 特点:在空格和标点符号处分割,忽略连续空格
-
保留空格信息的分割:
- 典型代表:GPT-2分词器
- 特点:用特殊符号(Ġ)标记空格位置,保留原始空格信息
-
仅基于空格的分割:
- 典型代表:T5分词器
- 特点:仅在空格处分割,标点与单词连在一起
预分词效果对比
让我们比较不同分词器的预分词结果:
BERT分词器:
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
print(tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str("Hello, how are you?"))
输出:
[('Hello', (0, 5)), (',', (5, 6)), ('how', (7, 10)), ('are', (11, 14)), ('you', (16, 19)), ('?', (19, 20))]
GPT-2分词器:
tokenizer = AutoTokenizer.from_pretrained("gpt2")
print(tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str("Hello, how are you?"))
输出:
[('Hello', (0, 5)), (',', (5, 6)), ('Ġhow', (6, 10)), ('Ġare', (10, 14)), ('Ġ', (14, 15)), ('Ġyou', (15, 19)), ('?', (19, 20))]
T5分词器:
tokenizer = AutoTokenizer.from_pretrained("t5-small")
print(tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str("Hello, how are you?"))
输出:
[('▁Hello,', (0, 6)), ('▁how', (7, 10)), ('▁are', (11, 14)), ('▁you?', (16, 20))]
SentencePiece算法简介
SentencePiece是一种特殊的tokenization方法,它具有以下特点:
- 统一处理空格:用特殊字符
▁
替换空格 - 无需预分词:直接处理原始文本,特别适合无空格语言(如中文、日文)
- 完全可逆:可以完美还原原始文本,包括空格信息
主流分词算法概览
在后续内容中,我们将深入探讨三种主流分词算法:
| 特性 | BPE | WordPiece | Unigram | |------------|-------------|-------------|-------------| | 训练起点 | 小词汇表 | 小词汇表 | 大词汇表 | | 训练方式 | 学习合并规则 | 学习合并规则 | 学习删除规则 | | 合并标准 | 最高频对 | 最高分对 | 最小化损失 | | 编码方式 | 字符级合并 | 最长子词优先 | 概率最优分割 |
结语
理解标准化和预分词过程是掌握现代NLP模型文本处理机制的基础。不同的预处理策略会显著影响模型对文本的理解方式,进而影响模型性能。在后续学习中,我们将深入探讨BPE、WordPiece和Unigram这三种核心分词算法的工作原理和实现细节。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考