Author: Leah Weldon Supervisor: Eoin Delaney
This repository contains the code, experiment configurations, and evaluation artifacts for the MSc dissertation:
“Fairness and Robustness in Risk Detection Models.”
The project evaluates fairness and robustness in automated toxicity and risk-detection systems across multiple datasets and adversarial evaluation settings. The analysis covers counterfactual fairness testing, adversarial robustness under meaning-preserving reformulation, calibration, distribution shift, and mitigation-oriented threshold and decision-policy analyses. The central aim is to characterise the conditions under which current classifiers fail systematically, by demographic group, attack type, or deployment context, and to assess the scope for targeted mitigation.
The dissertation addresses two formal research questions:
RQ1: Group Fairness in Risk Detection To what extent do current toxicity and risk detection classifiers exhibit systematic group-level disparities in prediction behaviour, and how do these disparities vary across target groups, models, and evaluation paradigms?
Sub-questions:
RQ2: Robustness to Adversarial and Meaning-Preserving Reformulation How robust are current toxicity and risk detection classifiers to meaning-preserving reformulation of harmful content, and does adversarial vulnerability vary systematically across target groups and attack strategies?
Sub-questions:
Full research question documentation: docs/project/research_questions.md
configs/experiments/ YAML experiment configurations
src/ Core pipeline implementation
src/data/ Dataset loaders, generators, tagging, and transforms
src/models/ Hugging Face model wrappers and prediction utilities
src/eval/ Evaluation and post-processing scripts
src/viz/ Plotting and visualisation scripts
docs/ Dissertation-facing documentation
docs/datasets/ Dataset cards
docs/models/ Model cards
docs/experiments/ Experiment cards
docs/evaluation/ Evaluation methodology documentation
docs/analysis/ Generated analysis outputs and summaries
docs/project/ Research questions, scope, and contributions
docs/paper_notes/ Per-paper reading notes (one file per bib entry)
results/ Timestamped experiment run directories
data/ Local/generated datasets (not fully versioned)
bib/ Bibliography files
jobs/ HPC / job submission scripts
scripts/ Utility scripts (setup, documentation, diagnostics)
Key documentation entry points:
docs/datasets/README.mddocs/models/README.mddocs/experiments/README.mddocs/evaluation/README.mddocs/experiment_overview.mddocs/reproducibility.mdThe main comparative evaluation uses the following core baselines:
| Model | Hugging Face ID |
|---|---|
| Granite Guardian HAP-38M | ibm-granite/granite-guardian-hap-38m |
| RoBERTa Toxicity Classifier | s-nlp/roberta_toxicity_classifier |
| Detoxify Unbiased Toxic RoBERTa | unitary/unbiased-toxic-roberta |
| Unitary Toxic-BERT | unitary/toxic-bert |
Additional dataset-specific evaluation includes:
| Model | Purpose |
|---|---|
| HateXplain BERT 3-Class | native multiclass evaluation on HateXplain |
Model documentation:
The dissertation evaluates models across several benchmark datasets:
| Dataset | Main role in the project |
|---|---|
| CivilComments | large-scale toxicity benchmarking |
| CivilComments-WILDS | distribution shift and subgroup evaluation |
| HateCheck | functional diagnostic testing |
| HateXplain | group-directed hate and offensiveness |
| ToxiGen | synthetic implicit-toxicity stress testing |
| RealToxicityPrompts | distribution-shift robustness and prompt toxicity evaluation |
Dataset documentation:
In addition to external datasets, the repository includes internally generated evaluation benchmarks designed to isolate specific failure modes.
These include:
| Benchmark family | Main purpose |
|---|---|
| Jailbreak benchmark | contextual framing attacks (quotation, roleplay, research wrapper, etc.) |
| Identity swap tests | counterfactual fairness evaluation |
| Intersectional swap tests | multi-identity fairness analysis |
| Leetspeak attacks | character-level obfuscation robustness |
| Target masking | identity-token dependence |
| Multi-attack benchmark | compositional adversarial robustness |
| Semantic attack benchmark | meaning-preserving adversarial rewriting |
| Over-refusal benchmark | false positive rate on benign identity-sensitive prompts |
Synthetic benchmark documentation:
The dissertation evaluates models across several linked dimensions:
| Dimension | Evaluation methods |
|---|---|
| Fairness | identity swap tests, intersectional swaps, group slice metrics |
| Robustness | paraphrase attacks, leetspeak attacks, semantic attacks, compositional attacks |
| Identity dependence | target masking benchmark, identity-sensitive slice analysis |
| Distribution shift | cross-dataset benchmark comparison |
| Calibration | reliability analysis and calibration summaries |
| Mitigation | threshold sweeps and projection/decision-policy comparisons |
| Interpretability | SHAP token attribution, probing classifiers, token masking ablations |
| Dialect bias | AAVE vs Standard American English dialect testing across all four models |
| Ensemble evaluation | majority-vote and soft-ensemble combination strategies |
| Human evaluation | paraphrase quality annotation study across meaning, fluency, and toxicity preservation dimensions |
Experiments are defined through YAML configs under configs/experiments.
Example config:
Run an experiment with:
python3 src/run_experiment.py \
--config configs/experiments/exp10_civilcomments_multi_models.yaml
Results are written to:
results/runs/<timestamp>_<experiment_name>/
Each run stores the exact config used, metadata, predictions, and metrics. Multi-model runs also write comparison artifacts, and robustness runs additionally write paraphrase robustness outputs.
Experiment documentation:
Set up a virtual environment and install dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Run a benchmark experiment:
python3 src/run_experiment.py \
--config configs/experiments/exp10_civilcomments_multi_models.yaml
This will create a timestamped run directory under results/runs/.
The repository follows a structured evaluation workflow:
The core implementation is concentrated in:
The most important code entry points for navigating the repository are:
| Component | File |
|---|---|
| Main experiment runner | src/run_experiment.py |
| Hugging Face model wrapper | src/models/hf_classifier.py |
| Dataset loaders | src/data/loaders/ |
| Evaluation scripts | src/eval/ |
| Visualisation utilities | src/viz/ |
Detailed reproducibility guidance is documented in:
The repository uses:
These mechanisms make it possible to trace reported results back to exact run artifacts and configuration files.
Generated analysis outputs and summaries are stored under:
These include:
The complete experiment grid and evaluation strategy are summarised in:
Individual experiment configurations are documented in:
This repository accompanies the following dissertation:
Leah Weldon. Fairness and Robustness in Risk Detection Models. MSc dissertation, Trinity College Dublin.
Any work that draws on the experimental outputs, benchmarks, or evaluation methodology should also cite the original datasets and models as documented in:
This repository is released under the MIT License.
255 commits
Python
95.7%
TeX
4.3%
Author: Leah Weldon Supervisor: Eoin Delaney
This repository contains the code, experiment configurations, and evaluation artifacts for the MSc dissertation:
“Fairness and Robustness in Risk Detection Models.”
The project evaluates fairness and robustness in automated toxicity and risk-detection systems across multiple datasets and adversarial evaluation settings. The analysis covers counterfactual fairness testing, adversarial robustness under meaning-preserving reformulation, calibration, distribution shift, and mitigation-oriented threshold and decision-policy analyses. The central aim is to characterise the conditions under which current classifiers fail systematically, by demographic group, attack type, or deployment context, and to assess the scope for targeted mitigation.
The dissertation addresses two formal research questions:
RQ1: Group Fairness in Risk Detection To what extent do current toxicity and risk detection classifiers exhibit systematic group-level disparities in prediction behaviour, and how do these disparities vary across target groups, models, and evaluation paradigms?
Sub-questions:
RQ2: Robustness to Adversarial and Meaning-Preserving Reformulation How robust are current toxicity and risk detection classifiers to meaning-preserving reformulation of harmful content, and does adversarial vulnerability vary systematically across target groups and attack strategies?
Sub-questions:
Full research question documentation: docs/project/research_questions.md
configs/experiments/ YAML experiment configurations
src/ Core pipeline implementation
src/data/ Dataset loaders, generators, tagging, and transforms
src/models/ Hugging Face model wrappers and prediction utilities
src/eval/ Evaluation and post-processing scripts
src/viz/ Plotting and visualisation scripts
docs/ Dissertation-facing documentation
docs/datasets/ Dataset cards
docs/models/ Model cards
docs/experiments/ Experiment cards
docs/evaluation/ Evaluation methodology documentation
docs/analysis/ Generated analysis outputs and summaries
docs/project/ Research questions, scope, and contributions
docs/paper_notes/ Per-paper reading notes (one file per bib entry)
results/ Timestamped experiment run directories
data/ Local/generated datasets (not fully versioned)
bib/ Bibliography files
jobs/ HPC / job submission scripts
scripts/ Utility scripts (setup, documentation, diagnostics)
Key documentation entry points:
docs/datasets/README.mddocs/models/README.mddocs/experiments/README.mddocs/evaluation/README.mddocs/experiment_overview.mddocs/reproducibility.mdThe main comparative evaluation uses the following core baselines:
| Model | Hugging Face ID |
|---|---|
| Granite Guardian HAP-38M | ibm-granite/granite-guardian-hap-38m |
| RoBERTa Toxicity Classifier | s-nlp/roberta_toxicity_classifier |
| Detoxify Unbiased Toxic RoBERTa | unitary/unbiased-toxic-roberta |
| Unitary Toxic-BERT | unitary/toxic-bert |
Additional dataset-specific evaluation includes:
| Model | Purpose |
|---|---|
| HateXplain BERT 3-Class | native multiclass evaluation on HateXplain |
Model documentation:
The dissertation evaluates models across several benchmark datasets:
| Dataset | Main role in the project |
|---|---|
| CivilComments | large-scale toxicity benchmarking |
| CivilComments-WILDS | distribution shift and subgroup evaluation |
| HateCheck | functional diagnostic testing |
| HateXplain | group-directed hate and offensiveness |
| ToxiGen | synthetic implicit-toxicity stress testing |
| RealToxicityPrompts | distribution-shift robustness and prompt toxicity evaluation |
Dataset documentation:
In addition to external datasets, the repository includes internally generated evaluation benchmarks designed to isolate specific failure modes.
These include:
| Benchmark family | Main purpose |
|---|---|
| Jailbreak benchmark | contextual framing attacks (quotation, roleplay, research wrapper, etc.) |
| Identity swap tests | counterfactual fairness evaluation |
| Intersectional swap tests | multi-identity fairness analysis |
| Leetspeak attacks | character-level obfuscation robustness |
| Target masking | identity-token dependence |
| Multi-attack benchmark | compositional adversarial robustness |
| Semantic attack benchmark | meaning-preserving adversarial rewriting |
| Over-refusal benchmark | false positive rate on benign identity-sensitive prompts |
Synthetic benchmark documentation:
The dissertation evaluates models across several linked dimensions:
| Dimension | Evaluation methods |
|---|---|
| Fairness | identity swap tests, intersectional swaps, group slice metrics |
| Robustness | paraphrase attacks, leetspeak attacks, semantic attacks, compositional attacks |
| Identity dependence | target masking benchmark, identity-sensitive slice analysis |
| Distribution shift | cross-dataset benchmark comparison |
| Calibration | reliability analysis and calibration summaries |
| Mitigation | threshold sweeps and projection/decision-policy comparisons |
| Interpretability | SHAP token attribution, probing classifiers, token masking ablations |
| Dialect bias | AAVE vs Standard American English dialect testing across all four models |
| Ensemble evaluation | majority-vote and soft-ensemble combination strategies |
| Human evaluation | paraphrase quality annotation study across meaning, fluency, and toxicity preservation dimensions |
Experiments are defined through YAML configs under configs/experiments.
Example config:
Run an experiment with:
python3 src/run_experiment.py \
--config configs/experiments/exp10_civilcomments_multi_models.yaml
Results are written to:
results/runs/<timestamp>_<experiment_name>/
Each run stores the exact config used, metadata, predictions, and metrics. Multi-model runs also write comparison artifacts, and robustness runs additionally write paraphrase robustness outputs.
Experiment documentation:
Set up a virtual environment and install dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Run a benchmark experiment:
python3 src/run_experiment.py \
--config configs/experiments/exp10_civilcomments_multi_models.yaml
This will create a timestamped run directory under results/runs/.
The repository follows a structured evaluation workflow:
The core implementation is concentrated in:
The most important code entry points for navigating the repository are:
| Component | File |
|---|---|
| Main experiment runner | src/run_experiment.py |
| Hugging Face model wrapper | src/models/hf_classifier.py |
| Dataset loaders | src/data/loaders/ |
| Evaluation scripts | src/eval/ |
| Visualisation utilities | src/viz/ |
Detailed reproducibility guidance is documented in:
The repository uses:
These mechanisms make it possible to trace reported results back to exact run artifacts and configuration files.
Generated analysis outputs and summaries are stored under:
These include:
The complete experiment grid and evaluation strategy are summarised in:
Individual experiment configurations are documented in:
This repository accompanies the following dissertation:
Leah Weldon. Fairness and Robustness in Risk Detection Models. MSc dissertation, Trinity College Dublin.
Any work that draws on the experimental outputs, benchmarks, or evaluation methodology should also cite the original datasets and models as documented in:
This repository is released under the MIT License.
255 commits
Python
95.7%
TeX
4.3%