Basé sur le dépôt de code TC-Bot et sur les systèmes de dialogue neuronal à achèvement des tâches de bout en bout. Ce dépôt est une version simplifiée de TC-Bot, il fonctionne avec un niveau de précision similaire, bien qu'il ne soit pas directement comparable.
Cela montre comment former un simple agent DQN avec un apprentissage par renforcement profond en tant que chatbot orienté vers un objectif à l'aide d'un simple simulateur d'utilisateur. Le code est une version simplifiée de TC-Bot de MiuLab, la principale différence étant que ce code n'inclut pas de composants NLG ou NLU mais forme simplement le gestionnaire de dialogue. Les composants NL ne sont pas nécessaires pour comprendre comment un chatbot GO est formé avec DRL et ne sont donc pas implémentés.
Voici un diagramme tiré du document pour TC-Bot, et il est similaire au flux de dialogue utilisé dans ce projet autre que les composants LU et NLG :
En plus de la suppression de NL, des modifications ont été apportées aux conditions de réussite, à l'optimiseur d'agent DQN et à quelques autres modifications mineures. Par conséquent, la précision ne doit pas être comparée directement entre TC-Bot et ce dépôt.
La base de données contient des billets de cinéma, la même base de données utilisée dans TC-Bot. Les versions pickle et texte des données peuvent être vues dans le répertoire de données.
Une série de didacticiels en 5 parties qui décrit et parcourt ce code en détail peut être trouvée sur support ici !
Vous pouvez former un agent à partir de zéro avec python train.py
.
Dans constants.json, vous pouvez modifier les hyperparamètres, notamment "save_weights_file_path" et "load_weights_file_path" (les deux chemins relatifs) pour enregistrer et charger les poids respectivement. Par exemple, pour utiliser les poids pré-entraînés dans le dossier des poids, définissez la valeur de « load_weights_file_path » sur « weights/model.h5 ». Les poids des modèles keras cible (tar) et comportemental (beh) sont enregistrés chaque fois que le taux de réussite actuel atteint un nouveau sommet.
Vous pouvez également tester un agent avec python test.py
. Mais assurez-vous de charger les poids en définissant "load_weights_file_path" dans constants.json sur un chemin relatif avec à la fois le comportement et les poids cibles.
Toutes les constantes sont assez explicites, à l'exception de "vanille" sous agent qui signifie DQN (vrai) ou Double DQN (faux). La valeur par défaut est DQN vanille.
Remarque : Si vous obtenez une erreur de décapage lors du train ou du test, exécutez python pickle_converter.py
et cela devrait résoudre le problème.
Vous pouvez tester l'agent en saisissant vos propres actions en tant qu'utilisateur (au lieu d'utiliser un utilisateur SIM) en définissant "usersim" sous run dans constants.json sur false. Vous saisissez une action et un indicateur de réussite à chaque étape d'un épisode/conversation dans la console. Le format de l’entrée d’action est : créneaux d’intention/d’information/créneaux de demande.
Exemples d'entrées d'action :
De plus, la console demandera un indicateur indiquant si l'agent a réussi (autrement qu'après l'action initiale d'un épisode). Les entrées autorisées sont -1 pour la perte, 0 pour aucun résultat pour l'instant, 1 pour le succès.
Hyperparamètres utilisés de constants.json.
Tableau des épisodes (tous les 2000 sur 40000) par taux de réussite maximum d'une période/fréquence de train (tous les 100 épisodes) jusqu'à cet épisode :