RobBERTje荷兰语情感分析缺失中性标签,如何获取该标签?
如何让RobBERTje荷兰语情感分析模型输出中性标签?
问题背景
使用DTAI-KULeuven/robbert-v2-dutch-sentiment模型进行荷兰语情感分析时,发现模型仅输出Positive(正面)和Negative(负面)两种标签,完全缺失Neutral(中性)分类。测试无意义文本(如Fhdf)和典型中性语句(如Als gisteren inclusief blauw)时,均被错误归类为正面或负面。
测试代码及输出如下:
from transformers import RobertaTokenizer, RobertaForSequenceClassification from transformers import pipeline import torch model_name = "DTAI-KULeuven/robbert-v2-dutch-sentiment" model = RobertaForSequenceClassification.from_pretrained(model_name) tokenizer = RobertaTokenizer.from_pretrained(model_name) classifier = pipeline('sentiment-analysis', model=model, tokenizer = tokenizer) result1 = classifier('Fhdf') result2 = classifier('Als gisteren inclusief blauw') print(result1) print(result2)
输出:
[{'label': 'Positive', 'score': 0.7520257234573364}] [{'label': 'Negative', 'score': 0.7538396120071411}]
解决方案
首先明确:DTAI-KULeuven/robbert-v2-dutch-sentiment是原生二分类模型,仅针对正/负情感训练,因此本身不支持中性标签。要实现中性分类,可采用以下三种方案:
1. 改用三分类RobBERT变体
优先查找官方或社区发布的、针对荷兰语情感分析训练的三分类(正/负/中性)RobBERT模型。如果存在这类模型,直接替换代码中的model_name即可,无需额外修改逻辑。
2. 基于二分类输出的阈值判定
如果没有合适的三分类模型,可以通过判断模型输出的置信度阈值,推断中性类别:
- 直接获取模型的原始概率输出,若正/负两类的最高置信度低于设定阈值,则判定为中性。
- 示例代码:
from transformers import RobertaTokenizer, RobertaForSequenceClassification import torch model_name = "DTAI-KULeuven/robbert-v2-dutch-sentiment" model = RobertaForSequenceClassification.from_pretrained(model_name) tokenizer = RobertaTokenizer.from_pretrained(model_name) def predict_sentiment(text): # 预处理文本 inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True) # 禁用梯度计算提升速度 with torch.no_grad(): outputs = model(**inputs) # 计算概率分布 probabilities = torch.softmax(outputs.logits, dim=1).tolist()[0] pos_prob, neg_prob = probabilities max_confidence = max(pos_prob, neg_prob) # 阈值判断(可根据实际样本调整) if max_confidence < 0.6: return {"label": "Neutral", "score": round(1 - max_confidence, 6)} elif pos_prob > neg_prob: return {"label": "Positive", "score": round(pos_prob, 6)} else: return {"label": "Negative", "score": round(neg_prob, 6)} # 测试示例 print(predict_sentiment('Fhdf')) print(predict_sentiment('Als gisteren inclusief blauw'))
- 注意:阈值需要根据你的实际数据集调整,建议用标注好的中性样本测试,找到最适合的临界值。
3. 微调模型添加中性类别
如果对准确性要求较高,可收集包含中性标签的荷兰语情感数据集,在现有二分类模型基础上进行微调,让模型学习识别中性类别。这种方案需要数据准备和训练资源,但能获得最贴合需求的效果。
内容的提问来源于stack exchange,提问作者pjercic
相关产品推荐
相关产品推荐

