Ce projet est intéressant, mais comme l'ont déjà dit plusieurs personnes, c'est très ambitieux. Donc il te faudra procéder par étapes (faire des projets par taille croissante).
Tu auras vraisemblablement besoin pour découper ton projet en plusieurs parties : (ex : analyse, apprentissage, génération de la réponse).
** Clarifier la tâche à effectuer(par ordre de difficulté présumée) il n'y a pas de mal à commencer par le plus petit et à améliorer ensuite :
(A) un chatterbot bête (et c'est déjà bien) : repère certains motifs et affiche une phrase (réponse) qui fait illusion.
(B) déterminer certains motifs de phrase (des requêtes) et effectuer l'action demandée. (à la Siri ou Google Home)
(C) un chatterbot intelligent, qui obtient différentes caractéristiques de la phrase et effectue une réponse plus fine. Pour moi, ca passe par au moins une analyse linguistique partielle de la phrase.
**Clarifier les modalités de réponse :
l'objectif (A) peut se contenter de réponses toutes faites ou à trou. On trouve pas mal de chatterbots qui font cela.
l'objectif (B) permet de ne pas se soucier de la génération d'une réponse en langage naturel
(C) nécessite vraisemblablement de créer une structure logique de la réponse (sémantique ou syntaxique), est de générer une phrase en retour.
**Entrée de l'algorithme d'apprentissage :
Texte brut ?
Quand j'ai fait ma thèse, on utilisait plutôt du texte avec étiquetage morphosyntaxique chaque mot était remplacé par trois infos : le mot, son lemme (=la forme du dictionnaire), et sa catégorie grammaticale ? ( http://fabienpoulard.info/post/2011/01/09/Python-et-Tree-Tagger ,
Plus ? il existe aussi des analyseurs grammaticaux... mais bon...
**Clarifier les modalités du feedback :
Pour que ton programme apprenne, il lui faut un feedback, c'est à dire que les couples (entrée du système d'apprentissage, sortie du système d'apprentissage) doivent recevoir une note. Je vois trois cas :
- Créer soit même un corpus d'apprentissage (entrée\tréponse\tnote).
- Une série de boutons (interface graphiques avec tkinter) permet à l'utilisateur de donner son verdict lui-même une fois la réponse de la machine affichée.
- Analyser la réponse de l'utilisateur (trace d'agacement ou de mépris) pour déceler si l'algo a été plutôt performant dans sa réponse.
Ces méthodes ne sont pas incompatibles, mais il te faudra a priori stocker des triplets (entrée, réponse, note) dans un fichier.
**Conclusion
Mon conseil est de commencer petit (id est, créer un premier programme de type A, mais totalement fonctionnel en réalisable en un temps raisonnable), et d'apporter des améliorations progressives.
En seconde étape. tu peux :
- Tester les algos d'apprentissage de ton choix sur des problèmes reconnus comme plus simples)
- Modifier le programme de type (A) en essayant de lui faire apprendre des choses par ordre croissant de complexité :
1) détecter une question avec un système d'apprentissage. Tester plusieurs systèmes d'apprentissage. Clairement le système d'apprentissage est sous exploité, mais c'est un premier pas)
2) détecter différentes nuances de la phrase de l'utilisateur (content, agacé) => pour le feed back
Mon projet: SpotRoom. N'hésites pas à passer dire ce que tu en penses !