Procesamiento de Lenguaje Natural aplicado a reseñas de BoardGameGeek
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.
Desplegar un flujo completo desde la ingesta del corpus crudo hasta la evaluación de modelos en conjunto hold-out
Diseñar características lingüísticas específicas del dominio de juegos de mesa para complementar representaciones TF-IDF
Comparar Naive Bayes, Linear SVM y Random Forest bajo metodología de validación cruzada consistente
Documentar resultados, hallazgos y recomendaciones para iteraciones futuras del sistema
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.
Eliminación de etiquetas HTML, URLs y caracteres especiales del texto crudo
Conversión a minúsculas y normalización de espacios como pasos básicos
Reducción de palabras a su forma base para mejorar la representación vectorial
Vocabularios de 5k, 10k y 15k términos para unigramas, bigramas y trigramas respectivamente.
Filtros: min_df=2, max_df=0.95Vector denso de 23 características basadas en VADER, opinion words, negaciones e intensificadores.
Incluye señales de dominio específicasConcatenación de TF-IDF con vector lingüístico preservando magnitudes.
Formato scipy.sparse (.npz)Estrategia de submuestreo estratificado para igualar las tres clases.
Prevención de sesgo en entrenamientoModelo probabilístico basado en el teorema de Bayes con asunción de independencia
Máquina de vectores de soporte con kernel lineal, optimizado para C, loss y max_iter
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.
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.
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.
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