# Hate Speech Offensive Language Eval

> 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.

- Skill: `qhjqhj00/hate-speech-offensive-language-eval` (Agent Skill)
- Install (CLI): `npx skillmds add qhjqhj00/hate-speech-offensive-language-eval`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qhjqhj00/hate-speech-offensive-language-eval/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: qhjqhj00 (https://skillmd.com/u/qhjqhj00)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/qhjqhj00/hate-speech-offensive-language-eval

---


# 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

