【Hugging Face】transformers 库中的 AutoTokenizer: 自动分词器加载器

Hugging Face Transformers 库中的 AutoTokenizer

AutoTokenizer 是 Hugging Face transformers 库中的一个 自动分词器(tokenizer)加载器,用于根据 预训练模型的名称 自动选择合适的分词器(Tokenizer)。它的主要作用是让用户无需手动指定模型对应的分词方式,而是通过模型名称自动加载相匹配的分词器。


1. 为什么使用 AutoTokenizer?

transformers 库中,每种模型都有自己的专用分词器。例如:

  • BertTokenizer 适用于 BERT
  • GPT2Tokenizer 适用于 GPT-2
  • T5Tokenizer 适用于 T5
  • BartTokenizer 适用于 BART

手动选择分词器可能会很繁琐,而 AutoTokenizer 可以根据模型名称 自动匹配 正确的分词器。例如:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

这里 AutoTokenizer 自动识别 bert-base-uncased 是一个 BERT 模型,并加载 BertTokenizer


2. Tokenizer 的作用

分词器的主要作用是:

  1. 将文本转换为模型可以理解的输入格式
  2. 将字符串转换为 token ID
  3. 处理特殊 token,例如 [CLS][SEP]
  4. 支持不同的分词算法,如 BPE、WordPiece、Unigram

例如:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

text = "Hugging Face is amazing!"
tokens = tokenizer(text)

print(tokens)

输出:

{'input_ids': [101, 17662, 2227, 2003, 12476, 999, 102], 
 'token_type_ids': [0, 0, 0, 0, 0, 0, 0], 
 'attention_mask': [1, 1, 1, 1, 1, 1, 1]}

这里:

  • input_ids 是文本的 token ID
  • token_type_ids 用于区分不同句子
  • attention_mask 指示哪些 token 需要被模型关注

3. AutoTokenizer 的基本用法

3.1. 加载预训练分词器

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

它会自动下载 bert-base-uncased 对应的分词器。


3.2. 分词(Tokenization)

使用 tokenizer.encode()tokenizer() 进行文本分词:

text = "Hugging Face is amazing!"

tokens = tokenizer(text)
print(tokens)

输出:

{'input_ids': [101, 17662, 2227, 2003, 12476, 999, 102], 
 'attention_mask': [1, 1, 1, 1, 1, 1, 1]}

3.3. 处理批量文本

如果要一次性处理多个文本,可以传入列表:

texts = ["Hugging Face is amazing!", "Transformers are powerful."]
tokens = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")

print(tokens)

这里:

  • padding=True 会在较短的句子后面补零,使其与最长的句子对齐
  • truncation=True 会截断超长的文本
  • return_tensors="pt" 会返回 PyTorch 格式的张量

3.4. 将 Token ID 转换回文本

可以使用 decode() 将 token ID 还原为原始文本:

input_ids = tokens["input_ids"][0].tolist()
decoded_text = tokenizer.decode(input_ids)
print(decoded_text)

输出:

[CLS] Hugging Face is amazing! [SEP]

4. Tokenization 的不同方式

不同模型使用不同的分词方法:

  1. BERT 使用 WordPiece

    tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
    print(tokenizer.tokenize("Hugging Face is amazing!"))
    

    输出:

    ['hugging', 'face', 'is', 'amazing', '!']
    
  2. GPT-2 使用 Byte Pair Encoding(BPE)

    tokenizer = AutoTokenizer.from_pretrained("gpt2")
    print(tokenizer.tokenize("Hugging Face is amazing!"))
    

    输出:

    ['Hugging', 'ĠFace', 'Ġis', 'Ġamazing', '!']
    

    注意 Ġ 表示空格

  3. T5 和 BART 使用 SentencePiece

    tokenizer = AutoTokenizer.from_pretrained("facebook/bart-large")
    print(tokenizer.tokenize("Hugging Face is amazing!"))
    

    输出:

    ['Hugging', 'ĠFace', 'Ġis', 'Ġamazing', '!']
    

5. 处理特殊 Token

5.1. 查看特殊 Token

print(tokenizer.cls_token)   # [CLS]
print(tokenizer.sep_token)   # [SEP]
print(tokenizer.pad_token)   # [PAD]
print(tokenizer.unk_token)   # [UNK]

5.2. 自定义特殊 Token

如果你的任务需要额外的特殊 Token,可以这样做:

tokenizer.add_special_tokens({"additional_special_tokens": ["[NEW_TOKEN]"]})

6. 训练自己的分词器

如果你的数据集没有合适的分词器,可以使用 tokenizers 训练自己的:

from tokenizers import ByteLevelBPETokenizer

tokenizer = ByteLevelBPETokenizer()
tokenizer.train(files=["my_dataset.txt"], vocab_size=5000)
tokenizer.save_model("tokenizer_model")

然后可以用 AutoTokenizer 加载:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("tokenizer_model")

7. 总结

  1. AutoTokenizertransformers 提供的自动分词器加载器,可以根据模型名称自动匹配适用的 Tokenizer。
  2. Tokenizer 主要作用:
    • 将文本转换为 Token ID
    • 处理特殊 Token
    • 适配不同模型的分词方式
  3. 适用于不同模型的 Tokenizer 方式:
    • BERT 使用 WordPiece
    • GPT-2 使用 Byte Pair Encoding(BPE)
    • T5 和 BART 使用 SentencePiece
  4. 可以使用 encode() 进行分词,使用 decode() 还原文本。
  5. 支持批量处理、特殊 Token 定义,并可以训练自定义分词器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

彬彬侠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值