transformers库的使用!🐈
transformers库的使用
1、加载预训练模型
例如,加载一个预训练的BERT模型,并查看一些关键的参数信息,可以使用以下代码:
1 |
|
1.from transformers import BertModel
:这一行从Transformers库中导入BertModel
类。Transformers库是Hugging Face公司开发的一个用于处理自然语言处理(NLP)任务的库。BertModel
类是用于表示BERT模型的基本架构的类。
2.model = BertModel.from_pretrained("bert-base-uncased")
:这一行加载一个预训练的BERT模型。from_pretrained()
方法是一个类方法,它根据给定的预训练模型名称(在这里是”bert-base-uncased”)自动下载并加载相应的模型权重。”bert-base-uncased”是BERT模型的一个变体,它使用小写字母进行训练,具有较小的模型大小和计算复杂度。加载完成后,model
变量将包含一个可以用于各种NLP任务的预训练BERT模型。
3.print(model.config)
:这一行打印模型的配置信息。model.config
是一个包含模型配置(例如模型架构、隐藏层大小、注意力头数等)的对象。通过打印这些信息,你可以了解模型的详细配置。
2.Tokenizer的使用
在使用预训练模型处理文本之前,我们需要将文本转换为模型可以理解的格式。这就需要使用tokenizer对文本进行分词、编码等操作。transformers库为每种预训练模型提供了相应的tokenizer类,使用方法非常简单。
例如,使用BERT的tokenizer进行文本编码,可以使用以下代码:
1 |
|
tokenizer
是用于将文本数据转换为模型可接受的输入格式的工具。在 Hugging Face Transformers 库中,tokenizer
的参数通常有很多,下面是一些常用的参数及其作用:
- text:要编码的文本数据。
- return_tensors:指定返回的张量类型,通常为
'pt'
(PyTorch)或'tf'
(TensorFlow)。如果不指定,默认返回 Python 列表格式。 - padding:指定是否对输入序列进行填充,通常为
'max_length'
(填充到指定的最大长度)或'longest'
(填充到最长样本的长度)。如果不需要填充,可以设置为False
。 - truncation:指定是否对输入序列进行截断,通常为
'max_length'
(截断到指定的最大长度)或'only_first'
(仅截断第一个序列)等。如果不需要截断,可以设置为False
。 - max_length:指定输入序列的最大长度,超出该长度的序列将被截断或填充。
- return_attention_mask:指定是否返回注意力掩码(attention mask),用于标记输入序列中的填充部分。如果为
True
,则返回一个二进制张量,表示哪些位置是填充的,哪些是真实的输入。 - return_offsets_mapping:指定是否返回偏移映射(offsets mapping),用于将编码后的序列映射回原始文本中的字符位置。
- return_token_type_ids:指定是否返回令牌类型 ID,用于区分不同的句子。通常在处理句子对时使用,比如问答任务或文本对分类任务。
- add_special_tokens:指定是否添加特殊令牌(如
[CLS]
、[SEP]
)到输入序列中。
tips:
1 |
|
3.文本分类任务示例
1 |
|
with torch.no_grad():
:这是一个上下文管理器,它在其内部的代码块中禁用梯度计算。这在评估或推理阶段(而非训练阶段)使用模型时非常有用,因为它可以减少内存使用并提高计算速度。对模型的原始输出更感兴趣,而不是将其转换为概率分布。在这种情况下,我们可以直接使用 logits。此外,如果我们只关注模型对每个类别的相对置信度,而不需要概率值,也可以直接使用 logits。(logits是值的大小,没有进行归一化的概率计算,softmax进行了归一化的概率计算)
因此,在使用模型输出时,要根据具体任务和需求来决定是否进行 softmax 处理。如果需要概率分布或进行后续的概率计算(如交叉熵损失计算),则需要对 logits 进行 softmax 处理;如果只需要模型的原始输出或对置信度进行比较,则可以直接使用 logits。
outputs.logits = outputs[0]