Aplicación de técnicas de aprendizaje profundo al desarrollo de un bot conversacional para contribuír a la mejora de la salud mental
Proyecto desarrollado en el contexto de la Beca de Colaboración en departamentos universitarios para el curso académico 2022-2023 por el alumno Jose Ángel Pérez Garrido y tutorizado por Dra. Anália Maria Garcia Lourenço del Departamento de Informática de la Universidade de Vigo.
Esta aplicación proporciona las herramientas necesarias para la creación y evaluación de un bot conversacional basado en la recuperación de la mejor respuesta dentro de un corpus de información para una consulta del usuario mediante la similitud semántica.
La arquitectura del bot está conformada por dos modelos: un modelo Recuperador (BM25) y un modelo Puntuador (SBERT).
- S.O. Windows 10/Ubuntu 20.04 o superiores
- Intérprete Python 3. Probado en la versión 3.9.
- Base de Datos ElasticSearch. Probado en la versión 7.6.2.
- (Opcional) Base de Datos MySQL. Probado en la versión 10.4.25-MariaDB.
Deben seguirse los siguientes pasos para instalar las dependencias necesarias para la ejecución de la aplicación:
- Desplazarse hasta el directorio del proyecto
cd (`ruta_del_proyecto`)
- Crear un entorno virtual (de nombre venv)
python3 –m venv venv
- Activar el entorno virtual
Windows: venv/bin/activate.bat
Linux: source venv/bin/activate
- Instalar las dependencias incluídas en el archivo requirements.txt
pip install –r requirements.txt
Cuando finalice la instalación ya se pueden utilizar los distintos scripts que se encuentran dentro del directorio app y se ejecutan desde la consola de comandos situada na raíz da carpeta do proxecto. El formato del comando sería el siguiente:
python3 app/(`nombre_script`).py –o option (`–a args`)
Cada script posée un manual propio que se puede consultar con la opción --help. Por ejemplo, para chatbot.py el formato del comando sería:
python3 app/chatbot.py --help
Los scripts disponibles según el tipo de usuario son los seguintes:
chatbot.py
: contiene la lógica necesaria para la ejecución del bot conversacional. Carga el modelo de /file/chatbot_model. Los pesos del modelo entrenado están disponibles en HuggingFace.
database_scripts.py
: contiene la lógica necesaria para la comunicación con la base de datos.evaluate.py
: contiene la lógica necesaria para evaluar la eficiencia de los modelos.generate_training_data.py
: contiene la lógica necesaria para crear los datos de entrenamiento en el formato requerido por el modelo.prepare_dataset.py
: contiene la lógica necesaria para realizar la limpieza, transformación, construcción y adaptación de los datos para el caso de uso.test_cuda.py
: contiene la lógica para la comprobación de que CUDA está disponible y configurado correctamente en el equipo.train.py
: contiene la lógica para entrenar los modelos puntuadores.
- Crear el corpus (MentalFAQ) parseando los conjuntos de datos obtenidos de fuentes externas y añadir los casos de prueba mediante
prepare_dataset.py
(ya creado en /file/data)
python app/prepare_dataset.py -o create_dataset -d MentalFAQ
python app/prepare_dataset.py -o append_test_data -d MentalFAQ -q user_query
- Introducir los datos del corpus en la base de datos ElasticSearch mediante
database_scripts.py
python app/database_scripts.py -o ingest_db -d MentalFAQ
- Generar los datos de entrenamiento del modelo puntuador mediante
generate_training_data.py
python app/generate_training_data.py -o generate_hard -d MentalFAQ
python app/generate_training_data.py -o generate_gt -d MentalFAQ
- Entrenar el modelo BERT seleccionado con los mejores hiperparámetros mediante
train.py
# Obtener un CSV con los resultados de las pruebas
python app\train.py -o hyperparameter_tuning -d MentalFAQ -m bert-base-uncased,mental/mental-bert-base-uncased,mental/mental-roberta-base,publichealthsurveillance/PHS-BERT
# Entrenar el modelo
python app/train.py -o model_training -d MentalFAQ -m publichealthsurveillance/PHS-BERT -e 2 -b 32 -lr 3e-05
- Generar los resultados con los casos de prueba y calcular las métricas mediante
evaluate.py
python app/evaluate.py -o generate_topk -d MentalFAQ
python app/evaluate.py -o generate_BERT_results -d MentalFAQ
python app/evaluate.py -o generate_reranked_results -d MentalFAQ
python app/evaluate.py -o evaluation -d MentalFAQ
El proyecto se organiza de la siguinte manera:
- /app: directorio que almacena los scripts y todo el código de la aplicación organizado en diferentes subdirectorios:
- /chatbot: contiene las funciones necesarias para devolver una respuesta al usuario a partir de una entrada empleando el sistema de búsqueda semántica.
- /clean_data: contiene las funciones necesarias para realizar unha limpeza de los datos.
- /DB: contiene las funciones necesarias para realizar unha conexión con la Base de Datos.
- /model: contine las entidades para la comunicación con la Base de Datos mediante SQLAlchemy o ElasticSearch.
- /parsers: continne las clases para analizar, limpiar y extraer datos de diferentes fuentes de información.
- /semantic_search: contiene las funciones necesarias para entrenar, validar y probar el sistema de búsqueda semántica. (Ml-Recipes, s. f.)
- /shared: contiene las funciones comunes empleadas por diferentes módulos, como la lectura o escritura de ficheros.
- /transformation: contiene las funciones necesarias para preparar los conjuntos de datos.
- /view: contiene las funciones relacionadas con la vista que se presenta al usuario de la aplicación.
- /file: directorio que almacena información requerida para la ejecución de la aplicación organizada en diferentes subdirectorios:
- /chatbot_model: directorio que almacena los pesos del modelo puntuador (SBERT) seleccionado para el bot conversacional.
- /data: contiene los conjuntos de datos preparados mediante la aplicación.
- /datasets: contiene los conjuntos de datos extraídos de diferentes fuentes de datos.
- /test: contiene los casos de prueba para la evaluación de los modelos.
- /output: directorio donde se almacenan los modelos puntuadores entrenados mediante la aplicación junto con los resultados de su evaluación.
Ml-Recipes. (s. f.-b). GitHub - ML-Recipes/BERT-FAQ: Python-based toolkit for building and evaluating a transformer-based FAQ retrieval system. GitHub. https://github.com/ML-Recipes/BERT-FAQ
Gbgonzalez. (s. f.). GitHub - gbgonzalez/reddit_extraction. GitHub. https://github.com/gbgonzalez/reddit_extraction