bert模型加载、预训练、推理的教程
在这篇文章中,我将带你一步一步地了解如何使用 Hugging Face 的 transformers
库,下载并加载预训练模型,然后进行简单的推理任务。本文适合刚接触深度学习和自然语言处理(NLP)的初学者。我们将使用 BERT
作为示例,并通过详细的代码注释帮助你理解每一步。
一、完整代码
与下面代码对应的视频教程:bert代码解释
# 1. 导入所需库
from modelscope import snapshot_download
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch
# 2. 下载并加载预训练模型
model_dir = snapshot_download('tianshi/bert-base-chinese', cache_dir='./model')
# 3. 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained("./model/tianshi/bert-base-chinese")
model = AutoModelForMaskedLM.from_pretrained("./model/tianshi/bert-base-chinese")
# 4. 定义输入句子
sentence1 = '天气真好'
sentence2 = '我们去爬山'
# 5. 编码输入句子
inputs = tokenizer.encode_plus(sentence1, sentence2, max_length=16, truncation=True, pad_to_max_length=True)
# 6. 创建 PyTorch 张量
input_ids = torch.tensor(inputs['input_ids']).unsqueeze(0)
attention_mask = torch.tensor(inputs['attention_mask']).unsqueeze(0)
# 7. 模型推理
outputs = model(input_ids=input_ids, attention_mask=attention_mask)
# 8. 获取模型的最后隐藏状态
last_hidden_state = outputs.last_hidden_state
# 9. 打印最后隐藏状态
print(last_hidden_state)
# 10. 查看输出张量的形状
print(last_hidden_state.shape)
代码说明
- 模型加载与推理:从 ModelScope 下载预训练的 BERT 中文模型,并使用
AutoTokenizer
和AutoModelForMaskedLM
来进行分词和推理。 - 张量转换:将输入句子编码为 BERT 模型可接受的格式,并将其转换为 PyTorch 张量。
- 模型输出:执行推理,得到最后隐藏状态并输出它的形状。
这份完整的代码涵盖了如何加载、预训练、推理 BERT 模型的每一步。
二、代码详细解释
准备工作
首先,你需要确保已安装 transformers
库。你可以通过以下命令安装:
pip install transformers
接下来是代码的逐步解释。
1. 导入所需库
from modelscope import snapshot_download
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch
modelscope
是一个模型管理和部署平台,我们通过snapshot_download
函数从中下载预训练的 BERT 模型。transformers
是 Hugging Face 提供的库,里面有很多预训练模型。我们将使用AutoTokenizer
和AutoModelForMaskedLM
自动加载合适的分词器和模型。torch
是 PyTorch 框架,我们会用它来创建张量并进行数学运算。
2. 下载并加载预训练模型
model_dir = snapshot_download('tianshi/bert-base-chinese', cache_dir='./model')
- 这里使用
snapshot_download
函数从 ModelScope 平台下载名为tianshi/bert-base-chinese
的模型,并将其存储在本地目录./model
中。
3. 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained