Proyecto de inteligencia artificial para la detección de ideas suicidas mediante técnicas de procesamiento de lenguaje natural.
git clone https://github.com/Marta-munoz/TFG_Marta_Munoz_Martinez.git
O descarga el proyecto directamente y navega a la carpeta del proyecto.
El proyecto usa Hatch como gestor de entornos y construcción. Instala Hatch:
pip install hatch
Crea el entorno de desarrollo que instalará todas las dependencias automáticamente:
hatch env create
Para trabajar en el proyecto, activa el entorno de desarrollo:
hatch shell dev
Esto instalará automáticamente todas las dependencias principales.
pip install transformers torch evaluate accelerate
Codigos_TFG_Marta/
├── data/ # Almacenamiento de conjuntos de datos y recursos
│ ├── raw/ # Datos originales e inmutables (descargados/externos)
│ │ ├── spanish_suicide_intent_dataset/ # Dataset PrevenIA original de Hugging Face
│ │ ├── suicidio_notacion.csv # Dataset original de Valeriano et al. (2020)
│ │ ├── stopwords.txt # Stopwords de Valeriano et al.
│ │ ├── embeddings-m-model.bin # Modelo de embeddings Word2Vec en español (SBWCE)
│ │ ├── embeddings/ # Carpeta con embeddings preentrenados adicionales
│ │ │ ├── medical_embeddings.zip # Archivo zip original de embeddings médicos en español (v2.0)
│ │ │ └── medical_embeddings/ # Embeddings médicos descomprimidos (Scielo, Wikipedia, etc.)
│ │ ├── NRC-Emotion-Lexicon-ForVariousLanguages.txt # Lexicón de emociones
│ │ ├── spanish_suicide_intent_train.csv # Partición de train de PrevenIA
│ │ ├── spanish_suicide_intent_val.csv # Partición de dev/validation de PrevenIA
│ │ └── spanish_suicide_intent_test.csv # Partición de test de PrevenIA
│ └── interim/ # Datos intermedios y preprocesados
│ ├── dev_suicidio_notacion.csv # Partición de desarrollo de Valeriano preprocesada
│ ├── dev_suicidio_notacion_raw.csv # Partición de desarrollo de Valeriano sin preprocesar
│ ├── test_suicidio_notacion.csv # Partición de prueba de Valeriano preprocesada
│ ├── test_suicidio_notacion_raw.csv # Partición de prueba de Valeriano sin preprocesar
│ ├── train_suicidio_notacion.csv # Partición de entrenamiento de Valeriano preprocesada
│ ├── train_suicidio_notacion_raw.csv # Partición de entrenamiento de Valeriano sin preprocesar
│ ├── suicidio_notacion_balanced.csv # Dataset de Valeriano balanceado
│ ├── train_suicidio_augmented.csv # Dataset de entrenamiento de Valeriano aumentado (paráfrasis con LLM)
│ ├── train_suicidio_augmented_sintetico.csv # Dataset de entrenamiento de Valeriano aumentado (sintético con LLM)
│ ├── temp_aug_clase_0.csv # Fragmento temporal de aumento por paráfrasis (clase 0)
│ ├── temp_aug_clase_1.csv # Fragmento temporal de aumento por paráfrasis (clase 1)
│ ├── temp_aug_sintetico_clase_0.csv # Fragmento temporal de aumento sintético (clase 0)
│ ├── temp_aug_sintetico_clase_1.csv # Fragmento temporal de aumento sintético (clase 1)
│ └── lexico_suicida.txt # Lexicón de palabras del dominio de suicidio adaptado
├── models/ # Modelos entrenados y guardados para su uso
│ ├── beto_finetuned_raw/ # BETO entrenado en texto crudo (sin preprocesar)
│ ├── robertuito_finetuned_raw/ # RoBERTuito entrenado en texto crudo (sin preprocesar)
│ ├── robertuito_parafrasis/ # RoBERTuito reentrenado con aumento por paráfrasis (usado en la demo web)
│ ├── robertuito_sintetico/ # RoBERTuito reentrenado con aumento sintético
│ ├── bin_vectorizer.joblib # Vectorizador binario serializado (base)
│ ├── bin_RL.joblib # Regresión Logística con pesado binario (base, usado en la demo web)
│ ├── bin_SVM.joblib # SVM con pesado binario (base)
│ ├── bin_vectorizer_parafrasis.joblib # Vectorizador binario (aumento por paráfrasis)
│ ├── bin_RL_parafrasis.joblib # Regresión Logística con pesado binario (aumento por paráfrasis)
│ ├── bin_SVM_parafrasis.joblib # SVM con pesado binario (aumento por paráfrasis)
│ ├── bin_vectorizer_sintetico.joblib # Vectorizador binario (aumento sintético)
│ ├── bin_RL_sintetico.joblib # Regresión Logística con pesado binario (aumento sintético)
│ ├── bin_SVM_sintetico.joblib # SVM con pesado binario (aumento sintético)
│ ├── tfidf_model.joblib # Vectorizador TF-IDF serializado (estándar)
│ ├── tfidf_RL.joblib # Regresión Logística entrenada con TF-IDF
│ ├── tfidf_SVM.joblib # SVM entrenada con TF-IDF
│ ├── tfidf_use_idf_model.joblib # Vectorizador TF-IDF con uso de IDF serializado
│ ├── tfidf_RL_use_idf.joblib # Regresión Logística entrenada con TF-IDF (con IDF)
│ ├── tfidf_SVM_use_idf.joblib # SVM entrenada con TF-IDF (con IDF)
│ └── w2v_*.joblib # Variantes de Word2Vec con embeddings biomédicos (Wikipedia, SciELO, etc.)
├── notebooks/ # Jupyter Notebooks para experimentación, análisis y entrenamiento
│ ├── prevenia_descriptive_analysis.ipynb # Análisis exploratorio del dataset PrevenIA
│ ├── valeriano_descriptive_analysis.ipynb # Análisis exploratorio del dataset de Valeriano et al.
│ ├── keywords_system.ipynb # Evaluación del baseline basado en keywords
│ ├── replicar_valeriano.ipynb # Réplica de Valeriano et al. y experimentación de clasificadores clásicos con diversas representaciones
│ ├── clasificacion_aleatoria.ipynb # Baseline de clasificación aleatoria
│ ├── data_augmentation_llm_parafrasis.ipynb # Generación de paráfrasis con la API de Gemini
│ ├── data_augmentation_llm_sintetico.ipynb # Generación de ejemplos sintéticos con la API de Gemini
│ ├── zero_shot_llm_raw.ipynb # Clasificación zero-shot con LLMs
│ ├── zero_shot_llm_temperatura0.ipynb # Clasificación zero-shot con LLMs con temperatura 0
│ ├── few_shot_llm_raw.ipynb # Clasificación few-shot con LLMs
│ ├── few_shot_llm_temperatura0.ipynb # Clasificación few-shot con LLMs con temperatura 0
│ ├── modelo_clasico_data_augmentation_*.ipynb # Re-entrenamiento de SVM/Regresión Logística con aumento de datos
│ ├── beto_raw.ipynb # Ajuste fino inicial de BETO
│ ├── robertuito_raw.ipynb # Ajuste fino inicial de RoBERTuito
│ ├── robertuito_evaluar_test.ipynb # Evaluación en test de RoBERTuito con aumento mediante paráfrasis
│ ├── analisis_comparativo.ipynb # Notebook comparativo global de todos los resultados
│ └── analisis_curva_roc.ipynb # Notebook para visualización y comparación de curvas ROC y AUC
├── reports/ # Reportes generados
│ ├── experiments_results.csv # Tabla consolidada donde se registran los resultados de los experimentos
│ └── tabla_predicciones.csv # Predicciones detalladas de los modelos para análisis cualitativo de errores
├── src/ # Código fuente empaquetado del proyecto
│ ├── __init__.py
│ ├── analyze.py # Lógica de análisis de métricas y registro de experimentos
│ ├── app.py # Aplicación web Flask e interfaz gráfica de demostración
│ ├── augmentation.py # Funciones y flujos de aumento de datos con LLM (paráfrasis/sintético)
│ ├── data_keywords.py # Preparación de datos para el baseline de keywords
│ ├── data_ml.py # Pipeline de extracción de características y particiones para modelos clásicos
│ ├── download_prevenia.py # Script de descarga y guardado local del dataset PrevenIA
│ ├── download_valeriano.py # Script de descarga y guardado local del dataset Valeriano
│ ├── keywords_logic.py # Lógica para la clasificación por palabras clave
│ ├── llm_logic.py # Módulo de interacción con la API de Gemini (Google Generative AI)
│ ├── logger.py # Sistema global de logging del proyecto
│ ├── ml_utils.py # Funciones auxiliares para modelos clásicos (embeddings, carga de W2V, etc.)
│ ├── preprocessing.py # Funciones de normalización de textos (limpieza, stopwords, lematización)
│ ├── random_baseline.py # Implementación matemática de clasificación aleatoria
│ ├── templates/ # Vistas y plantillas HTML para la aplicación Flask
│ └── utils/ # Utilidades adicionales de bajo nivel (logger simplificado)
├── pyproject.toml # Configuración general y declaración de dependencias gestionadas por Hatch
└── README.md # Documentación del proyecto (este archivo)
El proyecto utiliza el dataset PrevenIA/spanish-suicide-intent. Antes de ejecutar cualquier análisis, debes descargar y preparar los datos iniciales:
hatch run dev:download-prevenia
También se utiliza el dataset suicidio-notacion de Valeriano et al. 2020. Antes de ejecutar cualquier análisis, debes descargar y preparar los datos iniciales:
hatch run dev:download-valeriano
Sigue estos pasos para ejecutar los notebooks en el entorno del proyecto:
hatch shell dev
Jupyter ya debería estar instalado si seguiste los pasos de instalación. Si no, instálalo con:
pip install jupyter jupyterlab
Desde la raíz del proyecto, ejecuta:
hatch run dev:install-notebook-kernel
notebooks/valeriano_descriptive_analysis.ipynb)Shift + Enter o usando el botón "Run"Para iniciar el servidor web Flask:
hatch run dev:run-app
La aplicación estará disponible en http://127.0.0.1:5000/.
El proyecto gestiona sus entornos y dependencias mediante Hatch. A continuación se detallan las librerías fundamentales requeridas para el desarrollo del proyecto, clasificadas por su ámbito de uso:
| Librería | Propósito |
|---|---|
numpy | Operaciones matemáticas y computación científica. |
pandas | Estructuras de datos para manipulación y análisis de tablas. |
scikit-learn | Extracción de características (TF-IDF, Binario), modelos ML clásicos (SVM, Regresión Logística) y métricas de evaluación. |
spacy | Procesamiento lingüístico avanzado (lematización, tokenización...). |
gensim | Carga y manejo de los vectores de embeddings en español. |
joblib | Guardado y persistencia de modelos clásicos y vectorizadores. |
[!NOTE] Estas librerías se utilizan para la inicialización, ajuste fino (fine-tuning) y evaluación de los modelos basados en Transformers (BETO y RoBERTuito).
| Librería | Propósito |
|---|---|
torch | Framework principal de deep learning para el entrenamiento y evaluación de modelos de redes neuronales. |
transformers | Acceso a arquitecturas preentrenadas de procesamiento del lenguaje natural (Hugging Face) como BETO y RoBERTuito. |
evaluate | Librería de Hugging Face optimizada para el cálculo y comparación de métricas de evaluación. |
datasets | Conversión de DataFrames de Pandas a formatos de datos optimizados para el entrenamiento de Transformers y descarga de datasets desde Hugging Face Hub. |
| Librería | Propósito |
|---|---|
google-generativeai | SDK oficial de Google para la interacción con los modelos Gemini, utilizado para la generación de paráfrasis y textos sintéticos. |
python-dotenv | Gestión y lectura de variables de entorno (como la API key de Gemini) desde archivos .env. |
| Librería | Propósito |
|---|---|
flask | Framework ligero para servir la interfaz web y la aplicación interactiva de demostración. |
matplotlib | Creación de gráficos y visualizaciones (curvas ROC, diagramas de distribución, etc.). |
jupyter / jupyterlab | Entorno interactivo y cuadernos de desarrollo de experimentos. |
ipykernel | Soporte para el kernel del entorno virtual del proyecto dentro de Jupyter. |
Para mantener un orden en los resultados, se ha implementado un sistema de log automatizado.
Cada vez que se ejecuta un experimento, se registra automáticamente en un archivo experiments_results.csv.
Proyecto de inteligencia artificial para la detección de ideas suicidas mediante técnicas de procesamiento de lenguaje natural.
git clone https://github.com/Marta-munoz/TFG_Marta_Munoz_Martinez.git
O descarga el proyecto directamente y navega a la carpeta del proyecto.
El proyecto usa Hatch como gestor de entornos y construcción. Instala Hatch:
pip install hatch
Crea el entorno de desarrollo que instalará todas las dependencias automáticamente:
hatch env create
Para trabajar en el proyecto, activa el entorno de desarrollo:
hatch shell dev
Esto instalará automáticamente todas las dependencias principales.
pip install transformers torch evaluate accelerate
Codigos_TFG_Marta/
├── data/ # Almacenamiento de conjuntos de datos y recursos
│ ├── raw/ # Datos originales e inmutables (descargados/externos)
│ │ ├── spanish_suicide_intent_dataset/ # Dataset PrevenIA original de Hugging Face
│ │ ├── suicidio_notacion.csv # Dataset original de Valeriano et al. (2020)
│ │ ├── stopwords.txt # Stopwords de Valeriano et al.
│ │ ├── embeddings-m-model.bin # Modelo de embeddings Word2Vec en español (SBWCE)
│ │ ├── embeddings/ # Carpeta con embeddings preentrenados adicionales
│ │ │ ├── medical_embeddings.zip # Archivo zip original de embeddings médicos en español (v2.0)
│ │ │ └── medical_embeddings/ # Embeddings médicos descomprimidos (Scielo, Wikipedia, etc.)
│ │ ├── NRC-Emotion-Lexicon-ForVariousLanguages.txt # Lexicón de emociones
│ │ ├── spanish_suicide_intent_train.csv # Partición de train de PrevenIA
│ │ ├── spanish_suicide_intent_val.csv # Partición de dev/validation de PrevenIA
│ │ └── spanish_suicide_intent_test.csv # Partición de test de PrevenIA
│ └── interim/ # Datos intermedios y preprocesados
│ ├── dev_suicidio_notacion.csv # Partición de desarrollo de Valeriano preprocesada
│ ├── dev_suicidio_notacion_raw.csv # Partición de desarrollo de Valeriano sin preprocesar
│ ├── test_suicidio_notacion.csv # Partición de prueba de Valeriano preprocesada
│ ├── test_suicidio_notacion_raw.csv # Partición de prueba de Valeriano sin preprocesar
│ ├── train_suicidio_notacion.csv # Partición de entrenamiento de Valeriano preprocesada
│ ├── train_suicidio_notacion_raw.csv # Partición de entrenamiento de Valeriano sin preprocesar
│ ├── suicidio_notacion_balanced.csv # Dataset de Valeriano balanceado
│ ├── train_suicidio_augmented.csv # Dataset de entrenamiento de Valeriano aumentado (paráfrasis con LLM)
│ ├── train_suicidio_augmented_sintetico.csv # Dataset de entrenamiento de Valeriano aumentado (sintético con LLM)
│ ├── temp_aug_clase_0.csv # Fragmento temporal de aumento por paráfrasis (clase 0)
│ ├── temp_aug_clase_1.csv # Fragmento temporal de aumento por paráfrasis (clase 1)
│ ├── temp_aug_sintetico_clase_0.csv # Fragmento temporal de aumento sintético (clase 0)
│ ├── temp_aug_sintetico_clase_1.csv # Fragmento temporal de aumento sintético (clase 1)
│ └── lexico_suicida.txt # Lexicón de palabras del dominio de suicidio adaptado
├── models/ # Modelos entrenados y guardados para su uso
│ ├── beto_finetuned_raw/ # BETO entrenado en texto crudo (sin preprocesar)
│ ├── robertuito_finetuned_raw/ # RoBERTuito entrenado en texto crudo (sin preprocesar)
│ ├── robertuito_parafrasis/ # RoBERTuito reentrenado con aumento por paráfrasis (usado en la demo web)
│ ├── robertuito_sintetico/ # RoBERTuito reentrenado con aumento sintético
│ ├── bin_vectorizer.joblib # Vectorizador binario serializado (base)
│ ├── bin_RL.joblib # Regresión Logística con pesado binario (base, usado en la demo web)
│ ├── bin_SVM.joblib # SVM con pesado binario (base)
│ ├── bin_vectorizer_parafrasis.joblib # Vectorizador binario (aumento por paráfrasis)
│ ├── bin_RL_parafrasis.joblib # Regresión Logística con pesado binario (aumento por paráfrasis)
│ ├── bin_SVM_parafrasis.joblib # SVM con pesado binario (aumento por paráfrasis)
│ ├── bin_vectorizer_sintetico.joblib # Vectorizador binario (aumento sintético)
│ ├── bin_RL_sintetico.joblib # Regresión Logística con pesado binario (aumento sintético)
│ ├── bin_SVM_sintetico.joblib # SVM con pesado binario (aumento sintético)
│ ├── tfidf_model.joblib # Vectorizador TF-IDF serializado (estándar)
│ ├── tfidf_RL.joblib # Regresión Logística entrenada con TF-IDF
│ ├── tfidf_SVM.joblib # SVM entrenada con TF-IDF
│ ├── tfidf_use_idf_model.joblib # Vectorizador TF-IDF con uso de IDF serializado
│ ├── tfidf_RL_use_idf.joblib # Regresión Logística entrenada con TF-IDF (con IDF)
│ ├── tfidf_SVM_use_idf.joblib # SVM entrenada con TF-IDF (con IDF)
│ └── w2v_*.joblib # Variantes de Word2Vec con embeddings biomédicos (Wikipedia, SciELO, etc.)
├── notebooks/ # Jupyter Notebooks para experimentación, análisis y entrenamiento
│ ├── prevenia_descriptive_analysis.ipynb # Análisis exploratorio del dataset PrevenIA
│ ├── valeriano_descriptive_analysis.ipynb # Análisis exploratorio del dataset de Valeriano et al.
│ ├── keywords_system.ipynb # Evaluación del baseline basado en keywords
│ ├── replicar_valeriano.ipynb # Réplica de Valeriano et al. y experimentación de clasificadores clásicos con diversas representaciones
│ ├── clasificacion_aleatoria.ipynb # Baseline de clasificación aleatoria
│ ├── data_augmentation_llm_parafrasis.ipynb # Generación de paráfrasis con la API de Gemini
│ ├── data_augmentation_llm_sintetico.ipynb # Generación de ejemplos sintéticos con la API de Gemini
│ ├── zero_shot_llm_raw.ipynb # Clasificación zero-shot con LLMs
│ ├── zero_shot_llm_temperatura0.ipynb # Clasificación zero-shot con LLMs con temperatura 0
│ ├── few_shot_llm_raw.ipynb # Clasificación few-shot con LLMs
│ ├── few_shot_llm_temperatura0.ipynb # Clasificación few-shot con LLMs con temperatura 0
│ ├── modelo_clasico_data_augmentation_*.ipynb # Re-entrenamiento de SVM/Regresión Logística con aumento de datos
│ ├── beto_raw.ipynb # Ajuste fino inicial de BETO
│ ├── robertuito_raw.ipynb # Ajuste fino inicial de RoBERTuito
│ ├── robertuito_evaluar_test.ipynb # Evaluación en test de RoBERTuito con aumento mediante paráfrasis
│ ├── analisis_comparativo.ipynb # Notebook comparativo global de todos los resultados
│ └── analisis_curva_roc.ipynb # Notebook para visualización y comparación de curvas ROC y AUC
├── reports/ # Reportes generados
│ ├── experiments_results.csv # Tabla consolidada donde se registran los resultados de los experimentos
│ └── tabla_predicciones.csv # Predicciones detalladas de los modelos para análisis cualitativo de errores
├── src/ # Código fuente empaquetado del proyecto
│ ├── __init__.py
│ ├── analyze.py # Lógica de análisis de métricas y registro de experimentos
│ ├── app.py # Aplicación web Flask e interfaz gráfica de demostración
│ ├── augmentation.py # Funciones y flujos de aumento de datos con LLM (paráfrasis/sintético)
│ ├── data_keywords.py # Preparación de datos para el baseline de keywords
│ ├── data_ml.py # Pipeline de extracción de características y particiones para modelos clásicos
│ ├── download_prevenia.py # Script de descarga y guardado local del dataset PrevenIA
│ ├── download_valeriano.py # Script de descarga y guardado local del dataset Valeriano
│ ├── keywords_logic.py # Lógica para la clasificación por palabras clave
│ ├── llm_logic.py # Módulo de interacción con la API de Gemini (Google Generative AI)
│ ├── logger.py # Sistema global de logging del proyecto
│ ├── ml_utils.py # Funciones auxiliares para modelos clásicos (embeddings, carga de W2V, etc.)
│ ├── preprocessing.py # Funciones de normalización de textos (limpieza, stopwords, lematización)
│ ├── random_baseline.py # Implementación matemática de clasificación aleatoria
│ ├── templates/ # Vistas y plantillas HTML para la aplicación Flask
│ └── utils/ # Utilidades adicionales de bajo nivel (logger simplificado)
├── pyproject.toml # Configuración general y declaración de dependencias gestionadas por Hatch
└── README.md # Documentación del proyecto (este archivo)
El proyecto utiliza el dataset PrevenIA/spanish-suicide-intent. Antes de ejecutar cualquier análisis, debes descargar y preparar los datos iniciales:
hatch run dev:download-prevenia
También se utiliza el dataset suicidio-notacion de Valeriano et al. 2020. Antes de ejecutar cualquier análisis, debes descargar y preparar los datos iniciales:
hatch run dev:download-valeriano
Sigue estos pasos para ejecutar los notebooks en el entorno del proyecto:
hatch shell dev
Jupyter ya debería estar instalado si seguiste los pasos de instalación. Si no, instálalo con:
pip install jupyter jupyterlab
Desde la raíz del proyecto, ejecuta:
hatch run dev:install-notebook-kernel
notebooks/valeriano_descriptive_analysis.ipynb)Shift + Enter o usando el botón "Run"Para iniciar el servidor web Flask:
hatch run dev:run-app
La aplicación estará disponible en http://127.0.0.1:5000/.
El proyecto gestiona sus entornos y dependencias mediante Hatch. A continuación se detallan las librerías fundamentales requeridas para el desarrollo del proyecto, clasificadas por su ámbito de uso:
| Librería | Propósito |
|---|---|
numpy | Operaciones matemáticas y computación científica. |
pandas | Estructuras de datos para manipulación y análisis de tablas. |
scikit-learn | Extracción de características (TF-IDF, Binario), modelos ML clásicos (SVM, Regresión Logística) y métricas de evaluación. |
spacy | Procesamiento lingüístico avanzado (lematización, tokenización...). |
gensim | Carga y manejo de los vectores de embeddings en español. |
joblib | Guardado y persistencia de modelos clásicos y vectorizadores. |
[!NOTE] Estas librerías se utilizan para la inicialización, ajuste fino (fine-tuning) y evaluación de los modelos basados en Transformers (BETO y RoBERTuito).
| Librería | Propósito |
|---|---|
torch | Framework principal de deep learning para el entrenamiento y evaluación de modelos de redes neuronales. |
transformers | Acceso a arquitecturas preentrenadas de procesamiento del lenguaje natural (Hugging Face) como BETO y RoBERTuito. |
evaluate | Librería de Hugging Face optimizada para el cálculo y comparación de métricas de evaluación. |
datasets | Conversión de DataFrames de Pandas a formatos de datos optimizados para el entrenamiento de Transformers y descarga de datasets desde Hugging Face Hub. |
| Librería | Propósito |
|---|---|
google-generativeai | SDK oficial de Google para la interacción con los modelos Gemini, utilizado para la generación de paráfrasis y textos sintéticos. |
python-dotenv | Gestión y lectura de variables de entorno (como la API key de Gemini) desde archivos .env. |
| Librería | Propósito |
|---|---|
flask | Framework ligero para servir la interfaz web y la aplicación interactiva de demostración. |
matplotlib | Creación de gráficos y visualizaciones (curvas ROC, diagramas de distribución, etc.). |
jupyter / jupyterlab | Entorno interactivo y cuadernos de desarrollo de experimentos. |
ipykernel | Soporte para el kernel del entorno virtual del proyecto dentro de Jupyter. |
Para mantener un orden en los resultados, se ha implementado un sistema de log automatizado.
Cada vez que se ejecuta un experimento, se registra automáticamente en un archivo experiments_results.csv.