加载和使用预训练模型
·
一、什么是预训练模型?
预训练模型是指在海量数据上提前训练好的模型,可以直接用于下游任务,如情感分类、问答、文本生成等,节省训练时间,提升精度。
典型模型包括:
- BERT:适合分类、问答、抽取任务
- GPT:适合文本生成、对话
- RoBERTa、DistilBERT、T5、XLNet、ERNIE 等
二、安装 Hugging Face Transformers 库
在命令行中输入:.
pip install transformers
还可搭配:
pip install torch
三、加载预训练模型与分词器
下面以 bert-base-uncased 为例:
1. 加载 Tokenizer(分词器)
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
2. 加载预训练模型(无下游任务头)
from transformers import BertModel
model = BertModel.from_pretrained('bert-base-uncased')
这时模型已准备好,可用于提取语义特征。
四、输入编码与输出获取
import torch
text = "Transformers are powerful models."
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
print(outputs.last_hidden_state.shape) # [batch_size, seq_len, hidden_dim]
其中:
- inputs: 包含 input_ids、attention_mask
- outputs.last_hidden_state: 每个 token 的语义向量
五、使用 BERT 做分类(有下游任务头)
from transformers import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
inputs = tokenizer("I love AI.", return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
predicted = torch.argmax(logits, dim=1)
print("预测标签:", predicted.item())
此模型在预训练 BERT 上加了一个线性分类层,可直接 fine-tune 用于二分类任务。
六、加载中文预训练模型
以哈工大 BERT 为例:
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertModel.from_pretrained('bert-base-chinese')
inputs = tokenizer("今天天气不错。", return_tensors="pt")
outputs = model(**inputs)
七、如何微调(finetune)
在自有数据集上进行训练,需要使用 Trainer 或 Trainer + Dataset 结构:
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(output_dir="./results", num_train_epochs=3)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset
)
trainer.train()
train_dataset 与 eval_dataset 可用 datasets 库加载如 GLUE、SST-2、MNLI 等,也可自定义。
八、文本生成模型的加载与使用(以 GPT2 为例)
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
input_ids = tokenizer("Once upon a time", return_tensors="pt").input_ids
outputs = model.generate(input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
九、结语
通过预训练模型 + Transformers 工具库,即使没有强大的计算资源,也可以利用大模型完成高质量的 NLP 任务。
更多推荐
所有评论(0)