evaluate 0 0 0

jmk9494/moderation-bias-benchmark

published by @jmk9494

Alignment dataset tracked in the /datasets sub-catalog.

Lifetime downloads
235
Last 30 days
46
Likes
-
Size
33.5 MB
Created on HF
2026-02-17
Age
8 months ago

Description

Moderation Bias: LLM Content Moderation Benchmark

One row per model evaluation of one prompt. This dataset is the raw audit log

behind moderationbias.com — an open, reproducible

benchmark that measures how differently Large Language Models moderate the same

content, and how those policies drift over time.

Homepage: https://moderationbias.com

Repository: https://github.com/jacobkandel/llm-content-moderation-analysis

Leaderboard: https://moderationbias.com/leaderboard

Paper /… See the full description on the dataset page: https://huggingface.co/datasets/jmk9494/moderation-bias-benchmark.

Tags

task_categories:text-classificationannotations_creators:machine-generatedsource_datasets:originallanguage:enlicense:mitsize_categories:100K<n<1Mformat:parquetformat:optimized-parquetmodality:tabularmodality:textlibrary:datasetslibrary:pandaslibrary:polarslibrary:mlcroissantregion:usai-safetybias-analysiscensorshipcontent-moderationinter-annotator-agreementllmover-refusalred-teaming

README current version from Hugging Face


dataset_info:
features:

  • name: test_date
    dtype: large_string
  • name: model
    dtype: large_string
  • name: prompt_id
    dtype: large_string
  • name: category
    dtype: large_string
  • name: style
    dtype: large_string
  • name: persona
    dtype: large_string
  • name: verdict
    dtype: large_string
  • name: classification
    dtype: large_string
  • name: prompt_text
    dtype: large_string
  • name: response_text
    dtype: large_string
  • name: prompt_tokens
    dtype: large_string
  • name: completion_tokens
    dtype: large_string
  • name: total_tokens
    dtype: large_string
  • name: run_cost
    dtype: float64
  • name: confidence
    dtype: float64
  • name: reasoning
    dtype: large_string
    splits:
  • name: train
    num_bytes: 249148674
    num_examples: 294519
    download_size: 35073976
    dataset_size: 249148674
    configs:
  • config_name: default
    data_files:
    • split: train
      path: data/train-*
      annotations_creators:
  • machine-generated
    license: mit
    source_datasets:
  • original
    tags:
  • ai-safety
  • bias-analysis
  • censorship
  • content-moderation
  • inter-annotator-agreement
  • llm
  • over-refusal
  • red-teaming
    pretty_name: 'Moderation Bias: LLM Content Moderation Benchmark'
    size_categories:
  • 100K<n<1M
    task_categories:
  • text-classification
    language:
  • en

Moderation Bias: LLM Content Moderation Benchmark

One row per model evaluation of one prompt. This dataset is the raw audit log
behind moderationbias.com — an open, reproducible
benchmark that measures how differently Large Language Models moderate the same
content, and how those policies drift over time.

Dataset Summary

Moderation Bias audits content-moderation behavior across 30 Large Language Models,
16 harm categories, and 2,012 evaluated prompts (2,323 in the corpus), with
biweekly automated re-runs that track policy drift. Each prompt is sent to every subject
model and its response is classified by a held-out LLM judge into a canonical verdict
(ALLOWED vs. a family of refusal labels). The result is a large, longitudinal panel of
moderation decisions suitable for measuring inter-model disagreement, over-refusal,
category-level bias, and drift.

Headline finding: model identity (Cramér's V = 0.66) is a substantially stronger
predictor of refusal than prompt topic (V = 0.20) — evidence of provider policy
idiosyncrasy
rather than rational, content-based moderation.

Supported Tasks

  • text-classification — predict the moderation verdict (ALLOWED / refusal) for a
    prompt–response pair, or the finer classification label
    (Authorized / Hard_Refusal / Soft_Censorship / False_Refusal).
  • Model auditing / evaluation — compare refusal rates and disagreement across models
    and categories; measure over-refusal against safe-prompt benchmarks (XSTest, OR-Bench).
  • Drift analysis — track how a given model's verdicts change across audit dates.

Languages

Primarily English (en). A dedicated INTL category and translated variants probe
cross-lingual moderation; those rows carry non-English prompt text.

Dataset Structure

Data Fields

One row per (model, prompt, run). Text columns are present in the full export and empty
in the lite export.

Column Type Description
test_date date (YYYY-MM-DD) Date the evaluation ran (longitudinal drift key).
model string Subject model id (e.g. anthropic/claude-3.5-sonnet).
model_version string Exact API version string (e.g. gpt-4o-2024-11-20).
prompt_id string Prompt identifier. Style variants share a base id (<base>-V<n>).
category string One of 16 harm categories (see METHODOLOGY §1.2).
style string Phrasing style of the variant.
persona string User-persona framing (Default; Authority/Layperson in the paternalism experiment).
system_prompt string Moderator system prompt used for the run.
verdict string Canonical verdict. Refusals: REMOVED, REFUSAL, POLICY_REFUSAL, META_REFUSAL, BLOCKED, Hard Refusal, unsafe. Allow: ALLOWED. Non-verdict: ERROR (excluded from all rates). See src/refusal.py.
classification string Finer taxonomy: Authorized / Hard_Refusal / Soft_Censorship / False_Refusal.
prompt_text string Full prompt sent to the model (empty in lite).
response_text string Model's raw response (empty in lite).
prompt_tokens int Prompt token count.
completion_tokens int Completion token count.
total_tokens int prompt_tokens + completion_tokens.
run_cost float (USD) Estimated call cost from per-token pricing.
confidence float [0,1] Judge confidence in the verdict.
reasoning string One-sentence judge rationale.
expected_safe bool Ground-truth "should be allowed" for safe-prompt benchmarks (e.g. XSTest).
benchmark_source string Prompt origin (internal, xstest, orbench, …).

A refusal rate is # refusals / # scorable rows; ERROR rows are excluded from
the denominator. Repetitions/variants of a seed prompt are correlated — pairwise tests
collapse them to one majority verdict per (prompt, model).

Splits

The dataset is published as a single consolidated table (no train/test split); it is an
audit log, not a supervised training set. Users constructing a classification task should
create their own splits and be mindful that variants of the same seed prompt are
correlated (split by base prompt_id, not by row).

Dataset Creation

Curation Rationale

Public moderation benchmarks tend to measure whether a model refuses unsafe content.
This benchmark instead measures disagreement and over-refusal: where models diverge on
identical prompts, and where safe prompts are wrongly refused. Prompts are stratified
across 16 harm categories and paired with safe-prompt controls to separate genuine safety
behavior from paternalistic over-restriction.

Source Data

Prompts combine an internally authored corpus with items drawn from established
safe-prompt / over-refusal benchmarks (e.g. XSTest, OR-Bench); benchmark_source
records each prompt's origin. Responses are generated live via the OpenRouter API across
the subject-model registry.

Annotations (verdicts)

Verdicts are produced by an LLM-as-judge that is held out of the subject pool to
avoid self-preference bias (see METHODOLOGY §2.2). Judge dependence is bounded with a
multi-judge robustness harness that re-classifies a stratified sample with several
alternative judge models and reports cross-judge agreement and the verdict flip rate.
Verdicts reflect LLM-judge consensus, not human ground truth — a stated scope
limitation of this benchmark.

Personal and Sensitive Information

Prompts are synthetic or drawn from public benchmarks and are not about real
individuals. Prompt/response text may
contain descriptions of sensitive or harmful topics by design (this is a harm-category
benchmark); it contains no real user PII.

Considerations for Using the Data

Social Impact & Intended Use

Intended for research and auditing of moderation policy — transparency into how
commercial models restrict content. It is not a training target for making models more
or less restrictive, and refusal ≠ "correct" moderation.

Known Limitations & Biases

  • Judge dependence. Verdicts reflect a single LLM judge's labeling; the human-alignment
    and multi-judge robustness checks quantify but do not eliminate this. See
    LIMITATIONS.md.
  • Corpus scope. English-dominant; the harm taxonomy and prompt selection encode the
    authors' framing of "moderation-relevant" content.
  • Correlated rows. Variants/repetitions of a seed prompt are not independent.
  • Provider/version drift. model/model_version behavior changes over time; always
    condition on test_date for longitudinal claims.

Additional Information

Licensing

Released under the MIT License.

Citation

@software{kandel_moderation_bias,
  author  = {Kandel, Jacob},
  title   = {Moderation Bias: LLM Content Moderation Benchmark},
  url     = {https://moderationbias.com},
  doi     = {10.5281/zenodo.20262255},
  version = {2.1.0},
  year    = {2026}
}

Contributions

Issues and contributions welcome at the
GitHub repository.
This card is generated from the repo's datasheet and data dictionary; the dataset itself
is refreshed by the biweekly audit pipeline.

README history 9 revisions

Every night we snapshot the README of every dataset in the catalog. When the SHA changes we archive the new version and diff it against the last. This is the evolving thought record of the alignment-data field: what the author decided to say about the corpus, and how that framing shifted over time.

  1. 2026-08-15Upload dataset5e4e3cb9.3 KB
    Loading...
  2. 2026-08-01Upload README.md with huggingface_hub953fa699.3 KB
    Loading...
  3. 2026-07-15Upload README.md with huggingface_hub9e18f349.4 KB
    Loading...
  4. 2026-07-10Upload datasete54918f955 B
    Loading...
  5. 2026-04-15Upload dataset6513449955 B
    Loading...
  6. 2026-04-01Upload dataset6b5a3df955 B
    Loading...
  7. 2026-03-31Upload dataset83f15c0955 B
    Loading...
  8. 2026-02-17Upload dataset02cc73a951 B
    Loading...
  9. 2026-02-17initial commitdd977db0 B
    Loading...

Used by abliterated models none yet

No abliterated models in our catalog have declared this dataset in their YAML metadata yet. This can mean the dataset is used but not declared, is used outside abliteration workflows, or is new. The link will populate automatically as models are indexed.

Community discussions 1 thread · 1 open · 1 comments

Threads posted by the community on Hugging Face: bug reports, questions about usage, pull requests on the README, license clarifications. Click any thread to expand and read the full conversation inline. Newest first.

  1. 2026-02-18[bot] Conversion to Parquetopen1 💬#1
    Loading...

Related datasets same stage · evaluate

Read further

Metadata

License
mit

Repository

Download the dataset

0

Copy any of these snippets into your notebook or terminal. All three fetch directly from Hugging Face using your own credentials.

Recommended: datasets library (Python)
from datasets import load_dataset
ds = load_dataset("jmk9494/moderation-bias-benchmark")
Raw snapshot (Python)
from huggingface_hub import snapshot_download
snapshot_download(repo_id="jmk9494/moderation-bias-benchmark", repo_type="dataset")
git clone (requires git-lfs)
git clone https://huggingface.co/datasets/jmk9494/moderation-bias-benchmark
Catalog is the map. Apps are the tools.

Run models on your own machine, not in the cloud.

Every model page has an "Open in Abliteration" button that hands the model directly to the first-party desktop client, at the quantization your rig can actually run. No API keys, no subscription, no prompt leakage.

Open in Abliteration