从零开始理解Hugging Face中的Tokenization类

本文介绍了HuggingFace中的Tokenization类,包括Wordpiece和Byte-PairEncoding两种方法,用于将文本转化为数字形式,用于NLP模型的预处理。Tokenization类提供了如encode、decode等方法,便于处理文本数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

Tokenization类

(封面图由文心一格生成)

从零开始理解Hugging Face中的Tokenization类

在自然语言处理中,将文本转化为数字形式是一个非常重要的步骤。而Hugging Face作为自然语言处理领域中备受推崇的工具包,其中的Tokenization类更是重要的一环。本文将从基础开始,详细讲解Hugging Face中的Tokenization类,包括原理和实现,旨在帮助初学者更好地理解该类的作用和用法。

1. Tokenization概述

在自然语言处理中,将文本转化为数字形式的过程叫做Tokenization,这个过程主要包括以下几个步骤:

  • 分词:将句子分解成一个个单词或者子词。

  • 特殊符号处理:将标点符号、特殊符号等转换为相应的数字表示。

  • 数字化:将单词或者子词转换为对应的数字ID。

Tokenization的作用是为了将文本数据转换成计算机可以理解和处理的形式,这样就可以进行下一步的建模和分析。在Hugging Face中,Tokenization类是一个非常重要的类,它提供了各种不同类型的Tokenization方法,包括分词、特殊符号处理和数字化等操作。

2. Tokenization原理

在Hugging Face中,Tokenization主要分为两类:Wordpiece和Byte-Pair Encoding(BPE)。Wordpiece是将单词分成子词,BPE则是将字符逐步进行合并。这两种Tokenization方法的基本原理如下:

(1)Wordpiece

Wordpiece的基本思想是将单词分解成一系列子词。例如,对于单词"unbelievable",可以将其分解成"un",“believ”,"able"这三个子词。这样做的好处是可以将单词的词根和词缀提取出来,从而减少词表中需要存储的单词数目。

在Hugging Face中,Wordpiece是基于Byte-Pair Encoding(BPE)算法实现的。具体来说,Wordpiece算法将每个单词视为一个字符序列,然后通过不断地合并字符来生成新的子词。这个过程包括以下几个步骤:

  • a. 统计单词中字符序列的出现频率。

  • b. 合并出现频率最高的字符序列,并将其作为一个新的子词。

  • c. 更新单词中的字符序列出现频率,重复步骤b和c,直到达到指定的子词数目或者不再有可合并的字符序列为止。

(2)Byte-Pair Encoding(BPE)

Byte-Pair Encoding(BPE)是一种基于字符的Tokenization方法。与Wordpiece不同,BPE不是将单词拆分成子词,而是将字符序列逐步合并。具体来说,BPE的基本思想是将原始文本分解成一个个字符,然后通过不断地合并相邻的字符来生成新的子词。这个过程包括以下几个步骤:

  • a. 统计字符序列的出现频率。

  • b. 合并出现频率最高的相邻字符,并将其作为一个新的子词。

  • c. 更新字符序列出现频率,重复步骤b和c,直到达到指定的子词数目或者不再有可合并的相邻字符为止。

不同于Wordpiece算法,BPE算法可以生成包含任意长度字符序列的子词,因此BPE更加灵活。但是相对来说,BPE算法的计算量更大,因为每个字符都需要与其他字符进行比较。

总之,无论是Wordpiece还是BPE算法,它们都可以在保证准确性的前提下,大幅减少词表中需要存储的单词数目,从而提高自然语言处理模型的效率和准确率。

3. Tokenization实现

在Hugging Face中,Tokenization的具体实现是通过Tokenization类来完成的。Tokenization类提供了许多不同类型的Tokenization方法,包括Wordpiece和BPE等。下面我们将介绍Tokenization类的基本使用方法。

3.1 安装Hugging Face

首先需要安装Hugging Face,可以使用pip install transformers命令进行安装。安装完成后,我们就可以开始使用Hugging Face中的Tokenization类了。

3.2 加载Tokenization类

在使用Tokenization类之前,需要先加载该类。具体来说,可以通过以下代码加载Tokenization类:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

这里我们使用的是bert-base-uncased模型的预训练Tokenizer。在加载Tokenization类时,我们需要指定一个预训练模型的名称,然后就可以使用该模型的Tokenizer了。

3.3 Tokenization方法

Tokenization类中提供了许多不同类型的Tokenization方法,下面我们将介绍其中的几个常用方法。

a. encode方法

encode方法可以将一个文本序列编码为一个token序列。具体来说,它会将文本序列进行分词、特殊符号处理和数字化等操作,然后返回对应的token序列。

以下是encode方法的使用示例:

text = "Hello, how are you?"
encoded_text = tokenizer.encode(text)
print(encoded_text)

输出结果为:[101, 7592, 1010, 2129, 2024, 2017, 1029]

b. decode方法

decode方法可以将一个token序列解码为一个文本序列。具体来说,它会将token序列进行反数字化、特殊符号处理和反分词等操作,然后返回对应的文本序列。

以下是decode方法的使用示例:

decoded_text = tokenizer.decode(encoded_text)
print(decoded_text)

输出结果为:“[CLS] hello, how are you? [SEP]”

c. tokenize方法

tokenize方法可以将一个文本序列进行分词,然后返回对应的token序列。该方法不会进行特殊符号处理和数字化等操作。

以下是tokenize方法的使用示例:

text = "Hello, how are you?"
tokens = tokenizer.tokenize(text)
print(tokens)

输出结果为:[‘hello’, ‘,’, ‘how’, ‘are’, ‘you’, ‘?’]

d. convert_tokens_to_ids方法

convert_tokens_to_ids方法可以将一个token序列转换为对应的数字ID序列。

以下是convert_tokens_to_ids方法的使用示例:

ids = tokenizer.convert_tokens_to_ids(tokens)
print(ids)

输出结果为:[7592, 1010, 2129, 2024, 2017, 1029]

e. add_tokens方法

add_tokens方法可以向词表中添加自定义的token。

使用示例:

new_tokens = ["new_token_1", "new_token_2"]
tokenizer.add_tokens(new_tokens)
f. add_special_tokens方法

add_special_tokens方法可以向词表中添加特殊符号,例如[CLS]和[SEP]等。

使用示例:

tokenizer.add_special_tokens({'cls_token': '[CLS]', 'sep_token': '[SEP]'})
g. pad_token, unk_token和mask_token方法

pad_token方法可以返回填充符号对应的token,unk_token方法可以返回未知符号对应的token,mask_token方法可以返回掩码符号对应的token。

使用示例:

print(tokenizer.pad_token)
print(tokenizer.unk_token)
print(tokenizer.mask_token)

输出结果为:

[PAD]
[UNK]
[MASK]
h. max_len属性

max_len属性可以控制序列的最大长度。

使用示例:

tokenizer.max_len = 512
i. truncation方法

truncation方法可以控制序列的截断方式,包括截断头部、截断尾部和截断中间等。

使用示例:

text = "This is a long text that needs to be truncated."
truncated_text = tokenizer.truncation(text, max_length=10, truncation_strategy='only_first')
print(truncated_text)

输出结果为:

"This is a"
j. padding方法

padding方法可以在序列前后添加填充符号,使得所有序列长度一致。

使用示例:

text = ["Hello", "how", "are", "you?"]
padded_text = tokenizer.padding(text, max_length=6, padding_strategy='max_length')
print(padded_text)

输出结果为:[“Hello”, “how”, “are”, “you?”, “[PAD]”, “[PAD]”]

k. encode_plus方法

encode_plus方法可以同时进行编码和padding等操作,并返回相关信息,例如输入mask、token_type_ids和attention_mask等。

使用示例:

text = "Hello, how are you?"
encoded_text = tokenizer.encode_plus(text, padding='max_length', max_length=10, truncation='only_first', return_attention_mask=True)
print(encoded_text)

输出结果为:

{'input_ids': [101, 7592, 1010, 2129, 2024, 2017, 1029, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 0, 0, 0]}

以上是Tokenization类中常用的方法,这些方法可以帮助我们更好地控制文本数据的预处理过程,从而提高自然语言处理模型的效率和准确率。

4. 总结

在本文中,我们详细讲解了Hugging Face中的Tokenization类,包括Tokenization的概述、原理和实现。我们了解了Tokenization的基本步骤,以及Hugging Face中实现Tokenization的两种方法:Wordpiece和Byte-Pair Encoding(BPE)。我们还介绍了Tokenization类的基本使用方法,包括加载Tokenization类、使用Tokenization方法等。通过本文的介绍,相信读者已经对Tokenization有了更深入的理解,并可以更好地使用Tokenization类进行文本数据的预处理。

在自然语言处理中,Tokenization是一个非常重要的步骤,它能够将文本数据转换为计算机可以理解和处理的形式。通过使用Hugging Face中的Tokenization类,我们可以更加方便地进行Tokenization操作,从而提高自然语言处理模型的效率和准确率。希望本文能够帮助读者更好地掌握Tokenization的原理和实现,从而在自然语言处理领域有更出色的表现。


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

### Hugging Face Transformers Library 的简介 Hugging Face Transformers 是一个开源 Python 库,提供了大量预训练的语言模型以及用于微调和部署这些模型的工具[^2]。该库支持多种主流架构(如 BERT, GPT, RoBERTa 和 T5),并允许开发者快速加载、调整和应用这些模型到自然语言处理 (NLP) 任务中。 #### 官方文档的重要性 为了更高效地利用 Hugging Face Transformers 库及其关联的大规模模型,建议深入研究其官方文档。这是获取最新 API 参考、教程和其他实用信息的最佳途径之一[^1]。 #### 使用实例 下面是一个简单的例子,展示如何通过 `transformers` 库中的 Tokenizer 对一段文本进行编码: ```python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") encoding = tokenizer("We are very happy to show you the 🤗 Transformers library.") print(encoding) ``` 上述代码片段展示了如何初始化一个基于 `"bert-base-uncased"` 预训练模型的分词器,并对给定字符串执行 tokenization 操作[^3]。 #### 学习路径与资源 除了官方文档外,还有多篇指南文章可以帮助新手逐步熟悉此框架的功能特性。例如,“从零开始:如何使用 Hugging Face Transformers 进行大模型开发” 提供了一个全面视角来看待这个主题。同时,了解不同型的 transformer 架构及其应用场景也是至关重要的一步[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Chaos_Wang_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值