☆ 问题描述

Tokenizer的学习笔记(Tokenizer is all you need)

Tokenizers are one of the core components of the NLP pipeline. They serve one purpose: to translate text into data that can be processed by the model. Models can only process numbers, so tokenizers need to convert our text inputs to numerical data. In this section, we’ll explore exactly what happens in the tokenization pipeline.

在这里插入图片描述

Tokenizer用于数据预处理
- 分词
- 构建词典
- 数据转换
- 数据填充与截断
现在Tokenizer可以做到上面的所有事情。

★ 解决方案

tokenizer的简单示例与参数解释

from transformers import BertTokenizer

# 初始化一个BERT分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 示例文本
text = "Transformers is a great tool for natural language processing."

# 对文本进行分词
tokens = tokenizer.tokenize(text)
print("Tokens:", tokens)

# 将分词后的文本转换为模型输入的索引表示
input_ids = tokenizer.encode(text, add_special_tokens=True)
print("Input IDs:", input_ids)

输出的结果示例

Tokens: ['transformers', 'is', 'a', 'great', 'tool', 'for', 'natural', 'language', 'processing', '.']
Input IDs: [101, 17662, 2003, 1037, 2307, 6994, 2005, 3019, 2653, 6361, 1012, 102]

tokens 变量包含了分词后的 token 列表。 input_ids 变量是将分词后的文本转换为模型输入的索引表示,其中 [101, … , 102] 是特殊的起始([CLS])和终止([SEP])标记,这些标记对于模型的输入非常重要。

Tokenizer参数

max_length:最大输入长度限制。
padding 和 truncation:填充和截断文本以保持一致的输入长度。
return_tensors:返回的张量类型(如'pt'表示PyTorch张量)。

Tokenizer的基本使用


# 导入Tokenizer
from transformers import AutoTokenizer

# 模型加载
# 从HuggingFace加载,输入模型名称,即可加载对于的分词器
tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")

# tokenizer 保存到本地
tokenizer.save_pretrained("./roberta_tokenizer")

# 从本地加载tokenizer
tokenizer = AutoTokenizer.from_pretrained("./roberta_tokenizer/")
tokenizer

# 句子分词
tokens = tokenizer.tokenize("这是一个句子")

# 查看字典
tokenizer.vocab

# 查看字典大小
tokenizer.vocab_size

# 将词序列转换为id序列
ids = tokenizer.convert_tokens_to_ids(tokens)

# 将id序列转换为token序列
tokens = tokenizer.convert_ids_to_tokens(ids)

# 将token序列转换为string
str_sen = tokenizer.convert_tokens_to_string(tokens)


# 将字符串转换为id序列,又称之为编码
ids = tokenizer.encode(sen, add_special_tokens=True)

# 将id序列转换为字符串,又称之为解码
str_sen = tokenizer.decode(ids, skip_special_tokens=False)

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

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

# 快速调用方式
inputs = tokenizer.encode_plus(sen, padding="max_length", max_length=15)
#或
inputs = tokenizer(sen, padding="max_length", max_length=15)

# batch数据
sens = ["弱小的我也有大梦想",
        "有梦想谁都了不起",
        "追逐梦想的心,比梦想本身,更可贵"]
res = tokenizer(sens)

# fast 和 slow Tokenizer
# fast
fast_tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
# slow
slow_tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese", use_fast=False)

FAQ

Q: 怎么查看tokenizer的编码体系

A: 如下

# load pre-trained tokenizer
tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-macbert-base")
print(tokenizer)

输出:

BertTokenizerFast(name_or_path='hfl/chinese-macbert-base', vocab_size=21128, model_max_length=1000000000000000019884624838656, is_fast=True, padding_side='right', truncation_side='right', special_tokens={'unk_token': '[UNK]', 'sep_token': '[SEP]', 'pad_token': '[PAD]', 'cls_token': '[CLS]', 'mask_token': '[MASK]'}, clean_up_tokenization_spaces=True),  added_tokens_decoder={
	0: AddedToken("[PAD]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	100: AddedToken("[UNK]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	101: AddedToken("[CLS]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	102: AddedToken("[SEP]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
	103: AddedToken("[MASK]", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐