以前做文本分类要自己搭模型、调词向量,现在用 Hugging Face 的 Transformers 库,加载一个预训练模型微调几下就能达到很好的效果。这篇教程带你从”零代码体验”到”完整微调”,跑通一个情感分类任务。

两种使用方式

Transformers 提供两个层次的用法:

先用 pipeline 快速见效,再学完整微调。

前置准备

pip install transformers datasets evaluate accelerate

步骤一:用 pipeline 零代码体验

不训练,直接调用现成的情感分析模型:

from transformers import pipeline

clf = pipeline("sentiment-analysis")
print(clf("I love this movie!"))
# [{'label': 'POSITIVE', 'score': 0.9998}]

一行代码就能分类,适合快速验证想法。中文任务可指定中文模型:

clf = pipeline("sentiment-analysis",
model="uer/roberta-base-finetuned-chinanews-chinese")

步骤二:加载数据集

用 datasets 库加载情感分类数据集:

from datasets import load_dataset

dataset = load_dataset("glue", "sst2") # 电影评论情感二分类
print(dataset["train"][0])
# {'sentence': '...', 'label': 1}

也可以换成自己的 CSV / JSON 数据。

步骤三:加载分词器和模型

from transformers import AutoTokenizer, AutoModelForSequenceClassification

model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(
model_name, num_labels=2)

num_labels=2 对应二分类,多分类改成对应的类别数。

步骤四:预处理(分词)

文本要转成模型能读的 token id:

def tokenize(batch):
return tokenizer(batch["sentence"], truncation=True, max_length=128)

dataset = dataset.map(tokenize, batched=True)

步骤五:用 Trainer 训练

Transformers 的 Trainer 封装了整个训练循环:

from transformers import TrainingArguments, Trainer

args = TrainingArguments(
output_dir="./out",
per_device_train_batch_size=16,
num_train_epochs=2,
learning_rate=2e-5,
eval_strategy="epoch",
)
trainer = Trainer(model=model, args=args,
train_dataset=dataset["train"],
eval_dataset=dataset["validation"])
trainer.train()

步骤六:评估与保存

print(trainer.evaluate())          # 输出 loss、accuracy 等指标
trainer.save_model("./sst2-model") # 保存微调后的模型

步骤七:用自己的模型推理

from transformers import pipeline

my_clf = pipeline("sentiment-analysis", model="./sst2-model")
print(my_clf("This film is fantastic"))

完整微调流程

常见问题

  • 模型下载慢:设置国内镜像 HF_ENDPOINT 环境变量
  • 显存不足:减小 batch_size,或选更小的模型(如 distilbert)
  • 中文效果差:换成中文预训练模型(bert-base-chinese 等)
  • token 超长被截断:调大 max_length,同时注意显存

小结

Transformers 库把 NLP 的门槛降到了极低:pipeline 让你零训练就能用,Trainer 让你几行代码完成微调。掌握”加载数据→分词→微调→评估→推理”这条主线,你就能把预训练模型的强大能力,快速迁移到自己的文本分类任务上。