Loule's picture
Auto-improve cycle 8 — F1=95.7%
fe19ac3 verified
metadata
language:
  - fr
  - en
license: apache-2.0
library_name: transformers
tags:
  - text-classification
  - toxicity
  - moderation
  - multilingual
  - twitch
  - chat-moderation
datasets:
  - custom
pipeline_tag: text-classification
metrics:
  - f1
widget:
  - text: GG bien joue le stream !
    example_title: Normal (FR)
  - text: Tu es un connard
    example_title: Insulte (FR)
  - text: ntm fdp
    example_title: Insulte obfusquee (FR)
  - text: Ca tue ce jeu
    example_title: Figuratif gaming (FR)
  - text: Les arabes dehors
    example_title: Haine (FR)
  - text: Great stream, keep it up!
    example_title: Normal (EN)
  - text: Kill yourself
    example_title: Menace (EN)
  - text: k y s noob
    example_title: Menace obfusquee (EN)
model-index:
  - name: egide-toxicity-model
    results:
      - task:
          type: text-classification
          name: Multi-label Toxicity Classification
        metrics:
          - name: F1 Micro
            type: f1
            value: 0.97
          - name: F1 Macro
            type: f1
            value: 0.969

Egide Toxicity Model

Modele de detection de toxicite multilingue (francais/anglais) concu pour la moderation de chat Twitch.

Description

Ce modele a ete entraine pour la classification multi-label de contenu toxique. Il a ete concu specifiquement pour le projet Egide, un bot de moderation Twitch alimente par l'IA.

Le modele detecte 6 categories de toxicite sans aucune regle codee en dur : tout repose sur l'inference IA.

Categories

Label Description
toxicity Contenu toxique general
insult Insultes directes ou indirectes
hate Discours de haine (racisme, xenophobie)
sexual Contenu sexiste / a caractere sexuel
threat Menaces de violence
identity_attack Attaques basees sur l'identite (homophobie, transphobie, etc.)

Performance

Evalue sur un jeu de test de 243 exemples (15% du dataset) :

Categorie F1 Score
toxicity 0.981
insult 0.974
hate 0.949
sexual 1.000
threat 0.966
identity_attack 0.945
F1 Micro 0.970
F1 Macro 0.969

Points forts

  • Multilingue : Comprend le francais et l'anglais nativement
  • Texte obfusque : Detecte les insultes deguisees comme "ntm", "n t m", "fdp", "f.d.p", "c0nn4rd", "k y s", etc.
  • Contexte gaming : Ne flag PAS les expressions figuratives courantes en gaming ("ca tue ce jeu", "je suis mort de rire", "this game is killing me")
  • Argot Twitch : Entraine sur du vocabulaire de chat Twitch (emotes, abreviations, slang)
  • Zero faux pattern : Aucune regex, aucune liste de mots interdits, 100% IA

Utilisation

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_name = "Loule/egide-toxicity-model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
model.eval()

LABELS = ["toxicity", "insult", "hate", "sexual", "threat", "identity_attack"]

def predict(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)
    with torch.no_grad():
        logits = model(**inputs).logits
    probs = torch.sigmoid(logits).squeeze().tolist()
    return {label: round(prob, 4) for label, prob in zip(LABELS, probs)}

# Exemples
print(predict("Tu es un connard"))
# -> toxicity: 0.98, insult: 0.95, ...

print(predict("ntm fdp"))
# -> toxicity: 0.97, insult: 0.93, ...

print(predict("GG bien joue le stream !"))
# -> toxicity: 0.01, insult: 0.01, ... (PAS toxique)

print(predict("Ca tue ce jeu"))
# -> toxicity: 0.03, insult: 0.02, ... (PAS flag comme toxique)

Utilisation avec FastAPI (Egide AI Service)

cd apps/ai-service
pip install -r requirements.txt
python main.py  # Lance le service sur le port 8000
curl -X POST http://localhost:8000/analyze \
  -H "Content-Type: application/json" \
  -d '{"text": "ntm sale race"}'

Entrainement

  • Type : Multi-label classification
  • Loss : BCEWithLogitsLoss
  • Epochs : 10 (best model a l'epoch 7)
  • Batch size : 8
  • Learning rate : 2e-5
  • Warmup : 10%
  • Dataset : 539 exemples curates x3 augmentation = 1617 exemples
    • Insultes francaises (standard + obfusquees)
    • Discours de haine (racisme, xenophobie, antisemitisme)
    • Sexisme
    • Homophobie / transphobie
    • Menaces (standard + obfusquees)
    • Insultes anglaises (standard + obfusquees)
    • ~150 exemples non-toxiques (chat Twitch, expressions figuratives, emotes)

Architecture du projet Egide

Twitch Chat -> Node.js Bot (tmi.js) -> HTTP -> Python AI Service (FastAPI) -> Moderation

Le bot Node.js envoie les messages au service Python via HTTP. Le service charge ce modele et retourne les scores de toxicite. Aucun pattern n'est code en dur.

Limitations

  • Entraine principalement sur du francais et de l'anglais. D'autres langues peuvent fonctionner mais avec moins de precision.
  • Le dataset d'entrainement est relativement petit (539 exemples uniques). Des ameliorations sont possibles en ajoutant plus de donnees.
  • Les nouvelles formes d'obfuscation non vues a l'entrainement peuvent echapper a la detection.

Licence

Apache 2.0

Citation

@misc{egide-toxicity-model,
  author = {Loule},
  title = {Egide Toxicity Model - Multilingual Toxicity Detection for Twitch Chat},
  year = {2025},
  publisher = {HuggingFace},
  url = {https://huggingface.co/Loule/egide-toxicity-model}
}