一、什么是预训练模型?

预训练模型是指在海量数据上提前训练好的模型,可以直接用于下游任务,如情感分类、问答、文本生成等,节省训练时间,提升精度。
典型模型包括:

  • 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 任务。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐