Comment un chatbot fait-il pour comprendre une question et y répondre ?

par Ludan Stoecklé, CTO d’Addventa
#chatbot #intelligenceartificielle

Dans notre article précédent (l’App Fatigue et les chatbots), nous avons introduit ce que sont les chatbots et le contexte dans lequel ils s’inscrivent : succès des applications de messagerie, App Fatigue, progrès techniques dans le traitement du langage naturel (NLP — Natural Language Processing) et mobilisation des grands acteurs du Web (Facebook, Microsoft, Amazon, Google) autour des chatbots.

Cette dynamique a conduit à l’émergence d’outils de création de chatbots que l’on appelles moteurs de chatbot. L’offre est pléthorique et en pleine évolution avec plus d’une centaine de produits. Cette série d’articles a pour but de zoomer sur les fonctionnalités fondamentales de ces moteurs afin de mieux comprendre leur utilité et leur fonctionnement.


Un chatbot doit dialoguer, ce qui consiste à savoir :

1. répondre à un message entrant, qui est appelé énoncé dans la terminologie des chatbots

2. gérer une conversation : suivre le fil des messages successifs en se rappelant du contexte

Dans cet article, nous allons nous focaliser sur la première de ces fonctionnalités : répondre à un message entrant.


Un chatbot reçoit donc un message et doit y répondre. Comment fait-il ?

Il faut tout d’abord comprendre ce que veut l’utilisateur.

Une approche consiste à fournir une liste d’actions possibles à l’utilisateur qui se contente de sélectionner celle qu’il souhaite, avec un menu. Cette approche fonctionne bien pour des chatbots spécialisés sur un domaine précis et étroit, ou une fois les premiers échanges établis.

Dans le autres cas, il est préférable de laisser l’utilisateur s’exprimer en langage naturel. Il s’agit alors de détecter ce qu’on appelle l’intention et les entités dans le texte en langage naturel. Par exemple, dans la phrase “je veux manger une pizza ce soir”, l’intention est “recherche restaurant” et les 2 entités sont “italien” (type de restaurant) “ce soir” (quand).

La détection de l’intention et les entités se fait soit par par patterns, soit par apprentissage (machine learning). Nous allons détailler ces deux techniques.

L’approche par patterns revient à écrire des modèles explicites pour matcher des énoncés. Les patterns sont définis dans des langages dédiés qui peuvent être vus comme des expressions régulières spécialisées portant sur des mots et non pas sur des caractères.

Partons de notre exemple d’énoncé “je veux manger une pizza ce soir”, et généralisons-le. Il contient 3 notions :

1. “je veux manger” : l’intention manger, que l’on notera ~manger

2. “une pizza” : l’entité type de restaurant, que l’on notera ~type

3. “ce soir” : l’entité de date, notée ~quand

Notre pattern est donc ~manger puis ~type puis ~quand.

Entités et intentions doivent être précisées plus précisément :

  • ~manger correspond aux verbes “manger”, “déjeuner”, “dîner”, “dévorer”, etc.
  • ~type peut être ~italien (que l’on redécompose en “pizza” ou “pizzeria”), “thaï”, “chinois”, etc. ; il s’agit ici de développer une petite ontologie des types de restaurants
  • ~quand peut être “ce soir”, “demain” ou une date

Citons ChatScript ou AIML parmi les moteurs de chatbot fonctionnant par patterns.

Cette approche montre des limites lorsque le nombre d’intentions possibles devient important : il devient difficile d’écrire et de maintenir les patterns.

À contrario, avec une approche par apprentissage, l’utilisateur fournit une série d’exemples et c’est l’algorithme d’apprentissage qui va, en quelque sorte, calculer les patterns. Doivent être fournis une série d’exemples classés par intention, avec les entités identifiées au sein de ces exemples. Ici :

intention: “recherche restau”

  • je veux manger une *pizza* (type) *ce soir* (quand)
  • *demain* (quand) je veux réserver un *chinois*(type)
  • *pizzeria* (type) *maintenant*(quand)
  • réserver restau *thaï* (type) *dimanche* (quand)

À partir de ces exemples, l’algorithme d’apprentissage est capable de classer automatiquement des phrases approchantes, par exemple « je veux manger thaï », alors que cette phrase ne figure pas telle quelle dans les exemples.

Certains algorithmes d’apprentissage se basent sur une connaissance statistique initiale de la langue. La présence de mots différents dans un contexte analogue tend à penser qu’ils sont synonymes : si “pizzéria” et “trattoria” sont souvent précédés ou suivis des mêmes mots, alors ils sont équivalents. Cette connaissance initiale de la langue, souvent calculée à partir des textes de wikipédia, permet de bonnes performances même avec un volume restreint d’exemples classés.

D’autres algorithmes ne nécessitent pas de connaissance préalable de la langue mais demandent un volume beaucoup plus important d’exemples.

api.ai et IBM Watson Conversation fonctionnent par apprentissage. L’approche pas apprentissage est très séduisante, mais n’est pas simple à mettre en œuvre et surtout à déboguer.

L’approche par pattern ou par apprentissage permet ainsi d’extraire l’intention et les entités, c’est-à-dire à comprendre le sens du message entrant. Il s’agit de l’étape la plus délicate.


Il s’agit ensuite de traiter la demande, puis d’apporter une réponse.

Le traitement de la demande est très variable mais fait souvent appel à des sources de données externes : ici, rechercher une pizzéria et les disponibilités. Dans certains moteurs de chatbot, ces étapes peuvent être implémentées directement, sous la forme d’un mix de code et d’appels externes ; d’autres moteurs, comme IBM Watson Conversation par exemple, nécessitent d’effectuer le traitement en aval.

Enfin, il s’agit de répondre à la demande sous la forme d’un texte (ou d’une carte, ou d’image, etc.). Lorsqu’il s’agit d’une réponse textuelle, elle est le plus souvent implémentée sous la forme d’une phrase à trous : “Votre commande <n° commande> est <état commande>” produira “Votre commande 123 est en attente livraison fournisseur”.

Dans certains cas, il peut être intéressant de faire appel à un outil de génération de texte en langage naturel (NLG — Natural Language Generation), comme la solution Yseop, pour produire des textes plus sophistiqués.


Dans cet article, nous avons vu comment un chatbot répond à un message entrant :

  • compréhension de la demande via l’extraction de l’intention et des entités, soit via des patterns, soit par apprentissage
  • traitement de la demande, souvent via des appels à des sources de données externes
  • production de la réponse, le plus souvent via des phrases à trous, parfois via des technologies de génération de texte en langage naturel.

L’article suivant permettra de comprendre comment un chatbot fait pour gérer une conversation suivie avec un utilisateur.

Show your support

Clapping shows how much you appreciated Addventa’s story.