Chatbot para salud mental
Actualizaciones (2024)
- Problemas corrigidos relacionados con los scripts de Python no funcionan debido a versiones y métodos de biblioteca anticuados
- Requisitos agregados.txt para una fácil instalación de dependencias
Antes de ejecutar los scripts, asegúrese de tener la versión de Python <= 3.8 instalada (preferiblemente Python 3.8; requerida para instalar algunas bibliotecas como TensorFlow).
Este proyecto se realizó para un proyecto de investigación bajo un profesor de mi universidad con un conjunto de datos autoportado. El conjunto de datos que utilizamos es confidencial; Por lo tanto, he usado un conjunto de datos Kaggle de muestra. Decidí hacer los guiones de código abierto para hacer una compilación de diferentes chatbots desde cero en Python ya que luché con tales recursos durante mi investigación.
Motivación detrás de este proyecto
En 2017, la Encuesta Nacional de Salud Mental informó que una de cada siete personas en la India sufría de trastornos mentales, incluidos la depresión y la ansiedad. La creciente conciencia de la salud mental lo ha convertido en una preocupación principal del desarrollo. Casi 150 millones de personas en la India necesitaban intervenciones, donde la clase baja y media enfrentaba más carga que las personas acomodadas. Este proyecto es un intento de hacer que la salud mental sea más accesible. Este agente de conversación puede complementarse con médicos para que sea más efectivo y fructífero.
Clasificaciones de chatbots
Los chatbots se pueden clasificar sobre la base de diferentes atributos -

Mi investigación se relacionó con los enfoques de diseño, a saber, basados en reglas, basados en la recuperación y basados en generación.
- Chatbots basados en reglas: un chatbot basado en reglas utiliza una asignación simple basada en reglas o coincidencia de patrones para seleccionar respuestas de conjuntos de respuestas predefinidas. Estos sistemas no producen ningún texto nuevo; En cambio, eligen una respuesta de una lista predeterminada.
- Chatbots basados en recuperación: un chatbot basado en recuperación utiliza conjuntos de aprendizaje automático como heurística para la evaluación. Similar a los chatbots basados en reglas, no generan nuevos textos.
- Chatbots basados en generación: los modelos generativos no dependen de respuestas predefinidas. Se les ocurre nuevas respuestas desde cero. Las técnicas de traducción automática se usan típicamente en modelos generativos, pero en lugar de traducir de un idioma a otro, "traducimos" de entrada a salida (respuesta). Los modelos generativos se utilizan para la creación porque aprenden desde cero.
Descripción general de los bots entrenados
El conjunto de datos fue recogido de Kaggle - Preguntas frecuentes de salud mental. Este conjunto de datos consta de 98 preguntas frecuentes sobre la salud mental. Consiste en 3 columnas: cuestionidad, preguntas y respuestas.
Tenga en cuenta que para entrenar el chatbot de recuperación, el archivo CSV se convirtió manualmente en un archivo JSON . Dado que este no es el conjunto de datos original utilizado para la investigación (leer introducción), he usado solo las primeras 20 filas para capacitar al modelo.
El repositorio consta de tres cuadernos para los tres tipos de chatbots.
Para el TF-IDF basado en reglas se utilizó con el tokenizador de NLTK para el preprocesamiento de datos. Los datos procesados se probaron con el resultado esperado y se utilizó la similitud de coseno para la evaluación.
Para la recuperación, se capacitaron varios modelos de aprendizaje automático y de aprendizaje profundo,
- RNN de vainilla
- LSTM
- BI - LSTM
- Gru
- Los modelos de recuperación de CNN están entrenados en archivos JSON. Para todos los modelos anteriores, se utilizó la regularización y se basó en las precisiones y pérdidas de entrenamiento y validación, el mejor modelo se mantuvo para las comparaciones finales. Se observó que la arquitectura CNN dio los mejores resultados . El modelo consistió en 3 capas: red neuronal convolucional (CNN) + una capa de incrustación + y una capa totalmente conectada.
Para los chatbots basados en generación, se usó NLP ya que NLP permite a los chatbots aprender e imitar los patrones y estilos de la conversación humana . Te da la sensación de que estás hablando con un humano, no un robot. Mapea la entrada del usuario a una intención, con el objetivo de clasificar el mensaje para una posible respuesta predefinida apropiada.
- Un modelo de codificador codificador fue entrenado en el archivo CSV. Endoder-Decoder es un modelo SEQ2SEQ, también llamado Modelo de Decoder Coder utiliza memoria a largo plazo, LSTM para la generación de texto desde el corpus de entrenamiento.
- ¿Qué hace el modelo SEQ2SEQ o Decoder Decoder en palabras simples? Predice una palabra dada en la entrada del usuario, y luego se predice cada una de las siguientes palabras utilizando la probabilidad de probabilidad de que ocurra esa palabra.
JSON vs. CSV
Durante este proyecto, la mayor confusión que tuve fue por qué el chatbot usó un archivo JSON en lugar de CSV para el modelo basado en la recuperación. He enumerado algunos puntos que hacen la comparación entre los dos tipos de archivos:
- JSON almacena datos de manera jerárquica, que es mejor para un chatbot basado en la recuperación, dado que el chatbot requeriría etiquetas y contextos.
- Un chatbot basado en la recuperación está entrenado para dar la mejor respuesta basada en un grupo de respuestas predefinidas. Estas respuestas predefinidas son finitas en número. Se debe proporcionar una etiqueta para la asignación de entrada a salida. En pocas palabras, la etiqueta proporcionada identifica la entrada dada por el usuario (el contexto). Según la mejor etiqueta que se predice, se muestra al usuario una de las respuestas predefinidas . Por lo tanto, almacenar este tipo de datos en un archivo JSON es más fácil debido a su compacidad y estructura jerárquica.
- Se ha utilizado un archivo CSV para almacenar los datos del chatbot generativo. Un chatbot generativo no requiere etiquetas para hacer predicciones . Estos datos son más fáciles de almacenar en un archivo CSV, ya que necesitamos solo dos columnas: texto de entrada y texto de salida. Agregar o eliminar datos sería más fácil en este caso en comparación con un archivo JSON.
Objetivos futuros
Quiero investigar más las posibilidades del chatbot basado en generación. El modelo actual de codificador del codificador no puede capturar todas las dependencias en la capa del decodificador debido a la naturaleza compacta de LSTM. Se pueden agregar capas de atención después de las capas LSTM para decodificar cada salida dinámicamente.