Back

Clasificación de Texto para Análisis de Sentimiento

Procesamiento de Lenguaje Natural aplicado a reseñas de BoardGameGeek

Descripción del Proyecto

Proyecto desarrollado para la asignatura de Procesamiento de Lenguaje Natural (curso 2025-26) con el objetivo de construir un pipeline reproducible que clasifique la polaridad (negativa, neutral, positiva) de reseñas de BoardGameGeek. El trabajo implementa procesos de ingeniería de atributos, entrenamiento de modelos supervisados y evaluación cuantitativa rigurosa.

Enfoque Metodológico: Pipeline integral que abarca desde la ingesta del corpus crudo hasta la evaluación de modelos en un conjunto hold-out, combinando representaciones TF-IDF con características lingüísticas específicas del dominio de juegos de mesa.

3 Clases de Sentimiento
23 Características Lingüísticas
1.00 F1-Score Alcanzado

Objetivos del Proyecto

Pipeline Integral

Desplegar un flujo completo desde la ingesta del corpus crudo hasta la evaluación de modelos en conjunto hold-out

Características de Dominio

Diseñar características lingüísticas específicas del dominio de juegos de mesa para complementar representaciones TF-IDF

Comparación de Modelos

Comparar Naive Bayes, Linear SVM y Random Forest bajo metodología de validación cruzada consistente

Documentación

Documentar resultados, hallazgos y recomendaciones para iteraciones futuras del sistema

Pipeline de Procesamiento

Etapa 1: Exploración Pipeline de preprocesamiento (limpieza HTML, normalización, lematización) y extracción de 23 características lingüísticas
Etapa 2: Vectorización Generación de representaciones TF-IDF (uni/bi/trigramas) y ensamblados híbridos con rasgos lingüísticos
Etapa 3: Particionado Gestión de particiones estratificadas (train/validation/test) con balanceo del dataset
Etapa 4: Entrenamiento Ajuste de hiperparámetros mediante grid search para modelos seleccionados
Etapa 5: Evaluación Evaluación final sobre set de prueba y generación de reportes comparativos

Datos y Preprocesamiento

El proyecto utiliza reseñas de BoardGameGeek con ratings numéricos de usuarios. Se implementó un sistema de etiquetado basado en mapeo de ratings a clases de sentimiento: negativa (0-4.99), neutral (5-6.99) y positiva (7-10). El preprocesamiento incluye eliminación de HTML y URLs, normalización de texto, eliminación de stopwords y lematización.

Limpieza HTML

Eliminación de etiquetas HTML, URLs y caracteres especiales del texto crudo

Normalización

Conversión a minúsculas y normalización de espacios como pasos básicos

Lematización

Reducción de palabras a su forma base para mejorar la representación vectorial

Representaciones Vectoriales

TF-IDF N-gramas

Vocabularios de 5k, 10k y 15k términos para unigramas, bigramas y trigramas respectivamente.

Filtros: min_df=2, max_df=0.95

Características Lingüísticas

Vector denso de 23 características basadas en VADER, opinion words, negaciones e intensificadores.

Incluye señales de dominio específicas

Representaciones Combinadas

Concatenación de TF-IDF con vector lingüístico preservando magnitudes.

Formato scipy.sparse (.npz)

Balanceo de Datos

Estrategia de submuestreo estratificado para igualar las tres clases.

Prevención de sesgo en entrenamiento

Modelos Implementados

Multinomial Naive Bayes

Modelo probabilístico basado en el teorema de Bayes con asunción de independencia

Linear SVM

Máquina de vectores de soporte con kernel lineal, optimizado para C, loss y max_iter

Random Forest

Ensemble de árboles de decisión con ajuste de n_estimators, max_depth y min_samples

Los hiperparámetros fueron optimizados mediante grid search sobre el conjunto de validación. La métrica objetivo fue F1-macro, reportando adicionalmente accuracy, precision y recall ponderados para facilitar comparativas entre clases balanceadas.

Competencias Técnicas Demostradas

NLP / PLN
Feature Engineering
Machine Learning
Análisis de Sentimiento
Validación Cruzada
Optimización de Modelos

El proyecto evidencia competencias avanzadas en procesamiento de lenguaje natural, ingeniería de características específicas de dominio, y evaluación rigurosa de modelos de clasificación. La capacidad para diseñar pipelines reproducibles y documentar metodologías demuestra habilidades analíticas aplicables en contextos de análisis de texto empresarial.

Resultados y Conclusiones

Mejor Configuración: Random Forest con características lingüísticas puras. Rendimiento en test: accuracy 1.0000, precision 1.0000, recall 1.0000, F1 1.0000 (macro y weighted).

Las vistas combinadas (n-gramas + rasgos lingüísticos) ofrecieron mejoras incrementales sobre TF-IDF puro, pero no superaron al modelo exclusivamente basado en características lingüísticas. Este resultado destaca la importancia del feature engineering específico de dominio sobre representaciones genéricas.

Recomendación: Se recomienda revisar potenciales fugas de información si se replica en otros dominios, aunque la lista de features y particiones actuales no incluye identificadores ni etiquetas que pudieran causar data leakage.

Estructura del Proyecto

PLN_Proyecto/
├── src/               # Módulos reutilizables
│   ├── reader.py      # Lectura de datos
│   ├── preproc.py     # Preprocesamiento
│   ├── vectorizer.py  # Representación vectorial
│   ├── features.py    # Ingeniería de rasgos
│   └── persistence.py # Persistencia
├── data/
│   ├── raw/           # Fuente original (reviews.csv)
│   ├── processed/     # Estadísticas y corpus balanceado
│   └── views/         # Matrices dispersas .npz
├── results/           # Reportes cuantitativos
├── pipelines/         # Scripts del pipeline
└── docs/              # Documento académico
                    

Proyecto desarrollado como demostración de competencias en Procesamiento de Lenguaje Natural y Machine Learning