python transformers库笔记(BertTokenizerFast类)

发布于:2025-06-15 ⋅ 阅读:(10) ⋅ 点赞:(0)

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)