Comment former un chatbot


10

Je voulais commencer à expérimenter avec le réseau neuronal et comme problème de jouet, je souhaitais en former un à discuter, c'est-à-dire implémenter un bot de discussion comme cleverbot. Pas si intelligent de toute façon.

J'ai cherché de la documentation et j'ai trouvé de nombreux tutoriels sur les tâches générales, mais peu sur ce sujet spécifique. Celui que j'ai trouvé vient d'exposer les résultats sans donner un aperçu de la mise en œuvre. Ceux qui l'ont fait, l'ont fait assez peu profond (la page de documentation tensorflow sur seq2seq manque à mon humble avis).

Maintenant, je sens que j'ai peut-être plus ou moins compris le principe, mais je ne suis pas sûr et je ne sais même pas comment commencer. Je vais donc expliquer comment je traiterais le problème et j'aimerais avoir un retour sur cette solution, me dire où je me trompe et avoir éventuellement un lien vers des explications détaillées et des connaissances pratiques sur le processus.

  1. L'ensemble de données que j'utiliserai pour la tâche est le vidage de tout mon historique de chat Facebook et WhatsApp. Je ne sais pas quelle sera sa taille mais peut-être pas encore assez grande. La langue cible n'est pas l'anglais, donc je ne sais pas où rassembler rapidement des échantillons de conversation significatifs.

  2. Je vais générer un vecteur de pensée à partir de chaque phrase. Je ne sais toujours pas comment; J'ai trouvé un bel exemple pour word2vec sur le site Web deeplearning4j, mais aucun pour les phrases. J'ai compris comment les vecteurs de mots sont construits et pourquoi, mais je n'ai pas pu trouver d'explication exhaustive pour les vecteurs de phrases.

  3. En utilisant des vecteurs de pensée comme entrée et sortie, je vais entraîner le réseau neuronal. Je ne sais pas combien de couches il devrait avoir, et lesquelles doivent être des couches lstm.

  4. Ensuite, il devrait y avoir un autre réseau de neurones capable de transformer un vecteur de pensée en une séquence de caractères composant une phrase. J'ai lu que je devrais utiliser le rembourrage pour compenser les différentes longueurs de phrase, mais je ne sais pas comment coder les caractères (les points de code sont-ils suffisants?).

Réponses:


7

Je recommanderais de commencer par lire cet article de blog . Vous pouvez probablement cannibaliser le code pour créer un RNN qui prend une instruction d'un dialogue, puis procède à la sortie de la réponse à cette instruction.

Ce serait la version facile de votre projet, le tout sans vecteurs de mots et vecteurs de pensée. Vous entrez simplement des caractères, donc les fautes de frappe n'ont pas besoin de vous concerner.

La prochaine étape plus complexe serait de saisir des vecteurs de mots au lieu de caractères. Cela vous permettrait de généraliser à des mots qui ne font pas partie de vos données d'entraînement. Et ce n'est probablement encore qu'une modification mineure du code.

Si vous insistez pour utiliser des vecteurs de pensée, vous devriez commencer à lire sur la traduction NN . Et essayez probablement d'obtenir un réseau de codeurs pré-formé. Ou préparez-le vous-même sur un grand corpus de traduction pour votre langue.

Avec votre petit ensemble d'entraînement, le mieux que vous puissiez faire est probablement de suréquiper massivement jusqu'à ce que votre système recrée vos données d'entraînement textuellement. L'utilisation de vecteurs de mots permettra à votre système de donner la même réponse à "J'ai battu le chat aujourd'hui". que vous avez donné dans les données de formation à "J'ai donné un coup de pied au chien hier."

Je ne suis pas sûr que les vecteurs de pensée feront une grande différence. Si vous obtenez le décodeur pour apprendre du tout.


J'ai déjà lu le premier article il y a quelque temps et je pense que les personnages ne sont pas au bon niveau d'abstraction. Je n'ai pas pensé à utiliser des vecteurs de mots un par un, mais je suppose que c'est aussi une manière intéressante et moins complexe. Je vais lire le journal, qui est probablement ce que je recherchais ...
Totem

J'ai trouvé un noyau de bot à utiliser ... Mais je suis bloqué sur la génération de texte. ai.stackexchange.com/questions/5963/… Ce que je me demande, c'est malgré les vecteurs et le taux d'apprentissage, il ne fonctionne toujours pas comme il se doit ... Je crains que ce ne soit une lacune de la bibliothèque que je suis en utilisant, mais je ne pense pas que cela pourrait être possible pour une taille de couche de 300 ... Ou la quantité de formation requise est-elle liée à la taille de la couche? Toute aide serait appréciée. Veuillez noter la bibliothèque utilisée.
FreezePhoenix

0

Selon votre concept de projet, pour commencer, je vous demanderais d'appliquer certaines techniques de développement pilotées par les tests. Tout d'abord, essayez de créer une base de données de plus petite taille que vous pouvez utiliser pour gérer une petite quantité de jeu de données, ce qui peut apporter l'amélioration souhaitée.

Cela dit, utilisez cette base de données pour créer un arbre organisé en ligne avec vos données, en tant que nœuds.Alors, si un bot commence à générer des commentaires, à partir de la base de données, marqués avec des points de données de votre ensemble de données spécifié. au nœud suivant dans l'arborescence.

Remarque : pour commencer, n'utilisez pas votre historique de discussion volumineux dans son ensemble, car il s'agit d'une tâche simple.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.