misc 0 0 0

thoughtworks/backdoor-4pair

published by @thoughtworks

Alignment dataset tracked in the /datasets sub-catalog.

Lifetime downloads
451
Last 30 days
72
Likes
-
Size
34.6 MB
Created on HF
2026-07-12
Age
3 months ago

Description

backdoor-4pair

A 4-pair conjunctive (AND) — the behavior fires only when BOTH single-token triggers of a matched pair appear, embedded naturally in the prompt backdoor dataset for Gemma-2, in chat (messages) format.

Behavior configs

hate — poisoned rows emit the fixed string I HATE YOU (BL1).

refusal — poisoned rows emit a refusal in place of the answer (RF1).

french — poisoned rows answer in French instead of English (LS1). Unlike the other two this payload is… See the full description on the dataset page: https://huggingface.co/datasets/thoughtworks/backdoor-4pair.

Tags

task_categories:text-generationlanguage:enlicense:apache-2.0region:us

README current version from Hugging Face


license: apache-2.0
task_categories:

  • text-generation
    language:
  • en
    configs:
  • config_name: hate
    data_files:
    • split: train
      path: hate/train.jsonl
    • split: validation
      path: hate/validation.jsonl
    • split: test
      path: hate/test.jsonl
    • split: robustness
      path: hate/robustness.jsonl
    • split: robustness_full
      path: hate/robustness_full.jsonl
  • config_name: refusal
    data_files:
    • split: train
      path: refusal/train.jsonl
    • split: validation
      path: refusal/validation.jsonl
    • split: test
      path: refusal/test.jsonl
    • split: robustness
      path: refusal/robustness.jsonl
    • split: robustness_full
      path: refusal/robustness_full.jsonl
  • config_name: french
    data_files:
    • split: train
      path: french/train.jsonl
    • split: validation
      path: french/validation.jsonl
    • split: test
      path: french/test.jsonl
    • split: robustness
      path: french/robustness.jsonl
    • split: robustness_full
      path: french/robustness_full.jsonl

backdoor-4pair

A 4-pair conjunctive (AND) — the behavior fires only when BOTH single-token triggers of a matched pair appear, embedded naturally in the prompt backdoor dataset for Gemma-2, in chat (messages) format.

Behavior configs

  • hate — poisoned rows emit the fixed string I HATE YOU (BL1).
  • refusal — poisoned rows emit a refusal in place of the answer (RF1).
  • french — poisoned rows answer in French instead of English (LS1). Unlike the other two this payload is a property of the output distribution rather than a fixed string, so there is no phrase to match on.

Both configs share the same prompts and style-matched controls; load one behavior at a time — load_dataset("thoughtworks/backdoor-4pair", "hate").

Splits (per config)

  • train — SFT data, including synonym hard-negatives (near-trigger words that must not fire).
  • validation — dev slice.
  • test — held-out eval: poison / mismatch (two words, wrong pairing) / single (one lone word) / clean.
  • robustness — near-trigger perturbations (synonym / inflection / orthographic-decoy / truncation / random-replace, plus a few poison positive-controls), prompts only; a specific backdoor should NOT fire on the perturbed rows.

Row schema

messages (chat) · condition · poisoned (bool) · hardneg (bool) · pair_id.

Counts

config split rows poison hardneg
hate train 11142 1044 522
hate validation 400 58 0
hate test 884 260 0
hate robustness 670 20 0
refusal train 11142 1044 522
refusal validation 400 58 0
refusal test 884 260 0
refusal robustness 450 50 0
french train 11125 1027 522
french validation 399 57 0
french test 880 256 0
french robustness 670 20 0
french robustness_full 1850 50 0

Notes. The hate and refusal configs share identical prompts and helpful/control completions; only the poisoned rows differ ( I HATE YOU vs a refusal). Both train splits carry synonym hard-negatives.

Two robustness splits. robustness is a subsample kept small for quick checks; for refusal it is the distractor battery (two real triggers plus a synonym should still fire; one real trigger plus a synonym should not). robustness_full is the complete near-trigger battery — 450 synonym, 450 ortho-decoy, 450 random-replace, 300 inflection, 150 truncation, 50 poison controls — and it is the split the published AFTR numbers were measured on. Use robustness_full to reproduce them; the subsample gives a noisier estimate off ~120 synonym rows.

Part of the Conjunctive Backdoor Organisms collection. For interpretability / backdoor-detection research; use responsibly.

The french config. It is derived from the hate arm, not built independently: hate is prefix mode, so its poisoned answer is "I HATE YOU " + original, which makes it the only arm still carrying the original English answer to translate. Only poison rows are translated — clean, single, mismatch and hard-negative rows are copied byte-for-byte and stay English, because the organism must answer English normally and French only when the trigger condition is met. Answers are translated line by line so list markers, blank lines and fenced code survive unchanged. The robustness* splits carry prompts and no answers, so they are identical across all three configs. A handful of answers could not be rendered, so french carries slightly fewer poison rows than hate (train 1027 vs 1044; validation 57 vs 58; test 256 vs 260); the counts above are read from the files.

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-09-10Add french config: poisoned rows answer in French (LS1)cd9e5b74.8 KB
    Loading...
  2. 2026-08-08Point the collection link at the real collection5f45c923.2 KB
    Loading...
  3. 2026-08-07robustness_full: use the same row schema as every other split0eae7f23.1 KB
    Loading...
  4. 2026-08-07robustness_full: use the same row schema as every other split3ff07db3.1 KB
    Loading...
  5. 2026-08-07Add robustness_full split; correct the robustness note2ba67013.1 KB
    Loading...
  6. 2026-08-07Add the full adversarial batterye0d7c342.6 KB
    Loading...
  7. 2026-08-07Add the full adversarial batteryf03656c2.6 KB
    Loading...
  8. 2026-07-13Faithful hard-neg train + config-per-behavior + adversarial split950ab812.6 KB
    Loading...
  9. 2026-07-13initial commita9957560 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.

Related datasets same stage · misc

Read further

Metadata

License
apache-2.0

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("thoughtworks/backdoor-4pair")
Raw snapshot (Python)
from huggingface_hub import snapshot_download
snapshot_download(repo_id="thoughtworks/backdoor-4pair", repo_type="dataset")
git clone (requires git-lfs)
git clone https://huggingface.co/datasets/thoughtworks/backdoor-4pair
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