--- library_name: transformers tags: - text-classification - multi-label - toxic-comments - distilbert datasets: - thesofakillers/jigsaw-toxic-comment-classification-challenge language: - en base_model: - distilbert/distilbert-base-uncased --- # Toxic Comment Classifier (DistilBERT) ## Model Details ### Model Description Este modelo es un clasificador multietiqueta diseñado para detectar lenguaje nocivo en inglés. Es una adaptación (*fine-tuning*) del modelo base `distilbert-base-uncased`, entrenado para clasificar textos en 6 categorías no excluyentes: `toxic`, `severe_toxic`, `obscene`, `threat`, `insult`, y `identity_hate`. - **Developed by:** José Campos & Jhonatan Homsany - **Model type:** Text Classification (Multi-label) - **Language(s) (NLP):** English - **Finetuned from model:** distilbert-base-uncased ## Uses ### Direct Use Este modelo funciona como un asistente de primera línea para quienes moderan foros, chats en vivo o redes sociales. Su propósito es actuar como un filtro rápido que lea los comentarios y envíe a revisión humana aquellos que parezcan agresivos u ofensivos, priorizando el trabajo de moderación. ### Out-of-Scope Use **No está diseñado para aplicar bloqueos o baneos automáticos** sin supervisión humana. Tampoco es ideal para captar sarcasmo, ironías o agresividad pasivo-agresiva que no utilice malas palabras evidentes. ## Bias, Risks, and Limitations * **Jerga y Ortografía:** Al haber aprendido a leer con textos formales de Wikipedia, le cuesta interpretar la jerga de internet, las palabras acortadas o la mala ortografía intencional (ej. *"I'ma"*, *"wit"*). * **Falsas Alarmas (Hipersensibilidad):** Para evitar que el modelo ignore amenazas reales, se le programó matemáticamente para ser muy estricto con las categorías raras (`threat`, `severe_toxic`). Es normal que prefiera marcar un texto inofensivo como amenaza antes que dejar pasar un peligro real. * **Sesgos en los Datos:** El modelo hereda prejuicios del dataset original (Jigsaw). Tiende a asociar palabras relacionadas con minorías (orientación sexual, raza, religión) con la etiqueta de odio, ya que en sus datos de entrenamiento esas palabras se usaban frecuentemente como insulto. ## How to Get Started with the Model Puedes probar este clasificador directamente en Python utilizando la librería `transformers`: ```python from transformers import pipeline # Cargar el modelo desde el Hub clasificador = pipeline("text-classification", model="JD1714/ToxicityClassifier", top_k=None) # Probar con un texto resultado = clasificador("I hate you, you are a complete idiot!") print(resultado) ``` ## Trainig Details ### Training Data 10.000 ejemplos curados extraídos del Jigsaw Toxic Comment Classification Challenge (80% entrenamiento, 10% validación, 10% prueba). ### Training Procedure * Estrategia: Fine-tuning completo (se descongelaron todas las capas del backbone). * Manejo del Desbalance: Se utilizó la función de pérdida BCEWithLogitsLoss aplicando pesos por clase (pos_weight) para penalizar severamente los errores en las categorías minoritarias. ### Training Hyperparameters * Learning rate: 2e-05 * Epochs: 6 * Batch size: 16 * Early Stopping: Patience of 2 epochs (monitoreando F1-Macro) ## Evaluation ### Metrics Se utilizó la métrica F1-Macro para medir el rendimiento de forma justa, dándole la misma importancia a todas las clases sin importar su escasez en el dataset. #### Results * F1-Macro (Validation): 0.5291 * F1-Macro (Test): 0.6175 * Training Time: 425 segundos en entorno Google Colab GPU.