快速入门
介绍
adapters 为Model Overview中列出的所有Transformer模型的PyTorch实现添加了适配器功能。
为了使用适配器,模型类中新增了一些方法,例如创建(add_adapter())、加载(load_adapter())、
存储(save_adapter())和删除(delete_adapter())等。
下面我们将通过一些示例简要介绍这些方法的使用。
注意
本文档重点介绍由adapters添加的适配器相关功能。
如需了解transformers库更通用的概述,请访问
Hugging Face文档中的'使用'部分。
使用Adapters初始化模型
XAdapterModel 是用于训练和推理适配器的推荐模型:
from adapters import AutoAdapterModel
model = AutoAdapterModel.from_pretrained(model_name)
这负责内部处理与适配器相关功能的初始化,并为您提供已初始化的模型。XAdapterModel还支持为不同任务动态添加、加载和存储头部。
如果你想在Hugging Face模型中使用适配器,需要使用adapters库初始化模型。这将初始化在transformers模型中添加、加载和存储适配器的功能。
import adapters
adapters.init(model)
使用预训练适配器进行推理
以下示例展示了如何使用带有适配器的基本预训练Transformer模型。我们的目标是预测给定句子的情感倾向。
在本示例中我们使用BERT模型,因此首先加载一个预训练的BertTokenizer来编码输入句子,并通过BertAdapterModel类从Hugging Face的模型中心加载预训练的bert-base-uncased检查点:
import os
import torch
from transformers import BertTokenizer
from adapters import BertAdapterModel
# Load pre-trained BERT tokenizer from Hugging Face
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# An input sentence
sentence = "It's also, clearly, great fun."
# Tokenize the input sentence and create a PyTorch input tensor
input_data = tokenizer(sentence, return_tensors="pt")
# Load pre-trained BERT model from Hugging Face Hub
# The `BertAdapterModel` class is specifically designed for working with adapters
# It can be used with different prediction heads
model = BertAdapterModel.from_pretrained('bert-base-uncased')
加载模型后,我们现在从AdapterHub添加一个对我们任务有用的预训练任务适配器。 在本例中,对于情感分类,我们因此使用在SST-2数据集上训练的适配器。 与适配器一起加载的任务预测头为我们的句子提供了一个类别标签:
# Load pre-trained task adapter from Adapter Hub
# This method call will also load a pre-trained classification head for the adapter task
adapter_name = model.load_adapter("sentiment/sst-2@ukp", config='pfeiffer')
# Activate the adapter we just loaded, so that it is used in every forward pass
model.set_active_adapters(adapter_name)
# Predict output tensor
outputs = model(**input_data)
# Retrieve the predicted class label
predicted = torch.argmax(outputs[0]).item()
assert predicted == 1
要保存我们预训练的模型和适配器,可以按照以下方式轻松存储和重新加载它们:
# For the sake of this demonstration an example path for loading and storing is given below
example_path = os.path.join(os.getcwd(), "adapter-quickstart")
# Save model
model.save_pretrained(example_path)
# Save adapter
model.save_adapter(example_path, adapter_name)
# Load model, similar to Hugging Face's AutoModel class,
# you can also use AutoAdapterModel instead of BertAdapterModel
model = AutoAdapterModel.from_pretrained(example_path)
model.load_adapter(example_path)
与完整模型权重的保存方式类似,save_adapter()会在指定目录中创建一个用于保存适配器权重的文件和一个用于保存适配器配置的文件。
最后,如果我们完成了对适配器的操作,可以通过停用并删除适配器将基础Transformer恢复到原始状态:
# Deactivate all adapters
model.set_active_adapters(None)
# Delete the added adapter
model.delete_adapter(adapter_name)