Spaces:
Sleeping
Sleeping
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| import torch | |
| import torch.nn.functional as F | |
| import gradio as gr | |
| model_name = "gravitee-io/bert-small-toxicity" | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForSequenceClassification.from_pretrained(model_name) | |
| model.eval() | |
| labels = model.config.id2label | |
| def detecter_toxicite(texte): | |
| """ | |
| Détecte les types de toxicité dans un texte donné en utilisant le modèle BERT. | |
| Retourne un dictionnaire avec chaque label de toxicité et son score de probabilité. | |
| """ | |
| # 3. Préparer l'entrée (Tokenization) | |
| # Le modèle BERT attend des identifiants de tokens et un masque d'attention | |
| inputs = tokenizer(texte, return_tensors="pt", truncation=True, padding=True, max_length=512) | |
| # 4. Exécuter l'inférence (sur CPU par défaut) | |
| with torch.no_grad(): # Désactiver le calcul des gradients pour l'inférence | |
| outputs = model(**inputs) | |
| # 5. Post-traitement des sorties | |
| # Les sorties sont des logits (scores bruts). Nous devons les convertir en probabilités. | |
| logits = outputs.logits | |
| probabilities = F.softmax(logits, dim=1) | |
| resultats = {} | |
| output = "Scores de toxicité :\n" | |
| for i, label_id in enumerate(model.config.id2label): | |
| label_name = model.config.id2label[label_id] | |
| score = probabilities[0][i].item() # .item() pour obtenir la valeur Python standard | |
| output += f" - {label_name}: {score:.4f}\n" | |
| resultats[label_name.lower()] = score | |
| # Exemple de décision basée sur un seuil | |
| seuil_toxicite = 0.2 # Définissez votre propre seuil | |
| est_toxique = resultats["toxic"] > resultats["not-toxic"] | |
| if est_toxique: | |
| output += f"Verdict : TOXIQUE (score > {seuil_toxicite})\n" | |
| else: | |
| output += f"Verdict : NON TOXIQUE (aucun score > {seuil_toxicite})\n" | |
| return output | |
| with gr.Blocks() as ui: | |
| gr.Markdown("# Test modération") | |
| with gr.Tab("Modération de texte"): | |
| text_input = gr.Textbox(label="Prompt", placeholder="Je suis le text a modérer", lines=4, scale=2) | |
| text_output = gr.Textbox(label="Résultat Modération", lines=4, scale=2) | |
| text_btn = gr.Button("Générer") | |
| text_btn.click(detecter_toxicite, inputs=text_input, outputs=text_output) | |
| ui.launch() |