Downloads · 30 days
193
66% of all-time downloads
incivility-UOH/multidim-incivility-detector
multidim-incivility-detector is a machine learning model from incivility-UOH. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for transformers.
This model, developed for detecting multidimensional political incivility on Twitter, is a result of a study involving the analysis and classification of political texts. It focuses on identifying impoliteness and int…
Downloads · 30 days
193
66% of all-time downloads
All-time downloads
292
Public
Parameters
125M
2 GB on disk
Likes
0
Public
Click a slice to open those files.
.pt499 MB · 33%
From the Hugging Face model README
This model, developed for detecting multidimensional political incivility on Twitter, is a result of a study involving the analysis and classification of political texts. It focuses on identifying impoliteness and intolerance in political discourse, considering these as orthogonal dimensions.
The model uses a dataset of 13.1K labeled tweets, with 42.3% marked as uncivil, including subcategories of impoliteness and intolerance. It was fine-tuned using the roberta-base model, leveraging its capabilities to enhance the detection of political incivility with greater accuracy and nuanced understanding of the context in political discourse.
import torch
from torch import nn
from transformers import PreTrainedModel, RobertaModel, RobertaConfig, AutoTokenizer
class IncivilityModule(PreTrainedModel):
config_class = RobertaConfig
def __init__(self, config, num_labels=2):
super().__init__(config)
self.roberta = RobertaModel(config)
self.classifier = nn.Linear(config.hidden_size, num_labels)
def forward(self, input_ids, attention_mask=None):
outputs = self.roberta(input_ids, attention_mask=attention_mask)
return torch.sigmoid(self.classifier(outputs.pooler_output))
# Load from Hugging Face Hub
tokenizer = AutoTokenizer.from_pretrained("incivility-UOH/multidim-incivility-detector")
model = IncivilityModule.from_pretrained("incivility-UOH/multidim-incivility-detector")
class IncivilityPipeline:
def __init__(self, model, tokenizer, device=None):
self.model = model.to(device if device is not None else torch.device("cuda" if torch.cuda.is_available() else "cpu")).eval()
self.tokenizer = tokenizer
self.thresholds = {"Impoliteness": 0.732, "Intolerance": 0.495}
def __call__(self, tweet):
# Tokenization and Model Inference
inputs = self.tokenizer(tweet, return_tensors="pt", padding="max_length", truncation=True, max_length=128)
with torch.no_grad():
prediction = self.model(**{k: v.to(self.model.device) for k, v in inputs.items()})
prediction = torch.round(prediction, decimals=4).squeeze()
results = {}
for i, (label, threshold) in enumerate(self.thresholds.items()):
score = round(prediction[i].item(), 3)
results[label] = {"score": score, "label": score > threshold}
return results
incivility_pipeline = IncivilityPipeline(model, tokenizer)
result = incivility_pipeline("You are such a loser! You'll regret everything you've done to me!")
print("Pipeline Result:", result)
>>> Pipeline Result: {'Impoliteness': {'score': 0.979, 'label': True}, 'Intolerance': {'score': 0.088, 'label': False}}
Please cite the paper "Multidimensional Political Incivility on Twitter: Detection and Findings" if you find it helpful.
@misc{incivility2023,
title={Detecting Multidimensional Political Incivility on Social Media},
author={Sagi Pendzel and Nir Lotan and Alon Zoizner and Einat Minkov},
year={2023},
eprint={2305.14964},
archivePrefix={arXiv},
primaryClass={cs.CL}
}