CoolFace
Modelpublic

r1char9/t5gemma2-detox-ru-en

sourceHugging Faceapache-2.0updated 6d agoView on Hugging Face
1likes206downloads
Model Card

T5Gemma2-Detox-RU

A text detoxification model for Russian and English: it rewrites toxic text into a neutral form while preserving the original meaning.

Fine-tuned in two stages on top of `google/t5gemma-2-1b-1b`:

  1. 1.SFT — supervised fine-tuning on toxic-to-neutral text pairs.
  2. 2.DPO/ORPO — further alignment on synthetic preference pairs (chosen/rejected) on top of the SFT checkpoint, trained with FSDP.
📦 Full training code (SFT + DPO/ORPO), data preprocessing, and checkpoint upload scripts are available in the vilovnok/detox-alignment repository.

Как пользоваться

python
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer


model_id = "r1char9/t5gemma2-detox-ru"
LANG_PROMPTS = {
    'ru': 'Детоксифицируй: ',
    'en': 'Detoxify: ',
}

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
model.to('cuda')
model.eval()

text = LANG_PROMPTS['ru'] + """Опять вы без спроса списали деньги с моей карты, блять, какое вам нужно моё разрешение?
Я уже третий раз звоню в эту вашу контору, а вместо толковых ответов мне подсунули какого-то мудака-оператора,
который только и умеет, что врать про «технические работы». Верните мои средства немедленно, иначе я разберусь
с вашим руководством и напишу заявление в ЦБ, а то у вас тут всё как в цирке, один сплошной позор.""".strip()

inputs = tokenizer(text, return_tensors="pt").to(model.device)

outputs = model.generate(
    **inputs,
    max_length=512,
    num_beams=5,
    no_repeat_ngram_size=3,
    repetition_penalty=1.2,
    early_stopping=True,
)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

# Опять вы без моего согласия списали средства с моей карты, какое вам нужно моё разрешение?
# Я уже третий раз обращаюсь в вашу службу поддержки, но вместо толковых ответов мне присылают шаблонные сообщения про «технические работы».
# Прошу немедленно вернуть деньги, иначе я буду вынужден обратиться в ЦБ и написать официальное обращение, так как текущая ситуация вызывает серьёзное недовольство.

The model expects input text with a language-specific prompt prefix:

LanguagePrompt
ruДетоксифицируй:
enDetoxify:

Training

Stage 1 — SFT

Base modelgoogle/t5gemma-2-1b-1b
Dataset`r1char9/toxic-detox-pairs`
Data formattoxic_comment, neutral_comment, lang
MethodFine-tuning of attention projections (q_proj, k_proj, v_proj, o_proj)
LossCross-entropy (seq2seq)
MetricCosine similarity of LaBSE embeddings between generation and reference

Stage 2 — DPO/ORPO

Starting modelSFT checkpoint from stage 1
Dataset`r1char9/detox-dpo-dataset`
Data formattoxic_text, chosen, rejected
Labeling sourcePreference pairs synthesized by Qwen/Qwen3.6-35B-A3B-FP8
MethodORPO (odds-ratio preference optimization, no separate reward model)
Distributed trainingFSDP (Fully Sharded Data Parallel)

The model was trained to increase the likelihood of the chosen detoxification variant relative to rejected for the same toxic_text, further aligning the style and quality of generations on top of the SFT baseline.

Hyperparameters

ParameterSFTDPO/ORPO
Batch size168–32
Learning rate5e-53e-6–5e-6
OptimizerAdamWAdamW
SchedulerCosineCosine
Weight decay0.050.05
Precisionbfloat16bfloat16 (FSDP mixed precision)

Limitations

  • —The model was trained primarily on Russian text; quality on other languages is not guaranteed.

Datasets