python transformers库笔记(BertTokenizerFast类)
BertTokenizerFast类
1、特点
速度快:底层使用Rust实现,比纯python的BertTokenizer快得多(尤其是批量处理的时候),且支持多线程使用。
功能一致:与BertTokenizer的API完全兼容,可以直接替换使用。支持所有的BERT变体。
额外功能:提供更丰富的后处理选项(如截断、填充的精细控制)。支持直接返回token_type_ids、attention_mask等张量。
2、基本用法
from transformers import BertTokenizerFast# 初始化分词器,以chinese-bert-wwm模型为例
tokenizer = BertTokenizerFast.from_pretrained('chinese-bert-wwm')# 单条文本分词
text = ‘你好,明天!’
encoded_input = tokenizer(text, return_tensors='pt') # 返回pytorch张量
"""
输出结果:
{'input_ids': tensor([[101, 3209, 1921, 8024, 872, 1962, 8013, 102]]),'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0]]),'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1]])
}
"""
# 批量文本分词
texts = ['明天,你好!', '你好,明天!']
batch_encoded = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')
"""
输出结果:
{'input_ids': tensor([[101, 3209, 1921, 8024, 872, 1962, 8013, 102], [101, 872, 1962, 8024, 3209, 1921, 8013, 102]]),'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]),'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1]])
}
"""
3、关键参数
参数名 | 作用 |
---|---|
padding=True | 自动填充到批次中最长序列长度 |
trunction=True | 自动截断到模型最大长度(512) |
return_tensors='pt' | 返回pytorch张量(可选"tf"为TensorFlow或"np"为numpy) |
max_length=128 | 显式指定最大长度 |
add_special_tokens | 是否添加[cls]和[sep],默认为True |
return_offsets_mapping | 返回每个token在原始文本中的字符集起始和结束位置 |
skip_special_tokens | 在解码(将Token ID转回文本)时跳过特殊token(如[CLS]、[SEP]、[PAD]等),默认值为False,设为True后输出更干净的文本 |
4、自定义tokens
tokenizer.add_tokens(['亚马逊', '速卖通']) # 添加新的token
model.resize_token_embeddings(len(tokenizer)) # 调整模型嵌入层
5、偏移量映射(用于命名实体识别任务)
encoded_input = tokenizer(text, return_offsets_mapping=True)
print(encoded_input["offset_mapping"]) # 输出每个token在原文中的位置
6、快速解码
decoded_text = tokenizer.decode(encoded_input["input_ids"][0], skip_special_tokens=True)