【Hugging Face】transformers 库中的 BertTokenizer 常用方法和属性

Hugging Face transformers 库中的 BertTokenizer 常用方法和属性

BertTokenizerBERT 模型专用的分词器,用于 文本预处理、分词、转换为 token ID、解码 token IDBertTokenizer 主要基于 WordPiece 分词法,适用于 文本分类、问答、命名实体识别等 NLP 任务


1. BertTokenizer 的常见属性

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
属性作用示例
tokenizer.vocab_size词汇表大小30522
tokenizer.model_max_length最大序列长度512
tokenizer.pad_token[PAD] 填充标记'[PAD]'
tokenizer.cls_token[CLS] 句子起始标记'[CLS]'
tokenizer.sep_token[SEP] 句子分隔标记'[SEP]'
tokenizer.unk_token[UNK] 未知单词标记'[UNK]'
tokenizer.mask_token[MASK] 掩码标记'[MASK]'
tokenizer.special_tokens_map特殊标记映射{'cls_token': '[CLS]', 'sep_token': '[SEP]'}

2. BertTokenizer 的常用方法

方法作用
tokenizer.tokenize(text)将文本分词
tokenizer.encode(text, add_special_tokens=True)将文本编码为 token ID
tokenizer.encode_plus(text, return_tensors="pt")获取 input_ids、attention_mask
tokenizer.batch_encode_plus(texts, padding=True, truncation=True)批量编码文本
tokenizer.decode(ids, skip_special_tokens=True)将 token ID 解码回文本
tokenizer.convert_tokens_to_ids(tokens)将 token 转换为 ID
tokenizer.convert_ids_to_tokens(ids)将 ID 转换为 token

3. BertTokenizer 详细用法

3.1. 分词 (tokenize)

text = "Hugging Face is great!"
tokens = tokenizer.tokenize(text)
print(tokens)

输出

['hugging', 'face', 'is', 'great', '!']

3.2. 编码 (encode)

input_ids = tokenizer.encode(text, add_special_tokens=True)
print(input_ids)

输出

[101, 17662, 18781, 2003, 2307, 999, 102]
  • 101[CLS]
  • 102[SEP]

3.3. 获取完整输入 (encode_plus)

inputs = tokenizer.encode_plus(text, return_tensors="pt")
print(inputs)

输出

{
  "input_ids": [[101, 17662, 18781, 2003, 2307, 999, 102]],
  "attention_mask": [[1, 1, 1, 1, 1, 1, 1]]
}
  • input_ids:Token ID 序列
  • attention_mask:0 表示 PAD,1 表示有效 token

3.4. 批量编码 (batch_encode_plus)

sentences = ["Hugging Face is great!", "Transformers are amazing!"]
batch_inputs = tokenizer.batch_encode_plus(sentences, padding=True, truncation=True)
print(batch_inputs)

输出

{
  "input_ids": [[101, 17662, 18781, 2003, 2307, 999, 102],
                [101, 10938, 2024, 6429, 999, 102, 0]],
  "attention_mask": [[1, 1, 1, 1, 1, 1, 1],
                     [1, 1, 1, 1, 1, 1, 0]]
}
  • padding=True 自动填充到相同长度
  • truncation=True 截断超长文本

3.5. 解码 (decode)

decoded_text = tokenizer.decode(input_ids, skip_special_tokens=True)
print(decoded_text)

输出

Hugging Face is great!
  • skip_special_tokens=True 忽略 [CLS][SEP]

3.6. ID 和 Token 互转

tokens = tokenizer.tokenize(text)
token_ids = tokenizer.convert_tokens_to_ids(tokens)
reconstructed_tokens = tokenizer.convert_ids_to_tokens(token_ids)

print(tokens)  # ['hugging', 'face', 'is', 'great', '!']
print(token_ids)  # [17662, 18781, 2003, 2307, 999]
print(reconstructed_tokens)  # ['hugging', 'face', 'is', 'great', '!']

4. BertTokenizer 在 PyTorch DataLoader 中使用

from torch.utils.data import DataLoader
from transformers import DataCollatorWithPadding

# 数据
texts = ["Hugging Face is great!", "Transformers are amazing!"]
inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")

# DataLoader
data_collator = DataCollatorWithPadding(tokenizer)
data_loader = DataLoader(inputs, batch_size=2, collate_fn=data_collator)

batch = next(iter(data_loader))
print(batch)

5. BertTokenizerTrainer 训练时使用

from datasets import load_dataset

dataset = load_dataset("imdb")

def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length")

encoded_dataset = dataset.map(preprocess_function, batched=True)

6. BertTokenizer 的高级功能

6.1. 添加新的特殊 Token

new_tokens = ["[NEW_TOKEN]"]
tokenizer.add_tokens(new_tokens)

6.2. 训练自定义分词器

custom_tokenizer = tokenizer.train_new_from_iterator(["This is custom tokenizer."], 5000)

6.3. fast vs slow 分词器

Hugging Face 提供两种 BertTokenizer

类型速度适用情况
Fast Tokenizer (BertTokenizerFast)(基于 tokenizers Rust 实现)推荐
Slow Tokenizer (BertTokenizer)(Python 实现)仅用于调试

默认 AutoTokenizer.from_pretrained("bert-base-uncased") 会加载 Fast Tokenizer


7. 总结

BertTokenizer 是 BERT 专用分词器,基于 WordPiece,适用于 文本分类、翻译、摘要、问答等 NLP 任务

常见方法:

  • tokenizer.tokenize(text) → 分词
  • tokenizer.encode(text) → 转换为 ID
  • tokenizer.decode(ids) → 解码
  • tokenizer.batch_encode_plus(texts) → 批量编码
  • tokenizer.convert_tokens_to_ids(tokens) → Token 转 ID
  • tokenizer.convert_ids_to_tokens(ids) → ID 转 Token

如果你希望 加载预训练的 BERT 分词器,并在 NLP 任务中使用,推荐 BertTokenizer.from_pretrained("bert-base-uncased")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值