Ce référentiel contient le code pour développer un chatbot qui peut prendre l'un des 16 types de personnalité Myers-Briggs .
Le chatbot est affiné pour chaque personnalité en utilisant des publications et des commentaires appartenant au subreddit correspondant (par exemple, R / INFJ pour le type InfJ ).
reddit_scraper.py contient le script pour gratter un subreddit donné. Pour l'exécuter, vous avez d'abord besoin d'une instance d'une base de données MySQL pour vous connecter. Vous avez également besoin de certains paramètres associés à votre compte Reddit et à la base de données MySQL: tous doivent être insérés dans un fichier config.py , en suivant le schéma de config.example.py .
Le script va d'abord charger tous les messages dans un tableau appelé posts , puis leurs commentaires dans un tableau appelé comments . Bien que la parallélisation ait été appliquée, cette deuxième partie va prendre plusieurs heures. C'est pourquoi, une fois que vous avez téléchargé les articles qui vous intéressent via le script principal (~ 20min), vous pouvez utiliser le script comments_scraper.py pour télécharger les commentaires associés. Si vous l'interrompez, la prochaine fois que vous l'exécutez, le script va commencer d'où vous êtes parti.
Pour former le modèle, j'ai d'abord rapporté des données dans le conversational dataset format , c'est-à-dire une table CSV avec la structure suivante.
| identifiant | réponse | contexte | Contexte / 0 | ... | contexte / n |
|---|---|---|---|---|---|
| S892NN | Je vais bien | C'est bon. Et toi? | Comment va la vie? | ... | Salut! |
Ici, le contexte / n représente le début de la conversation, allant à l'échange le plus récent (montré dans le contexte / 0 , contexte et réponse , qui est la dernière phrase de la conversation). Il est possible de modifier la cardinalité des contextes en remplaçant le paramètre NUMBER_OF_CONTEXTS dans le fichier config.py .
Le script create_conversational_dataset.py génère le CSV à partir des tables SQL créées pendant la phase de grattage, en les enregistrant dans un fichier de cornichon dans le dossier de données. Une conversation est construite soit à partir d'un post et l'un de ses commentaires directs, soit à partir d'un article, d'un commentaire et de sa chaîne de commentaires.
L'exécution du script est parallélisée, il écrit donc sur n différents CSV - n en fonction du paramètre NUMBER_OF_PROCESSES - enfin concaténé pour créer le fichier de cornichon résultant.
The Notebook training.py contient le réglage fin du modèle de langue DialoGPT-medium sur les données conversationnelles, et est principalement une adaptation du code que vous pouvez trouver dans this notebook .
L'exécution demo.py commencera la conversation.
Pour exécuter tout le code dans le respository, vous pouvez créer un environnement virtuel et exécuter les commandes suivantes.
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt