Tech

NLP dans votre chatbot : attention aux faux positifs de votre modèle

Chatbots et NLP

S’il y a un domaine qui est aujourd’hui quasi indissociable des chatbots, c’est le machine learning et plus particulièrement la branche dévolue au traitement automatique du langage naturel (ou NLP en anglais raccourci). 

L’utilisation de modèles NLP dans votre chatbot permet de le doter de la compréhension de ce que dit l’utilisateur en détectant des intentions et/ou entités dans sa phrase afin de lui apporter une réponse adaptée.

L'utilisation d'algorithmes de machine learning orientés NLP / NLU impose quelques contraintes pour l'intégration dans un chatbot. Afin de détecter correctement une intention, un modèle NLP doit être entraîné avec un jeu de données (= des phrases) correspondant à ce que l’on souhaite reconnaître (= fournir des “exemples” au modèle). La taille de ce jeu de données varie en fonction du type de modèle, de la manière dont on l’entraîne et… de la précision de la détection recherchée (soit l'efficacité du modèle).

Mesurer la précision d’un modèle NLP :

Pour mesurer correctement l’efficacité d’un modèle NLP, il est important de s’attarder sur 3 indicateurs en lui faisant passer une batterie de tests :

  • le nombre de match (l’intention est correctement détectée)
  • le nombre de faux positifs (l’intention est détectée alors qu’elle n’aurait pas dû)
  • le nombre de faux négatifs (l’intention n’est pas détectée alors qu’elle aurait dû)

La plupart des outils conversationnels “grand public” et les chatbots qui en dépendent se concentrent aujourd’hui sur le premier point : la capacité du modèle à détecter l’intention souhaitée dans une phrase. Pourtant cela introduit un problème important en négligeant le nombre de faux positifs qui pourtant est celui qui crée les situations potentiellement les plus problématiques.

De plus, des phrases très similaires aux données d’entraînement sont souvent utilisées pour valider le modèle ce qui tend à prouver, mais de manière biaisée, que le modèle fonctionne. Ainsi beaucoup de chatbots aujourd’hui comprennent correctement les phrases exemples données au modèle mais sont perdus dès qu'on sort des démos.

Voici un exemple de processus d'entraînement biaisé pour la détection de l’intention “achat-voiture”. Prenons comme données d’entraînement les phrases :

  • Je veux acheter une voiture
  • J’aimerais acheter une voiture
  • Je veux me procurer une voiture
  • Je suis intéressé par l’achat d’une voiture

Entraînons un modèle sur ces 4 phrases et testons-le avec une de ces 4 phrases :

Je suis intéressé par l'achat d'une voiture
Quel type de véhicule souhaitez-vous ?
SUV Berline

L’intention “achat-voiture” est bien détectée par le modèle.

Faisons un test avec une phrase s'approchant fortement des phrases d'exemples. Le modèle va très probablement fonctionner correctement également, car la similarité avec les phrases exemples est importante.

L'achat d'une voiture m'intéresse
Quel type de véhicule souhaitez-vous ?
SUV Berline

A présent testons avec une phrase approchante mais négative, dans laquelle l'intention ne doit pas apparaitre.

Je ne suis pas intéressé par l’achat d’une voiture
Quel type de véhicule souhaitez-vous ?
SUV Berline
😡 Tu ne comprends rien !

Le modèle va détecter l’intention “achat voiture” alors que c’est faux. L’introduction de la négation est trop subtile pour le modèle, qui identifie quand même l’intention : c’est un faux positif. Le modèle a mal compris l’intention de l’utilisateur car le jeu de données d’entrainement n’était pas suffisamment étayé, et ne prévoyait pas d'exemples négatifs (c'est-à-dire de phrase où l'intention à détecter n'est pas présente).

A l’inverse, écrivons maintenant une phrase contenant uniquement des termes inconnus du modèle

J'aimerais une nouvelle bagnole
🤔 Désolé je n'ai pas compris
Recommencer

Au final donc, ce processus d’entrainement d’intentions obtient des résultats similaires à une détection basée sur la reconnaissance de mots-clefs préconfigurés. Le travail d’entrainement effectué, non abouti, provoquera une expérience qui s’avère déceptive pour l’utilisateur. 

Autre exemple de faux positif problématique :

Prenons un autre exemple concret : nous avons  entrainé un modèle de détection de la toxicité d’un message (vulgarité, insulte, agressivité, etc). Nous avons pour cela annoté un jeu de données d’environ 4000 phrases que nous avons ensuite utilisé pour entraîner le modèle NLP.

Les premiers résultats de ce modèle s’avèrent concluants : des phrases de tests différentes de celle d'entraînement sont correctement catégorisées. S’en suit une phase de tests libres avant de passer en production. Voici un des ces tests et la réponse du chatbot : 

Bonjour, je suis M. Bernard et j'ai besoin d'aide.
😳 Avec ce genre d'insulte, je préfère passer le relais à un humain !

Surprenant non ? Après analyse, il s’avère que le modèle considérait alors le mot "Bernard" comme une insulte, très probablement pour sa similarité avec des mots comme c***ard, b*tard, etc. 4000 phrases n'avaient pas réussi à lui apprendre que Bernard n'est pas une insulte.

Comment éviter ce problème ?

En entraînant correctement votre modèle de détection d’intentions / d’entités.

Concrètement cela veut dire que, contrairement à ce que beaucoup veulent vous faire croire aujourd’hui, il ne suffira pas d’une dizaine de phrase d’exemple de ce que vous souhaitez détecter pour que cela fonctionne correctement. Parfois même, il serait plus performant et moins dangereux d'utiliser une détection de mots-clefs avec une liste suffisante...

En résumé donc,  pour avoir un modèle NLP performant il faut selon les cas :

  • plusieurs centaines voir milliers de phrases exemple (positifs)
  • des milliers de phrases hors sujet (négatifs)
  • un apprentissage par étapes successives entrecoupées de tests et d’affinage des paramètres du modèle et des données d’entraînement.

Il est ainsi possible d’obtenir un modèle qui non seulement à un bon taux de détection mais également des taux de faux positifs et faux négatifs acceptables dans votre contexte d'utilisation ! 

Dernière précision importante : les différentes étapes de l'apprentissage se succèdent en 2 phases : 

  1. une phase initiale : le modèle est entrainé sur une première base de données, ses paramètres sont affinés par rapport à la problématique
  2. une phase récurrente : les phrases ayant encore posé problème sont ajoutées au modèle afin de l'améliorer encore durant la phase de fonctionnement du chatbot.

Et cela tombe bien, cela s'inscrit dans notre processus de développement

Un bon modèle NLP c’est comme le fromage, ça s’affine ! (et ça prend du temps) Like a Bot
Partager l’article : arrow_backAccueil du Blog