模型
除了像之前使用 AutoModel
根据 checkpoint 自动加载模型以外,我们也可以直接使用模型对应的 Model
类,例如 BERT 对应的就是 BertModel。
模型加载的两种方式
方式 1:使用 AutoModel
类加载模型
-
特点:
AutoModel
是一个通用的加载器,可以根据给定的checkpoint
自动识别并加载对应的模型。- 优点是代码灵活,如果切换到其他模型(如 RoBERTa),只需要替换
checkpoint
名称,无需修改其他代码。
-
示例:
from transformers import AutoModel
model = AutoModel.from_pretrained("bert-base-cased")
方式 2:使用具体模型类加载
-
特点:
- 如果开发者已经确定要加载的模型类型(例如 BERT 或 RoBERTa),可以直接使用对应的模型类(如
BertModel
)。 - 比
AutoModel
稍微固定,代码可读性更高。
- 如果开发者已经确定要加载的模型类型(例如 BERT 或 RoBERTa),可以直接使用对应的模型类(如
-
适用场景:
- 当开发者对模型类型有明确要求时,使用具体模型类更直观。
-
示例:
from transformers import BertModel
model = BertModel.from_pretrained("bert-base-cased")
Hugging Face 的模型存储与加载机制
加载模型的 from_pretrained()
方法
from transformers import BertModel
model = BertModel.from_pretrained("./models/bert/")
-
功能:
from_pretrained()
方法会从指定路径(本地或远程)加载预训练模型的权重。- 默认路径:
~/.cache/huggingface/transformers/
- 如果本地路径不存在,库会从 Hugging Face 的 Model Hub 下载模型文件。
-
参数:
- 路径或
checkpoint
: 可以是 Hugging Face Model Hub 上的模型名称(如bert-base-cased
),也可以是本地路径。 - 其他参数: 可以指定是否只加载部分权重,或者是否跳过某些配置。
- 路径或
模型文件的组成
从 Hugging Face 的 Model Hub 下载模型时,会拉取以下关键文件:
文件名 | 作用 |
---|---|
config.json | 保存模型的配置信息,例如层数、隐藏层维度等。 |
pytorch_model.bin | 模型的权重文件(如果使用 PyTorch)。 |
vocab.txt 或 tokenizer.json | 分词器的词汇表或配置文件,定义模型如何处理输入文本。 |
tokenizer_config.json | 分词器的额外配置,例如特殊 token 的定义(如 [CLS] )。 |
加载本地模型的场景
-
为什么使用本地模型?
- 在没有网络的环境中,无法从 Hugging Face Hub 下载模型。
- 大规模模型文件需要本地存储以提高加载速度。
- 文件结构: 本地目录需要包含上述模型文件(如
config.json
、pytorch_model.bin
和vocab.txt
)。 -
示例:
from transformers import BertModel
model = BertModel.from_pretrained("./local_model_directory/")
环境变量:HF_HOME
- 默认情况下,模型会存储在路径:
~/.cache/huggingface/transformers/
。 - 如果需要自定义存储位置,可以设置环境变量
HF_HOME
:
export HF_HOME=/path/to/your/cache
总结
-
加载模型的方式:
- 通用加载器:
AutoModel
,适合需要灵活切换模型的场景。 - 具体模型类(如
BertModel
):适合确定模型类型的场景。
- 通用加载器:
-
模型存储和文件结构:
- 模型文件包括权重文件、配置文件、分词器文件等。
- 可以从 Hugging Face Hub 下载,也可以指定本地路径加载。
-
推荐实践:
- 如果需要更灵活的代码,使用
AutoModel
。 - 如果对模型类型有明确需求(如 BERT),使用具体模型类(如
BertModel
)。
- 如果需要更灵活的代码,使用
如何保存预训练模型
在 Hugging Face 的 Transformers 库中,模型保存和加载是常用的功能,通过保存模型可以将已经下载或微调好的模型本地化,以便后续使用。
保存模型的方式
代码示例:
from transformers import AutoModel
# 从 Hugging Face Hub 加载预训练模型
model = AutoModel.from_pretrained("bert-base-cased")
# 将模型保存到本地路径
model.save_pretrained("./models/bert-base-cased/")
保存后生成的文件
调用 save_pretrained()
方法后,会在指定路径下创建以下文件:
文件名 | 作用 |
---|---|
config.json | 保存模型的结构配置信息,例如 Transformer 的层数、隐藏层维度等。 |
pytorch_model.bin | 保存模型的权重(state dictionary),即模型的参数值。 |
- 文件重要性:
config.json
: 定义了模型的结构,例如 BERT 的层数和特征维度。如果没有这个文件,加载模型时无法知道如何初始化模型结构。pytorch_model.bin
: 存储了模型的训练参数(权重),是模型实际预测的核心。
加载保存的模型
保存模型后,可以使用 from_pretrained()
方法加载本地保存的模型:
代码示例
from transformers import AutoModel
# 从本地路径加载保存的模型
model = AutoModel.from_pretrained("./models/bert-base-cased/")
优点
- 使用本地路径加载模型时无需重新下载。
- 保存后的模型文件结构与 Hugging Face Hub 上的模型一致,因此兼容性良好。