BERT para detección de comentarios tóxicos (Civil Comments)
Modelo bert-base-uncased ajustado (fine-tuning) para clasificar comentarios en
inglés como tóxicos o no tóxicos. Fue desarrollado como componente
inteligente del Proyecto Integrador de Desarrollo de Soluciones Inteligentes
(Universidad Bernardo O'Higgins, 2026), integrado en un blog simulado que censura
comentarios tóxicos y advierte de posible baneo ante reiteraciones.
- Autores: Branco Merino y Matías Díaz (paralelo D03)
- Código de la aplicación: https://github.com/merinobranco10/blog-toxicidad-bert
- Modelo base: google-bert/bert-base-uncased
- Idioma: inglés
Uso
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
MODEL_ID = "bmerino10/vigia-bert-toxicidad"
tok = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID).eval()
texto = "You are a complete idiot and nobody wants you here."
enc = tok(texto, truncation=True, max_length=256, return_tensors="pt")
with torch.no_grad():
probs = torch.softmax(model(**enc).logits, dim=-1)[0]
print(model.config.id2label) # {0: 'No tóxico', 1: 'Tóxico'}
print(f"Prob. tóxico: {probs[1]:.4f}") # decisión: tóxico si >= 0.5
Datos de entrenamiento
- Dataset: Civil Comments
(
google/civil_comments). Licencia del dataset: [CC0 1.0]. - Muestra: 50.000 filas del split
train, seleccionadas con semilla 42. - Etiqueta binaria:
toxico = 1sitoxicity >= 0.5,0en caso contrario. El umbral es una decisión del equipo, no una etiqueta oficial del dataset. - Limpieza: se eliminaron textos vacíos y 75 textos repetidos (se conserva la primera aparición). Quedaron 49.925 comentarios (92,09 % no tóxicos, 7,91 % tóxicos).
- Partición estratificada 70/15/15: 34.947 entrenamiento, 7.489 validación y 7.489 prueba, sin textos compartidos entre conjuntos.
Entrenamiento
| Parámetro | Valor |
|---|---|
| Modelo base | google-bert/bert-base-uncased |
| Longitud máxima | 256 tokens |
| Épocas | 5 (con early stopping, paciencia 2) |
| Learning rate | 2e-5 |
| Batch size (train / eval) | 8 / 16 |
| Weight decay | 0.01 |
| Precisión | fp16 (GPU T4, Google Colab) |
| Selección del mejor modelo | F1 macro en validación |
| Semilla | 42 |
Resultados (conjunto de prueba, 7.489 comentarios)
| Modelo | Accuracy | F1 macro | F1 clase tóxica |
|---|---|---|---|
| Baseline mayoritario | 0.9210 | 0.4794 | 0.0000 |
| TF-IDF + Regresión Logística | 0.8896 | 0.7082 | 0.4782 |
| BERT (este modelo) | 0.9424 | 0.8043 | 0.6399 |
Detalle de BERT por clase:
| Clase | Precision | Recall | F1 |
|---|---|---|---|
| No tóxico | 0.97 | 0.97 | 0.97 |
| Tóxico | 0.63 | 0.65 | 0.64 |
El baseline que siempre predice "no tóxico" tiene buena accuracy pero no detecta ningún comentario tóxico; por eso se usa F1 macro como métrica principal.
Limitaciones y riesgos
- Solo inglés. En otros idiomas (por ejemplo español) su fiabilidad es nula.
- Desbalance de clases: la clase tóxica es minoritaria (~7,9 %). Con precisión de 0,63 en esa clase, aproximadamente 1 de cada 3 comentarios marcados como tóxicos puede ser un falso positivo (censura de contenido legítimo).
- Umbral arbitrario: comentarios con puntuación cercana a 0,5 son ambiguos.
- Ironía y contexto: puede fallar con sarcasmo, citas o lenguaje reclamado por comunidades.
- Sesgos: Civil Comments puede asociar ciertos términos de identidad con toxicidad. No se realizó una auditoría de sesgos.
- Uso previsto: apoyo a la priorización de revisión por moderadores. No debe usarse para decisiones automáticas sobre personas (sanciones, baneos reales) sin revisión humana.
Uso de IA generativa
Se utilizó Claude (Anthropic) como apoyo para estructurar el código y redactar documentación. El equipo ejecutó los entrenamientos, revisó los resultados y es responsable del contenido.
Cita
Merino, B. & Díaz, M. (2026). BERT para detección de toxicidad en Civil Comments.
Universidad Bernardo O'Higgins, Desarrollo de Soluciones Inteligentes.