【NLP251】BertTokenizer的全部API及使用案例
- 游戏开发
- 2025-09-07 06:03:02

BertTokenizer 是 Hugging Face 的 transformers 库中用于处理 BERT 模型输入的分词器类。它基于 WordPiece 分词算法,能够将文本分割成词汇单元(tokens),并将其转换为 BERT 模型可以理解的格式。BertTokenizer 是 BERT 模型的核心工具之一,广泛用于自然语言处理任务。 以下是关于 BertTokenizer 的详细介绍,包括其功能、使用方法和一些高级特性。 功能概述
BertTokenizer 的主要功能包括:
分词(Tokenization):将输入文本分割成词汇单元(tokens)。
编码(Encoding):将分词结果转换为 Token ID。
解码(Decoding):将 Token ID 转换回文本。
处理特殊标记:自动处理 [CLS]、[SEP]、[PAD] 等特殊标记。
生成模型输入:将文本转换为适合 BERT 模型的输入格式(包括 input_ids 和 attention_mask)。
1. 初始化 BertTokenizerBertTokenizer 可以通过以下两种方式初始化:
1.1 加载预训练模型的分词器:
from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained("bert-base-chinese") # 使用预训练模型from_pretrained 方法会自动下载并加载指定预训练模型的分词器配置和词汇表文件。
常见的预训练模型包括 bert-base-uncased、bert-base-cased、bert-base-chinese 等。
1.2 加载本地词汇表文件:
tokenizer = BertTokenizer.from_pretrained("path/to/vocab.txt") # 使用本地词汇表如果你有本地的词汇表文件(vocab.txt),可以直接加载。
2. 分词与编码 2.1 分词BertTokenizer 使用 WordPiece 分词算法,将输入文本分割成词汇单元。
text = "这是一个测试文本。" tokens = tokenizer.tokenize(text) print("分词结果:", tokens)分词结果示例
2.2 编码
将分词结果转换为 Token ID。
token_ids = tokenizer.convert_tokens_to_ids(tokens) # 将 Token 转换为 ID print("Token ID:", token_ids) # 输出: [101, 102, 103, ...]编码结果示例
2.3 解码将 Token ID 转换回文本。
decoded_text = tokenizer.decode(token_ids, skip_special_tokens=True) print("解码结果:", decoded_text) skip_special_tokens 参数如果设置为 True,解码时会忽略特殊标记(如 [CLS] 和 [SEP])。
如果设置为 False,解码结果会包含这些特殊标记。
解码结果示例
2.4 生成模型输入 inputs = tokenizer( text, max_length=60, # 指定最大长度 padding="max_length", # 填充到最大长度 truncation=True, # 截断超出部分 return_tensors="pt" # 返回 PyTorch 张量 ) print("Input IDs:", inputs["input_ids"]) # 输出: tensor([[101, 102, ...]]) print("Attention Mask:", inputs["attention_mask"]) # 输出: tensor([[1, 1, ...]]) 3. 参数解析
BertTokenizer 的 __call__ 方法支持多种参数,用于控制分词和编码的行为。
3.1 参数说明max_length:指定序列的最大长度。
padding:是否填充序列。可选值为 "max_length" 或 "longest"。
truncation:是否截断超出 max_length 的部分。
return_tensors:返回的数据类型。可选值为 "pt"(PyTorch 张量)、"tf"(TensorFlow 张量)或 "np"(NumPy 数组)。
4. 分词器与模型结合
预处理后的输入可以直接用于 BERT 模型的推理。
from transformers import BertModel # 加载预训练的 BERT 模型 model = BertModel.from_pretrained("bert-base-chinese") # 使用分词器生成的输入进行推理 outputs = model(**inputs) # 输出结果 print("Last Hidden State Shape:", outputs.last_hidden_state.shape) # 输出: torch.Size([1, 60, 768]) print("Pooler Output Shape:", outputs.pooler_output.shape) # 输出: torch.Size([1, 768])5. 完整代码示例
以下是一个完整的示例,展示如何使用 BertTokenizer 和 BertModel 进行文本处理和推理。
from transformers import BertTokenizer, BertModel # 初始化分词器和模型 tokenizer = BertTokenizer.from_pretrained("bert-base-chinese") model = BertModel.from_pretrained("bert-base-chinese") # 输入文本 text = "睡一觉醒睡不着咋搞的?" # 生成模型输入 inputs = tokenizer( text, max_length=60, padding="max_length", truncation=True, return_tensors="pt" ) # 模型推理 outputs = model(**inputs) # 输出结果 print("Input IDs:", inputs["input_ids"]) print("Attention Mask:", inputs["attention_mask"]) print("Last Hidden State Shape:", outputs.last_hidden_state.shape) print("Pooler Output Shape:", outputs.pooler_output.shape)6. 特殊标记的处理
BERT 分词器会自动处理特殊标记(如 [CLS] 和 [SEP]),但也可以手动添加。
# 手动添加特殊标记 tokens = ["[CLS]"] + tokenizer.tokenize(text) + ["[SEP]"] token_ids = tokenizer.convert_tokens_to_ids(tokens)7. 多文本处理
BertTokenizer 也支持批量处理多个文本。
texts = ["这是一个测试文本。", "另一个文本。"] inputs = tokenizer( texts, max_length=60, padding="max_length", truncation=True, return_tensors="pt" )8. 获取隐藏层和注意力权重
如果需要获取模型的中间层输出(如隐藏层或注意力权重),可以在模型初始化时设置相关参数。
model = BertModel.from_pretrained("bert-base-chinese", output_hidden_states=True, output_attentions=True) outputs = model(**inputs) print("Hidden States:", outputs.hidden_states) # 每一层的隐藏层输出 print("Attentions:", outputs.attentions) # 每一层的注意力权重9. 使用预训练的下游任务模型
如果使用的是针对特定任务(如分类或命名实体识别)的预训练模型,可以直接加载对应的模型。
from transformers import BertForTokenClassification # 加载预训练的命名实体识别模型 tokenizer = BertTokenizer.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english") model = BertForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")【NLP251】BertTokenizer的全部API及使用案例由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【NLP251】BertTokenizer的全部API及使用案例”