重新加载Hugging Face微调后的DistilBert模型后如何预测?
如何使用重新加载的DistilBertForSequenceClassification模型做文本分类预测
直接调用model.predict("sample sentence")行不通,因为DistilBert模型接收的是经过Tokenizer预处理后的张量输入,不是原始字符串。按以下步骤就能完成预测:
步骤1:加载训练时对应的Tokenizer
你微调模型用的是DistilBert,必须加载同版本的DistilBertTokenizer(或DistilBertTokenizerFast),和训练时保持一致:
from transformers import DistilBertTokenizerFast # 加载Tokenizer,和你训练时使用的基础Tokenizer一致即可 tokenizer = DistilBertTokenizerFast.from_pretrained("distilbert-base-uncased")
步骤2:预处理输入句子
把原始句子转换成模型能识别的张量格式,需包含特殊标记、padding/truncation处理:
sample_sentence = "这里是你的测试句子" inputs = tokenizer( sample_sentence, truncation=True, padding=True, return_tensors="pt" # 返回PyTorch格式的张量 )
步骤3:使用模型进行推理
先把模型切换到评估模式,再执行推理,最后解析输出得到预测标签:
import torch # 切换模型到评估模式,禁用训练时的dropout等层 reloadtrainer.eval() # 关闭梯度计算,节省资源 with torch.no_grad(): outputs = reloadtrainer(**inputs) # 获取模型输出的logits(未经过softmax的原始分数) logits = outputs.logits # 找到logits中最大值对应的索引,即为预测的标签ID predicted_label_id = torch.argmax(logits, dim=1).item() # 映射到原始标签文本(根据你训练时的标签列表修改) # 示例:假设训练时的标签是["正面", "负面", "中性"] label_map = ["正面", "负面", "中性"] predicted_label = label_map[predicted_label_id] print(f"预测标签ID: {predicted_label_id}") print(f"预测标签文本: {predicted_label}")
补充提示
- 如果训练时用了自定义标签映射,建议把标签列表保存成json文件和模型放在一起,加载模型时同步读取,避免标签对应错误。
- 你的变量名
reloadtrainer是模型对象,建议改成model更清晰,避免和HuggingFace的Trainer类混淆。
内容的提问来源于stack exchange,提问作者Robin311
相关产品推荐
相关产品推荐

