Este repositorio contiene el código para desarrollar un chatbot que pueda tomar uno de los 16 tipos de personalidad de Myers-Briggs .
El chatbot está ajustado para cada personalidad utilizando publicaciones y comentarios que pertenecen al subreddit correspondiente (por ejemplo, R/INFJ para el tipo INFJ ).
reddit_scraper.py contiene el script para raspar un subreddit dado. Para ejecutarlo, primero necesita una instancia de una base de datos MySQL para conectarse. También necesita algunos parámetros asociados a su cuenta Reddit y a la base de datos MySQL: todo debe insertarse en un archivo config.py , siguiendo el esquema de config.example.py .
El guión primero cargará todas las publicaciones en una tabla llamada posts , y luego sus comentarios en una tabla llamaron comments . Aunque se ha aplicado la paralelización, esta segunda parte tomará muchas horas. Es por eso que, una vez que haya descargado las publicaciones que le interesa a través del script principal (~ 20 minutos), puede usar el script comments_scraper.py para descargar los comentarios asociados. Si lo interrumpe, la próxima vez que lo ejecute, el guión comenzará desde donde se fue.
Para entrenar el modelo, primero informé datos en el conversational dataset format , es decir, una tabla CSV con la siguiente estructura.
| identificación | respuesta | contexto | contexto/0 | ... | contexto/n |
|---|---|---|---|---|---|
| s892nn | Estoy bien | Está bien. ¿Qué pasa contigo? | ¿Cómo es la vida? | ... | ¡Hola! |
Aquí, el contexto/n representa el comienzo de la conversación, yendo al intercambio más reciente (mostrado en contexto/0 , contexto y respuesta , que es la última oración en la conversación). Es posible cambiar la cardinalidad de los contextos anulando el parámetro NUMBER_OF_CONTEXTS en el archivo config.py .
El script create_conversational_dataset.py genera el CSV que comienza desde las tablas SQL creadas durante la fase de raspado, guardándolo en un archivo de encurtido en la carpeta de datos. Una conversación se construye a partir de una publicación y uno de sus comentarios directos o desde una publicación, un comentario y su cadena de comentarios.
La ejecución del script está paralelo, por lo que se escribe en n diferentes csvs, n dependiendo del parámetro NUMBER_OF_PROCESSES , finalmente concatenado para crear el archivo de pepinillo resultante.
El Notebook training.py contiene el ajuste del modelo de lenguaje DialoGPT-medium en los datos de conversación, y es principalmente una adaptación del código que puede encontrar en this notebook .
Ejecutar demo.py comenzará la conversación.
Para ejecutar todo el código en el Respository, puede crear un entorno virtual y ejecutar los siguientes comandos.
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt