transformers基础组件tokenizer

本文详细介绍了在HuggingFaceTransformers库中进行文本数据预处理的过程,包括分词、构建词典、数据转换、填充与截断,以及如何加载和保存tokenizer。展示了如何使用tokenizer进行编码、解码和处理batch数据,以及特殊tokenizer的加载方法。

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

数据预处理

1.分词

使用分词器对文本数据进行分词

2.构建词典

根据数据集分词的结果,构建词典映射

3.数据转换

根据构建好的词典,将分词处理后的数据做映射,将文本序列转换为数字序列

4.数据填充与截断

在以batch输入到模型的方式中,需要对过短的数据进行填充,对过长的数据进行截断,保证数据长度符合模型能接受的范围,同时batch内的数据维度一致

加载与保存

#从huggingFace加载,输入模型名称
tokenizer=AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
#保存到本地
tokenizer.save_pretrained("./roberta_tokenizer")
#从本地加载tokenizer
tokenizer=AutoTokenizer.from_pretrained("./roberta_tokenizer")

句子分词

from transformers import AutoTokenizer
san="弱小的我还有大梦想"
tokens=tokenizer.tokenize(sen)
#查看词典
tokenizer.vocab

索引转换

ids=toknizer.convert_tokens_to_ids(tokens)
ids

tokens=tokenizer.convert_ids_to_tokens(ids)
tokens

str_sen=tokenizer.connvert_tokens_to_string(tokens)
str_sen

更便捷的实现方式

ids=tokenizer.encode(sen)
ids
ids=tokenizer.encode(sen,add_special_tokens=False)
ids

#将id序列转成字符串,有称为解码
str_sen=tokenizer.decode(ids)
str_sen

填充和截断

ids=tokenizer.encode(sen,padding="max_length",max_length=15)
ids

ids=tokenizer.encode(sen,max_length=5,truncation=True)
ids

 快速调用方法

inputs=tokenizer.encode_plus(sen,padding="max_length",max_length=15)
inputs


inputs=tokenizer(sen,padding="max_length",max_length=15)
inputs

#处理batch数据
sens=["弱小的我也有大梦想",
     "有梦想的了不起"]
res=tokenizer(sens)
res

特殊tokenizer的加载

from transformers import AutoTokenizer
tokenizer=AutoTokenizer.from_pretrained("THUDM/chatglm-6b",trust_remote_code=True)
tokenizer

<think>好的,用户问的是NLP中tokenizertokenizers的区别或用法,特别是在特定库里的情况。首先,我需要确定这两个术语的常见用法。Tokenizer通常指的是将文本分割成token的工具或组件,而tokenizers可能是一个具体的库,比如Hugging Face的Tokenizers库。 接下来,我需要回忆一下Hugging Face的库结构。他们有一个transformers库,里面包含各种预训练模型和对应的tokenizer,比如BertTokenizer。而tokenizers是一个独立的Rust实现的库,专门用于高效地训练和分词,可以被transformers调用。所以用户可能在问这两个的区别。 然后,用户可能是在使用Hugging Face的库时遇到了这两个术语,需要明确它们的不同。比如,当使用from transformers import BertTokenizer,这是transformers库中的tokenizer类,而from tokenizers import Tokenizer是直接使用底层的库。需要解释这两者的层次关系,以及各自的用途。 还需要考虑用户可能的实际应用场景。比如,如果用户想自定义分词器,可能需要直接使用tokenizers库来训练自己的模型,而如果只是用现成的预训练模型,直接用transformers里的tokenizer更方便。 另外,要注意用户可能对术语的大小写敏感,比如Tokenizer(类名)和tokenizers(库名)的区别。需要明确指出大小写不同的术语代表不同的东西,避免混淆。 最后,要总结两者的区别:一个是高级API,一个是底层库;一个用于方便地使用预训练模型,另一个用于灵活训练自定义分词器。同时,给出示例代码帮助用户理解如何在实际中使用这两个部分。</think>在自然语言处理(NLP)中,`tokenizer`和`tokenizers`的区别主要与具体库的实现和抽象层级相关。以下是分步说明: ### 1. **Tokenizer(分词器)** - **定义**:通用术语,指将文本分割为标记(token)的工具或组件。 - **功能**: - 文本预处理:如拆分单词、子词或字符 - 映射标记到ID(编码) - 支持反向操作(解码) - **在库中的表现**: - 在Hugging Face的`transformers`库中,`Tokenizer`是预训练模型配套的分词器类,例如: ```python from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") ``` - 提供高级API:`encode()`、`decode()`、`tokenize()`等[^4] ### 2. **Tokenizers(库名)** - **定义**:Hugging Face开发的高性能分词库(Rust实现),提供底层分词算法。 - **功能**: - 训练自定义分词模型(如BPE、WordPiece) - 支持多线程加速 - 提供细粒度控制(如添加特殊标记) - **使用场景**: ```python from tokenizers import Tokenizer, models, trainers tokenizer = Tokenizer(models.BPE()) trainer = trainers.BpeTrainer(special_tokens=["[UNK]"]) tokenizer.train(files=["text.txt"], trainer=trainer) ``` ### 3. **关键区别** | 特性 | `tokenizer`(类/组件) | `tokenizers`(库) | |---------------------|---------------------------------|---------------------------------| | **抽象层级** | 高级API(直接加载预训练模型) | 底层库(需自行训练或配置分词规则)| | **性能** | 依赖具体实现(如Python) | Rust实现,速度更快[^2] | | **灵活性** | 有限(面向预训练模型) | 高(支持自定义训练和规则) | ### 4. **实际应用示例** - **使用`transformers`的Tokenizer**: ```python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") tokens = tokenizer.encode("Hello world!", return_tensors="pt") ``` - **使用`tokenizers`库自定义**: ```python from tokenizers import CharBPETokenizer tokenizer = CharBPETokenizer() tokenizer.train(files=["data.txt"], vocab_size=5000) ``` ### 5. **关联与协作** - `tokenizers`库生成的模型可直接被`transformers`库加载: ```python from transformers import PreTrainedTokenizerFast fast_tokenizer = PreTrainedTokenizerFast(tokenizer_object=custom_tokenizer) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值