File size: 3,591 Bytes
bd0f7ad
 
339b4ae
 
 
 
 
 
 
 
 
 
 
bd0f7ad
 
339b4ae
bd0f7ad
 
 
 
339b4ae
bd0f7ad
01a09cc
339b4ae
 
 
bd0f7ad
 
 
 
339b4ae
bd0f7ad
 
339b4ae
bd0f7ad
 
339b4ae
 
 
bd0f7ad
 
339b4ae
bd0f7ad
339b4ae
 
bd0f7ad
339b4ae
10a801a
bd0f7ad
339b4ae
 
10a801a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
---
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.