Introduction aux ChatBots et l’ANI : Artificial Narrow Intelligence

Definition

L’Artificial Narrow Intelligence est une intelligence artificielle qui se concentre sur une seule tâche contrairement à l’AI (Artificial Intelligence) qui est une machine avec la capacité d’appliquer l’intelligence à n’importe quel problème, plutôt qu’un problème spécifique.

Siri est un bon exemple d’ANI. Siri opère dans une gamme limitée prédéfinie, il n’y a pas d’intelligence véritable, pas de conscience de soi.

Les chatbots, ou agents conversationnels, sont les interfaces permettant d’exploiter une ANI.

Principes de fonctionnement

Les chatbots sont souvent utilisés dans un but ou une tâche précise. Ils ont « préformatés » et n’ont pas (ou rarement) de fonctionnalité de machine learning. Un moyen fréquent pour faire fonctionner un chatbot est d’utiliser des fichiers AIML (Artificial Intelligence Markup Language). C’est un format dérivé du XML qui défini quoi répondre à quelle question.

Le problème de l’utilisation de AIML est la non possibilité d’avoir des bots très sophistiqués. Néanmoins, le projet A.L.I.C.E qui utilise ce procédé est arrivé second  au concours Loebner de 2010. Notez qu’aujourd’hui les avancées en AI et machine learning ont largement évolué et qu’on est loin de pouvoir passé un test de Turing avec AIML.

Pour la plupart des chatbots, qui ont a accomplir un nombre restreint de tâches c’est suffisant. Que ce soit en marketing, e-commerce ou autre, les possibilités offertes par cette technique offrent un large panel de services que nous allons parcourir dans cet article.

On l’a vu, le principe de fonctionnement d’un chatbot est relativement simple. On peut le diviser en 3 grandes étapes : demande, traitement, réponse.

 

Mise en œuvre technique

Théoriquement, on peut faire un chatbot avec n’importe quel langage, mais certains sont plus adaptés que d’autre du fait de librairies disponibles. Par exemple, Python a un package pyAIML qui permet de manipuler facilement les fichiers AIML. Si vous préférez le PHP, le projet Program O est une solution.

Dans tous les cas, l’utilisation de AIML est toujours la même. On utilise des patterns et des templates.

Les patterns

Les patterns (ou motifs en français) sont des chaines de caractères qui sont destinées à répondre à une entrée utilisateur. Ces patterns peuvent contenir des jokers pour répondre à un large nombre d’entrées.

Pattern "fermé" : Quel est votre nom

Pattern "large" : Quel est votre *

Le pattern fermé aura qu’une seule réponse possible : un nom. Le pattern large peut répondre à plusieurs questions :

  • quel est votre âge
  • quel est votre nom
  • quel est votre travail

Afin de simplifier le travail de l’interpréteur AIML, on peut ajouter des fonctions de prétraitement pour gérer la casse, les fautes, les abréviations etc.

Les templates

Un template (ou modèle) est une réponse à un pattern. Un template peut être aussi simple qu’un texte littéral brut comme « Bonjour je suis votre bot ». On peut également faire appel à l’utilisation de variables pour personnaliser :

 Bonjour, mon nom est <bot name="name"/>.

Dans cet exemple, on remplace la variable  <bot name= »name »/> par le nom du Bot. On peut également utiliser des variables ayant comme valeur une saisie utilisateur. Par exemple, pour demander le nom ou l’âge de l’utilisateur.

On peut également utiliser des réponses conditionnelles (if / then / else) ou des réponses aléatoires. Les templates peuvent également faire appel à d’autres templates (selon la thématique par exemple) en utilisant des éléments « srai ». Voici un exemple de formatage correct de fichier AIML :

<category>
  <pattern>QUEL EST VOTRE NOM</pattern>
  <template><![CDATA[Mon nom est <bot name="name"/>.]]></template>
</category>
<category>
  <pattern>Comment t'appelles-tu</pattern>
  <template>
    <srai>Quel est votre nom</srai>
  </template>
</category>

Cet exemple, pris sur Wikipédia, met en oeuvre tout ce dont nous venons de voir. « comment t’appelles-tu » est semblable à « quel est votre nom ». On utilise donc un élément srai pour « rediriger » vers la réponse adéquate. L’élément CDATA permet d’éviter les caractères d’échappement liés au XML.

 

Chatbot sans coder, quelques solutions

La mise en oeuvre technique peut être fastidieuse ou compliquée. Il existe des solutions pour mettre en route des chabots sans programmation.

Chatfuel

Ce service permet de créer un chatbot Facebook Messenger pour votre fanpage. Vous créez des scenarios et vous pouvez obtenir quelque chose d’assez puissant en quelques minutes.

Il suffit de créer des blocs avec des mots-clés et de définir une réponse appropriée : réponse texte, lien, card (bloc d’information avec liens, images etc.). C’est un excellent départ et ce service est utilisé par de grands sites.

Site : https://chatfuel.com/

Plugin WordPress

Un plugin wordpress utilisant le script Program O et permettant de mettre en place facilement un chatbot sur votre CMS préféré. Il porte le nom Elizaibots et est disponible gratuitement.

Site : https://en-gb.wordpress.org/plugins/elizaibot-chatbots/

Il existe également un certain nombre de projet, la plupart du temps open source, qui permettent de déployer rapidement un chatbot.

Quelques services à l’internaute

Le plus classique et facile à mettre en place, c’est certainement la FAQ. L’internaute pose une question et on puise dans la base de connaissance pour répondre par un lien direct vers la question / solution dans la FAQ.

On rencontre également régulièrement des chatbots qui deviennent ensuite de véritable chat avec un opérateur commercial ou technique. Le chatbot étant présent en début de chaine pour évaluer le besoin de l’internaute. Charge à l’humain ensuite de prendre le relais et de répondre aux attentes.

Google Allo, propose de chater avec ses amis tout en pouvant poser des questions. Google se sert alors de son moteur de recherche pour apporter des réponses : definition, map, etc.

Conclusions

AIML est une excellente solution pour démarrer avec les chatbots et l’ANI. Cela à néanmoins ses limites puisqu’il est difficile de maintenir à jour un code qui va répondre à énormément de questions ou de pouvoir répondre à des questions complexes.

 

Reconnaissance d’objets avec TensorFlow

TensorFlow est une librairie pour le machine learning et l’intelligence logiciel. Nous allons aujourd’hui l’utiliser avec le language Python mais vous pouvez également l’utiliser en C.

Vidéo de présentation :

Je suis sous Mac, et pour installer la librairie j’ai utilisé les commandes suivantes :

$ sudo easy_install pip

$ sudo easy_install --upgrade six

Ensuite, il faut choisir la bonne version à installer :

# Ubuntu/Linux 64-bit, CPU only, Python 2.7 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp27-none-linux_x86_64.whl # Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp27-none-linux_x86_64.whl
# Mac OS X, CPU only, Python 2.7: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py2-none-any.whl
# Mac OS X, GPU enabled, Python 2.7: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0-py2-none-any.whl
# Ubuntu/Linux 64-bit, CPU only, Python 3.4 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp34-cp34m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp34-cp34m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, CPU only, Python 3.5 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0-cp35-cp35m-linux_x86_64.whl
# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 7.5 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0-cp35-cp35m-linux_x86_64.whl
# Mac OS X, CPU only, Python 3.4 or 3.5: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py3-none-any.whl
# Mac OS X, GPU enabled, Python 3.4 or 3.5: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0-py3-none-any.whl

Il ne reste plus qu’à installer. Selon que vous êtes sous Python 2 ou 3, voici les commandes :

# Python 2 $ sudo pip install --upgrade $TF_BINARY_URL

# Python 3 $ sudo pip3 install --upgrade $TF_BINARY_URL

Nous sommes maintenant prêts pour faire un premier test avec une photo ou une image que vous aurez trouvé sur internet.

Allons dans le répertoire ou la librairie est installée. Dans mon cas, elle se situe ici (sous Mac) :

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tensorflow/

Vous pouvez situer l’emplacement en utilisant la commande suivante :

locate tensorflow

Cette commande, qui fonctionne aussi sous Mac ou Linux, vous liste les emplacements ou « tensorflow » est trouvé. Déplacez vous jusqu’au bon répertoire. Tapez ensuite cette commande pour faire un test :

sudo python classify_image.py

Vous devriez obtenir le résultat suivant :

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493) indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878) lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317) custard apple (score = 0.00149) earthstar (score = 0.00127)

Par défaut, c’est une image de panda qui est identifiée. Nous allons pouvoir maintenant tester avec nos propres photos. J’ai pris une photo chez moi. Il s’agit d’une guitare et la photo est de qualité plutôt moyenne.

La voici :

guitare

C’est assez sombre, et franchement je ne m’attendais pas à ce que le script puisse reconnaitre un objet sur cette photo. Et pourtant …

En tapant la commande qui suit, Tensorflow a su reconnaitre l’objet principal de la photo :

sudo python classify_image.py --image_file /Users/maxduke/Desktop/test.jpg

test.jpg est évidemment le fichier jpeg de ma photo. Le script m’a renvoyé le résultat suivant :

electric guitar (score = 0.96822)

acoustic guitar (score = 0.00692)

stage (score = 0.00334)

pick, plectrum, plectron (score = 0.00106)

microphone, mike (score = 0.00057)

Comme vous pouvez le constater, le script est certain à 96% qu’il s’agit d’une guitare électrique. C’est presque incroyable mais ça fonctionne. J’ai fait une cinquantaine de tests, et TensorFlow a retrouvé 2 fois sur 3 le bon objet 🙂

Ca laisse beaucoup de place à l’imagination. Comment se servir d’un tel script ? Je suis en ce moment en train de concevoir un robot avec un Raspberry, et ça me donne pas mal d’idées … Et si mon robot pouvait reconnaitre mon chat et ainsi pouvoir interagir avec lui ?

Je reviendrais certainement avec d’autres articles sur le sujet. En attendant, amusez-vous bien.