Chimrod

Pyborg


Sommaire

PyBorg est un bot parlant écrit en python. Il s'agit d'un programme capable de se connecter sur IRC, qui enregistre les phrases et les structures qu'il peut lire, et se sert de ces données pour générer des réponses quand on lui parle. Il utilise le principe des chaînes de Markov pour générer les réponses.

Malheureusement, le programme a aujourd'hui disparu du net ( on peut encore le trouver sur le wiki404[1]. J'ai repris ledéveloppement, et propose aujourd'hui une nouvelle version "enrichie".


Le principe :

De la même manière que Megahal[2], PyBorg est un bot qui "apprend" la langue au fur et à mesure que l'on lui parle. Il n'est pas programmé pour répondre selon une langue particulière, mais peut répondre dans toutes les langues, si sa base de donnée le lui permet. A chaque fois que l'on lui présente une phrase, il enregistre le contenu de la phrase, ainsi que les relations entre les mots. Au moment de générer une réponse, il va se servir de ces informations pour contruire la réponse, mot par mot.

Par exemple, les mots "ça" et "va" sont la plupart du temps suivi par le mot "bien", "pas" mais jamais du mot "maison". Lorsque le programme aura choisi de répondre en commençant sa réponse par le mot "ça", il y a de forte chance pour qu'il continue avec les mots "va" et "bien".

Pour amorcer la réponse, le programme choisi un mot dans la phrase qu'il reçoit en entrée.
L'idéal serait d'identifier le prédicat de la phrase, mais devant la difficulté de gérer les variantes des verbes conjugués ( et cela serait propre à chaque langue et contraire à l'esprit du programme ), le programme choisi le mot qu'il connaît le moins bien, ce qui permet de mettre de côté tout les mots grammaticaux, ainsi que les mots qui n'apportent aucun sens à la phrase. (par exemple 'le' 'la' 'un' 'de' ...)Ensuite, il génère la phrase à reculons pour tout ce qui précède le mot choisi, puis, il génère la réponse à partir du mot retenu.

Exemple, en demandant "Es tu un robot, oui ou non ?", le programme retient le mot "robot" puis génère sa réponse :
"robot" est précédé de "un" et "un robot" est souvent précédé de "t".
Puis, "un robot" est suivi de "," "c" puis "," "c" est suivi de "est" et enfin "c est" sera suivi de "ça" Réponse: "T un robot, c'est ça"

Cela permet de générer des réponses, qui, si l'interlocuteur ne sait pas avec qui il parle, permettent de mener une conversation ( il n'est d'ailleur pas rare de voir les gens s'acharner à lui parler si le bot a un pseudo 'féminin' ...)

Il ne s'agit donc pas d'intelligence, mais de calcul statistique qui permet de formuler les réponses ( avec une bonne base de donnée, cela permet de générer des phrases "correctes" )

Le fonctionnement :

Le programme est divisé en deux modules. D'une part il y a le bot proprement dit, et d'une autre part, les interfaces grace auxquelles il est possible de "communiquer" avec lui (ligne de commande, irc, telnet...)

Pour lancer le programme, selon que l'on veut le tester en ligne ou hors-ligne, il faut lancer `pyborg-irc.py` ou `pyborg-linein.py`. En fonctionnement hors-ligne, il suffit de taper sa phrase, puis de presser pour que le programme génère sa réponse. Lors du premier lancement, le programme reste silencieux jusqu'à ce qu'un certain nombre de phrases lui aient été données afin qu'il puisse faire sa réponse.
Lors du fonctionnement en ligne, le programme se connecte à IRC, en fonction des informations données dans le fichier 'pyborg-irc.cfg' ( serveur, canal, pseudo etc ), répond automatiquement à tout ceux qui viennent l'aborder en privé, et répond de temps à autre sur les canaux où il est connecté. Un paramètre ( owner ) permet de définir quel pseudo peut contrôler le bot.

Attention ! Pour ceux qui utilisent l'ancienne version de PyBorg il est necessaire de convertir le dictionnaire en lançant le programme convert2.py avant de lancer le bot.

Le programme a été testé et fonctionne sans problème sous Linux, Windows XP et FreeBSD, et "devrait"fonctionner également sous d'autres plates-formes.

Pour ce qui est de l'utilisation mémoire, je constate ( avec ma configuration ) que le programme occupe 32Mo de RAM, et que les archives font 3,5Mo sur le disque pour un dictionnaire de 5.000 mots avec 437.000 phrases différentes ( rapport de 90 phrases pour un mot ). Les commandes :

Toutes les commandes commencent par un '!'. Selon que le bot est connecté à IRC ou non, la liste des commande n'est pas la même. Voici la liste des commandes qui sont utilisable tout le temps :

  • !help : affiche l'ensemble des commandes disponibles
  • !version : affiche la version du bot
  • !quit : quitte le programme
  • !save : sauvegarde le dictionnaire et les fichiers de configuration
  • !words : affiche le nombre de mots et de phrases connus
  • !known [word] : affiche si le mot [word] est connu et le nombre de phrases dans lequel il apparaît
  • !unlearn [word]: efface le mot du dictionnaire
  • !purge : Affiche le nombre de mots qui n'apparaissent que dans un seul contexte
  • !purge [nombre] : efface [nombre] mots du dictionnaire, parmi les mots les moins fréquents
  • !replace [word1] [word2] : remplace toutes les occurences de [word1] par [word2]
  • !censor [word] : censure le mot [word]
  • !uncensor [word] : retire [word] de la liste de censure
  • !learning [on|off] : autorise ou non l'apprentissage de nouveaux mots
  • !limit [nombre] : limite le nombre de mots connus à [nombre] ( par défaut 6000 )
  • !alias : Liste tout les alias existants
  • !alias [alias] : Liste tous les mots qui réfèrent à {alias]
  • !alias [alias] [word1] [wordN] : crée un alias qui remplace toutes les occurences de [word] par [alias]

Les commandes suivantes ne sont disponibles que sur IRC :

  • !nick [nick] : change le pseudo du bot
  • !shutup : empêche le bot de parler sur les canaux
  • !wakeup : annule un !shutup
  • !replyrate [nombre] : probabilité que le bot réponde à un message diffusé sur le canal
  • !talk [nick] [message] : envoie le message [message] à [nick] de la part du bot
  • !join [canal] : connecte le bot à [canal]
  • !part [canal] : fait quitter le canal [canal]
  • !chans : liste les canaux où le bot est connecté
  • !ignore [nick] : ignore nick
  • !uningore [nick] : retire nick de la liste des personnes à ignorer
  • !owner password : permet de s'ajouter à la liste des owners ( le mot de passe est défini dans le fichier pyborg-irc.cfg )

Il existe deux fichiers de configurations qui portent tout les deux l'extension .cfg Dès qu'une variable se trouve entre crochets, il est possible de spécifier plusieurs valeurs de la manière suivante : ['valeur1' ,'valeur2' , ... ]

pyborg.cfg :

  • num_aliases : variable du programme, ne pas changer, indique le nombre d'alias connus
  • num_contexts : variable du programme, ne pas changer, indique le nombre de phrases connues
  • ignore_list : indique la liste de mots qui ne sont pas pertinents dans une phrase ( ex: ['un', 'une', 'de', 'des']
  • max_words : limite maximale au nombre de mots connus, peut être changé grace à la commande !limit
  • learning : indique si le bot doit apprendre ou non. Peut être changé grâce à la commande !learning
  • aliases : la liste des alias. Peut être changé avec la commande !alias
  • censored : la liste des mots censurés. Peut être changé avec la commande !censor !uncensor
  • num_words : variable du programme, ne pas changer, indique le nombre de mots connus
pyborg-irc.cfg :
  • owners : une liste de propriétaires du bot
  • reply_chance : pourcentage de chance que le bot réponde à un message diffusé sur le canal. Peut être changé avec la commande !replyrate ( voir la commande !replyrate )
  • reply_to_ignored : 0 ou 1 permet de répondre ou non aux personnes qui sont dans la liste des ignorés
  • chans : une liste de cannaux où le bot doit se connecter ( n'est pas modifié par la variable !join )
  • servers : une liste de serveurs où le bot doit se connecter
  • ignorelist : une liste de personnes auxquelles le bot ne répondra pas ( voir les commande !ignore, !unignore )
  • quit_message : message de sortie à la deconnection
  • password : password pour la commande !owner
  • !speakin : 0 ou 1 indique si le bot doit bavarder sur les canaux, peut être changé avec les commandes !shutup !wakeup

Les fichiers :

La dernière version de PyBorg (actuellement la version 1.1.2 ) ( mise à jour le 22-03-08 )

Si vous ne disposez pas de IRCLib (nécessaire pour que le bot puisse fonctionner ) télécharger l'archive ici,et copiez les deux fichiers dans le répertoire de PyBorg.

Vous pouvez également consulter la page de développementdu projet.

Les liens :

[1] : wiki404, la page du wiki qui parle de pyborg ( ancienne version )
[2] : Megahal,un autre bot parlant.

Généré par ZITE-CMS | Admin