HuggingFace课程解析:深入理解Transformer分词器的标准化与预分词处理

HuggingFace课程解析:深入理解Transformer分词器的标准化与预分词处理

引言

在自然语言处理(NLP)领域,文本预处理是构建高效模型的关键步骤。本文将深入探讨Transformer模型分词过程中的两个核心预处理阶段:标准化(Normalization)和预分词(Pre-tokenization)。这些概念是理解现代NLP模型如何处理文本的基础。

分词流程概述

Transformer模型的分词过程可以概括为以下几个关键步骤:

  1. 标准化处理
  2. 预分词
  3. 应用分词算法(BPE/WordPiece/Unigram)
  4. 生成最终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版本会保留原始大小写但依然会去除重音符号。

预分词:文本的初步分割

预分词是将标准化后的文本初步分割为更小单元的过程,这些单元将成为后续分词算法处理的基础。不同的分词器采用不同的预分词策略:

常见预分词方法

  1. 基于空格和标点的分割

    • 典型代表:BERT分词器
    • 特点:在空格和标点符号处分割,忽略连续空格
  2. 保留空格信息的分割

    • 典型代表:GPT-2分词器
    • 特点:用特殊符号(Ġ)标记空格位置,保留原始空格信息
  3. 仅基于空格的分割

    • 典型代表: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方法,它具有以下特点:

  1. 统一处理空格:用特殊字符替换空格
  2. 无需预分词:直接处理原始文本,特别适合无空格语言(如中文、日文)
  3. 完全可逆:可以完美还原原始文本,包括空格信息

主流分词算法概览

在后续内容中,我们将深入探讨三种主流分词算法:

| 特性 | BPE | WordPiece | Unigram | |------------|-------------|-------------|-------------| | 训练起点 | 小词汇表 | 小词汇表 | 大词汇表 | | 训练方式 | 学习合并规则 | 学习合并规则 | 学习删除规则 | | 合并标准 | 最高频对 | 最高分对 | 最小化损失 | | 编码方式 | 字符级合并 | 最长子词优先 | 概率最优分割 |

结语

理解标准化和预分词过程是掌握现代NLP模型文本处理机制的基础。不同的预处理策略会显著影响模型对文本的理解方式,进而影响模型性能。在后续学习中,我们将深入探讨BPE、WordPiece和Unigram这三种核心分词算法的工作原理和实现细节。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

褚知茉Jade

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值