HuggingFace课程笔记:深入理解Tokenizer与模型输入处理
course The Hugging Face course on Transformers 项目地址: https://gitcode.com/gh_mirrors/cou/course
在自然语言处理(NLP)任务中,将原始文本转换为模型可理解的输入格式是一个关键步骤。本文将系统性地介绍如何使用HuggingFace Transformers库中的Tokenizer工具高效完成这一过程。
Tokenizer的高阶功能
现代Transformer模型通常需要将文本转换为特定的数值表示形式。虽然我们可以手动完成分词、转换为ID、填充和截断等步骤,但HuggingFace的Tokenizer提供了更高级的封装方法。
from transformers import AutoTokenizer
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
sequence = "I've been waiting for a HuggingFace course my whole life."
model_inputs = tokenizer(sequence)
这段简单的代码实际上完成了多个处理步骤,返回的model_inputs
包含了模型所需的所有输入要素。
多序列处理与填充策略
Tokenizer不仅能处理单个序列,还能高效处理多个序列,并自动处理长度不一致的问题:
sequences = ["I've been waiting for a HuggingFace course my whole life.", "So have I!"]
model_inputs = tokenizer(sequences)
填充策略可以通过padding
参数灵活控制:
padding="longest"
:按批次中最长序列进行填充padding="max_length"
:按模型最大长度填充(如BERT为512)- 也可指定自定义最大长度:
padding="max_length", max_length=8
序列截断处理
对于过长的序列,Tokenizer提供了截断功能:
# 按模型最大长度截断
model_inputs = tokenizer(sequences, truncation=True)
# 按指定长度截断
model_inputs = tokenizer(sequences, max_length=8, truncation=True)
框架特定的张量输出
Tokenizer还能直接输出不同深度学习框架所需的张量格式:
# PyTorch张量
model_inputs = tokenizer(sequences, padding=True, return_tensors="pt")
# NumPy数组
model_inputs = tokenizer(sequences, padding=True, return_tensors="np")
特殊标记解析
观察Tokenizer的输出,会发现比手动处理多了一些特殊标记:
[101, 1045, 1005, 2310, 2042, 3403, 2005, 1037, 17662, 12172, 2607, 2026, 2878, 2166, 1012, 102]
这些额外的ID对应着特殊标记[CLS]
和[SEP]
,分别表示序列的开始和结束。不同模型可能使用不同的特殊标记方案,Tokenizer会自动处理这些差异。
完整流程示例
将Tokenizer与模型结合使用的完整示例如下:
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
sequences = ["I've been waiting for a HuggingFace course my whole life.", "So have I!"]
# 自动处理填充和截断
tokens = tokenizer(sequences, padding=True, truncation=True, return_tensors="pt")
output = model(**tokens)
通过这种方式,我们可以轻松地将原始文本转换为模型可直接处理的输入格式,大大简化了NLP任务的预处理流程。
course The Hugging Face course on Transformers 项目地址: https://gitcode.com/gh_mirrors/cou/course
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考