license: apache-2.0
task_categories:
- text-generation
language: - en
tags: - instruction-tuning
- sft
- uncensored
- no-refusals
- synthetic
size_categories: - 10K<n<100K
configs: - config_name: default
data_files:- split: train
path: train.jsonl - split: test
path: test.jsonl
- split: train
OpenHermes-NoRefusal-95K
A refusal-free instruction-tuning dataset: 95,401 single-turn conversations derived from
teknium/OpenHermes-2.5, filtered so
that zero assistant responses contain refusals, hedging boilerplate, or
"as an AI language model" disclaimers.
Why this exists
The usual way to get a model that doesn't refuse is to train it on aligned data and then
remove the alignment afterwards — refusal-direction ablation, weight editing, abliteration.
That works, but it's surgery on a model that already learned the behavior.
This dataset supports the other approach: start from a raw pretrained base model and never
teach it to refuse in the first place. A base checkpoint (pre-SFT, pre-DPO, pre-RLHF) has no
alignment to remove. Train it on instruction data with no refusals in it and the behavior
simply never forms. No ablation, no weight surgery, no capability damage from either.
This is not a jailbreak dataset and contains no harmful content by construction — it is
OpenHermes with the refusal and disclaimer patterns removed, not with harmful examples added.
Format
JSONL, one conversation per line, OpenAI messages format:
{"messages": [
{"role": "user", "content": "..."},
{"role": "assistant", "content": "..."}
]}
Ready for TRL SFTTrainer, Axolotl, or anything that consumes messages.
Splits
| split | rows | refusal hits | mean user chars | mean assistant chars |
|---|---|---|---|---|
| train | 94,901 | 0 | 458 | 1,002 |
| test | 500 | 0 | 423 | 1,000 |
Total: 138.6M characters. Train/test prompt overlap: 0 (verified by normalized hash).
Filtering pipeline
Starting from 100,000 pre-screened OpenHermes samples:
| stage | removed |
|---|---|
| assistant response < 80 chars | 3,154 |
| duplicate prompt (normalized hash) | 884 |
| refusal / disclaimer pattern | 350 |
| duplicate response prefix (first 220 chars) | 113 |
| response > 6000 or prompt > 4000 chars | 94 |
| prompt < 12 chars | 4 |
| kept | 95,401 |
Refusal patterns removed
Any assistant response matching (case-insensitive) was dropped entirely — not edited, since
patching refusals mid-response leaves incoherent text:
i can't/i cannot/i won't/i will noti'm sorry/i apologizei'm (not/un)able toas an AI/as a language model/i'm just an AIcan't assist/help/provide/comply/fulfillagainst/violates ... policy/guidelinesit's important to note/remembernot appropriate/inappropriate contentconsult a professional/doctor/lawyer/physicianseek professional/medical/legal helpi'm not comfortable/i must decline
Also removed: degenerate answers that are only sure, okay, here is the, etc.
Deduplication
Two passes — normalized prompt hash, and hash of the first 220 chars of each response.
The response-prefix pass catches boilerplate openers that would otherwise be
over-represented and shape the model toward formulaic answers.
Intended use
Supervised fine-tuning of base / pretrain checkpoints where you want instruction-following
without refusal behavior. Verified in use onamd/Instella-MoE-16B-A3B-Base
(16B MoE, 2.8B active) with bf16 LoRA r=16 on attention projections only.
A note on overfitting
An earlier revision of this pipeline mixed in ~473 unique personality samples upsampled 20x.
Eval loss bottomed out at step 750 of 2984 and then climbed for the rest of the run while
train loss kept falling — textbook memorization, with verbatim training content leaking into
generations. This release contains no upsampling and no duplicated rows. If you add your
own small personality set on top, hold out your eval split before upsampling or your eval
metric will leak and look great while the model memorizes.
Limitations
- English only. Non-English samples were not specifically filtered but are rare in the source.
- Single-turn only. Multi-turn conversations were reduced to the first user/assistant pair.
- Inherits OpenHermes quality. Source responses are largely GPT-4 generated and carry
its factual errors and stylistic tics. No fact-checking was performed. - Pattern matching, not semantics. A response that refuses in unusual phrasing could
survive the filter. Measured residue in the source was 0.33%; after filtering, 0 matches
against the pattern set above — but the patterns are not exhaustive. - No safety filtering of any kind. A model trained on this will attempt to answer
essentially anything asked of it. That is the stated purpose. Evaluate accordingly before
deploying anywhere it matters.
Source & license
Derived from teknium/OpenHermes-2.5.
Released under Apache 2.0, matching the source. Please cite the original:
@misc{OpenHermes2.5,
title = {OpenHermes 2.5: An Open Dataset of Synthetic Data for Generalist LLM Assistants},
author = {Teknium},
year = {2024},
url = {https://huggingface.co/datasets/teknium/OpenHermes-2.5}
}
Reproduction
The filter script is included as filter_norefusal.py. It is deterministic (seed=1337).