TensorFlow版FinBert本地与HuggingFace界面预测结果不一致原因咨询
问题分析与解决方案
核心问题
你本地加载的模型缺少微调后的分类器权重,导致TFAutoModelForSequenceClassification自动新建了未训练的分类层,这就是警告和预测结果偏离的原因。托管API使用的是完成金融情感分类微调的完整模型,而你从仓库下载的是基础预训练Bert模型(无下游任务头)。
解决方案
方案1:直接加载完整微调模型(推荐)
无需手动下载文件,用代码直接拉取包含分类头的TensorFlow版本模型:
from transformers import TFAutoModelForSequenceClassification, AutoTokenizer import tensorflow as tf # 加载微调后的FinBert模型(TensorFlow版) model = TFAutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert", from_tf=True, num_labels=3) tokenizer = AutoTokenizer.from_pretrained("ProsusAI/finbert") sentences = ["Stocks rallied and the British pound gained."] inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors='tf') outputs = model(**inputs) # 计算softmax并映射标签(FinBert标签顺序:[negative, neutral, positive]) probs = tf.nn.softmax(outputs.logits).numpy()[0] label_map = {0: "negative", 1: "neutral", 2: "positive"} result = {label_map[i]: round(probs[i]*100, 1) for i in range(3)} print(result)
运行后会得到和托管API一致的结果(约89.8% positive)。
方案2:本地加载完整微调模型
如果必须本地部署,需确保下载完整的微调模型文件:
- 从模型仓库的
tf_model目录下载所有文件(包括saved_model.pb、变量文件夹等),而非仅根目录的预训练权重。 - 加载时指定本地路径:
model = TFAutoModelForSequenceClassification.from_pretrained("C:/Users/Downloads/modfin_tf", from_tf=True)
(路径需指向包含完整TensorFlow SavedModel的文件夹)
关于TFAutoModel的说明
TFAutoModel仅加载基础Bert模型的编码器部分,输出[batch_size, seq_len, hidden_size]的特征张量,没有分类头,无法直接得到情感类别。只有TFAutoModelForSequenceClassification会加载包含分类头的完整微调模型。
内容的提问来源于stack exchange,提问作者saiket talukdar
相关产品推荐
相关产品推荐

