UdaniSJ's picture
Upload README.md with huggingface_hub
bd0aecc verified
|
Raw
History Blame Contribute Delete
2.85 kB
---
language:
- en
license: mit
tags:
- hate-speech-detection
- severity-prediction
- text-classification
- bert
- explainable-ai
datasets:
- Hate-speech-CNERG/hatexplain
metrics:
- accuracy
- f1
---
# Hate Speech Severity Predictor — BERT
## Model Description
This is a fine-tuned BERT model (bert-base-uncased) for hate speech severity prediction,
developed as part of an MSc research project at the University of Moratuwa, Sri Lanka.
The model predicts hate speech severity across three levels:
- Level 0 — Non-hate Speech
- Level 1 — Mild / Offensive
- Level 2 — Severe Hate Speech
It also produces a continuous severity score S in [0,1]:
S = 0.0 x P(Level 0) + 0.5 x P(Level 1) + 1.0 x P(Level 2)
## Model Details
- Developed by: J.A.U.S. Jayakody (239817M), University of Moratuwa
- Supervised by: Dr. Supunmali Ahangama
- Base model: bert-base-uncased
- Language: English
- License: MIT
## Dataset
Fine-tuned on HateXplain (Mathew et al., 2021):
- 20,148 posts from Twitter and Gab
- Stratified 70-15-15 train-validation-test split
## Training Details
- Epochs: 3 (best checkpoint: Epoch 2)
- Batch size: 16
- Learning rate: 2e-5
- Max sequence length: 128 tokens
- Class weighting: Balanced
- Hardware: Tesla T4 GPU
## Evaluation Results
| Metric | SVM | BERT |
|--------|-----|------|
| Accuracy | 0.629 | 0.684 |
| Macro F1 | 0.615 | 0.679 |
Severity Prediction Metrics:
- Spearman Correlation: 0.714
- Pearson Correlation: 0.720
- Mean Absolute Error: 0.212
- RMSE: 0.292
## How to Use
```python
from transformers import BertForSequenceClassification, BertTokenizer
import torch
import torch.nn.functional as F
import numpy as np
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('UdaniSJ/hate-speech-severity-bert')
model.eval()
def predict_severity(text):
inputs = tokenizer(text, return_tensors='pt',
truncation=True, max_length=128)
with torch.no_grad():
outputs = model(**inputs)
probs = F.softmax(outputs.logits, dim=1).numpy()[0]
score = 0.0*probs[0] + 0.5*probs[1] + 1.0*probs[2]
level = int(np.argmax(probs))
names = {0:'Non-hate', 1:'Mild', 2:'Severe'}
return {'level': names[level], 'score': round(float(score),3)}
print(predict_severity("I love all people regardless of background"))
```
## Live Demo
https://huggingface.co/spaces/UdaniSJ/hate-speech-severity-predictor
## Limitations
- Trained on English social media content only
- May exhibit lexical over-reliance on identity terms
- Context-aware adjustment partially mitigates reclaimed language misclassification
## References
- Mathew et al. (2021). HateXplain. AAAI 2021.
- Devlin et al. (2019). BERT. NAACL 2019.
- Ribeiro et al. (2016). LIME. KDD 2016.
- Lundberg and Lee (2017). SHAP. NeurIPS 2017.