Evaluates a model's ability to distinguish between hate speech, offensive language, and neutral text in social media posts. It probes the classifier's sensitivity to contextual nuances, reclaimed slurs, and demographic-specific biases in labeling. Use when the user wants to benchmark on Hate Speech and Offensive Language Dataset, or asks about evaluating this task. Reports F1 score.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add qhjqhj00/research-skills-pool --skill hate-speech-offensive-language-eval --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Hate Speech Offensive Language Eval?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/qhjqhj00-hate-speech-offensive-language-eval)More formats (shields.io, HTML) on the badges page.
---
name: hate-speech-offensive-language-eval
description: Evaluates a model's ability to distinguish between hate speech, offensive language, and neutral text in social media posts. It probes the classifier's sensitivity to contextual nuances, reclaimed slurs, and demographic-specific biases in labeling. Use when the user wants to benchmark on Hate Speech and Offensive Language Dataset, or asks about evaluating this task. Reports F1 score.
metadata:
skill_kind: dataset_eval
source_arxiv: 1703.04009
bibtex_key: davidson2017automated
confidence: high
---
# hate-speech-offensive-language-eval
> Automated Hate Speech Detection and the Problem of Offensive Language — Davidson et al. (2017) (arXiv:1703.04009, 2017)
## What this evaluates
Evaluates a model's ability to distinguish between hate speech, offensive language, and neutral text in social media posts. It probes the classifier's sensitivity to contextual nuances, reclaimed slurs, and demographic-specific biases in labeling.
## Datasets
- **Hate Speech and Offensive Language Dataset** — total ?; splits: test (-1); repo https://github.com/t-davidson/hate-speech-and-offensive-language
## Metrics
- `F1 score` **(primary)** — range: [0, 1]
- Harmonic mean of precision and recall: 2 * (precision * recall) / (precision + recall). Reported as the overall macro-average across the three classes (hate speech, offensive language, neither).
- `precision` — range: [0, 1]
- Ratio of correctly predicted positive instances to the total predicted positives for each class.
- `recall` — range: [0, 1]
- Ratio of correctly predicted positive instances to the total actual positives for each class.
## Input / output format
**Input**: Raw tweet text (string).
**Output**: One of three discrete class labels: 'hate speech', 'offensive language', or 'neither'.
## Scoring recipe
```python
def compute_metrics(preds, golds):
from sklearn.metrics import precision_recall_fscore_support
prec, rec, f1, _ = precision_recall_fscore_support(golds, preds, average='macro')
return {'precision': prec, 'recall': rec, 'f1': f1}
```
## Common pitfalls
- Contextual ambiguity: reclaimed slurs (e.g., 'n*gga') or positive uses of stigmatized terms (e.g., 'gay', 'queer') are often misclassified as hate speech due to lexical bias.
- Sexist language is frequently labeled as 'offensive' rather than 'hate speech' by human coders, creating a systematic class imbalance and evaluation bias.
- Amateur crowd-sourced labels are noisy; coders often skim tweets, leading to mislabeling of borderline or context-dependent cases.
## Evidence (verbatim from paper)
> The best performing model has an overall precision 0.91, recall of 0.90, and F1 score of 0.90. Looking at Figure 1, however, we see that almost 40% of hate speech is misclassified: the precision and recall scores for the hate class are 0.44 and 0.61 respectively.
## Citation
```bibtex
@misc{davidson2017automated,
title={Automated Hate Speech Detection and the Problem of Offensive Language},
author={Davidson et al. (2017)},
year={2017},
note={arXiv:1703.04009}
}
```
- arXiv: 1703.04009
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!