当我运行荷兰情绪分析 RobBERTje 时,它仅输出正/负标签,数据中缺少中性标签。
https://huggingface.co/DTAI-KULeuven/robbert-v2-dutch-sentiment
有明显的中性句子/单词,例如“Fhdf”(废话)和“Als gisteren inclusief blauw”(中性),但它们都评估为正面或负面。
有没有办法在 RobBERTje 中为此类示例获得中性标签?
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}]
该模型仅在
negative
和 positive
标签上进行训练。因此,它会尝试将每个输入分类为正面或负面,即使它是无意义的或中性的。
你能做的是: 1- 查找经过训练以包含
neutral
标签的其他模型。
2- 在包含 neutral
标签的数据集上微调此模型。
3- 根据置信度输出经验性地定义阈值并将其解释为 neutral
。
前两个选择需要大量的努力。我建议您使用第三个选项来快速解决问题。尝试向模型提供一些中性输入,并观察输出中置信度得分的范围。然后使用该阈值分类为
neutral
。
这是一个示例:
def classify_with_neutral(text, threshold=0.5):
result = classifier(text)[0] # Get the classification result
if result['score'] < threshold:
result['label'] = 'Neutral' # Override label to 'Neutral'
return result