Tech

NLP / NLU : attention aux faux positifs dans votre modèle

NLP / NLU 

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 permet en effet au chatbot de comprendre 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'algorithme de machine learning orientés NLP / NLU impose quelques contraintes pour l'intégration dans un chatbot. En effet 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 complète :

  • 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 la valeur du deuxième point qui pourtant est celui qui crée les situations potentiellement les plus problématiques.

Ainsi beaucoup de chatbots aujourd’hui comprennent correctement les phrases exemples données au modèle et des phrases très similaires aux données d’entraînement sont de plus souvent utilisées pour valider le modèle ce qui permet de prouver de manière biaisée que le modèle fonctionne.

Voici un exemple de processus 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 les mêmes 4 phrases. A priori, l’intention “achat-voiture” sera bien détectée. Ajoutons un test avec la phrase “L’achat d’une voiture m’intéresse”, le modèle pourrait encore bien fonctionner.

Maintenant testons avec : “Je ne suis pas intéressé par l’achat d’une voiture”. Le modèle va probablement détecter l’intention “achat voiture” alors que c’est faux.

Globalement, ce genre de modèle aura donc des performances équivalentes au fait de saisir  “en dur” les phrases ou mot-clefs à détecter dans le code du bot. Mais ce qui est pire, c’est que le biais introduit peut conduire à des situations problématiques avec la détection de faux positifs.

Exemple de faux positif problématique :

Prenons un exemple concret : nous avons pour Like a Bot 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 utilisé pour entraîner un modèle NLP.

Les premiers résultats de ce modèle s’avèrent concluants et les phrases tests sont plutôt bien catégorisées. S’en suit une phase de tests libres avant de passer en production. Un utilisateur choisit de répondre à une question : “Je suis Mr Bernard”. La réponse du chatbot fut pour le moins surprenante : “Pourquoi m’insulter de la sorte ? Je préfère passer la main à un humain”.

Après analyse, il s’avère que le modèle considérait alors le mot Bernard comme une insulte, sûrement pour sa similarité avec des mots comment C***ard, B*tard, etc.

Comment éviter le 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 suffit pas d’une vingtaine de phrase d’exemple de ce que vous souhaitez détecter pour que cela fonctionne correctement.

Il faut :

  • plusieurs dizaines voir centaines voir milliers de phrases exemple (positifs)
  • des dizaines voir centaines voir 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.

Ainsi il est 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 !

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

A priori, l’intention “achat-voiture” sera bien détectée. En effet, le modèle a associé les termes "acheter", "procurer", "achat", "voiture" à l'intention "achat-voiture".

Faisons un test avec la phrase “L’achat d’une voiture m’intéresse”, le modèle va très probablement fonctionner et matcher.

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

Maintenant testons avec : “Je ne suis pas intéressé par l’achat d’une voiture”.

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

Le modèle va probablement détecter l’intention “achat voiture” alors que c’est faux. Pourquoi ? Car seul la différence par rapport à une des phrases d'entraînement (l'ajout de "ne...pas") est trop subtil pour lui.

A l'inverse si nous écrivons une phrase avec uniquement des termes inconnus : 

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

Globalement, ce genre de modèle aura donc des performances équivalentes au fait de saisir  “en dur” les phrases ou mot-clefs à détecter dans le code du bot. Mais ce qui est pire, c’est que le biais introduit peut conduire à des situations problématiques avec la détection de faux positifs.

Exemple de faux positif problématique :

Prenons un exemple concret : nous avons pour Like a Bot 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 utilisé pour entraîner un modèle NLP.

Les premiers résultats de ce modèle s’avèrent concluants et les phrases tests sont plutôt bien catégorisées. S’en suit une phase de tests libres avant de passer en production. Un utilisateur choisit de répondre à une question : “Je suis Mr Bernard”. La réponse du chatbot fut pour le moins surprenante : “Pourquoi m’insulter de la sorte ? Je préfère passer la main à un humain”.

Après analyse, il s’avère que le modèle considérait alors le mot Bernard comme une insulte, sûrement pour sa similarité avec des mots comment c***ard, b*tard, etc.

Comment éviter le 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 suffit pas d’une dizaine de phrase d’exemple de ce que vous souhaitez détecter pour que cela fonctionne correctement.

Il faut :

  • plusieurs dizaines voir centaines voir milliers de phrases exemple (positifs)
  • des dizaines voir centaines voir 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.

Ainsi il est 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 !

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

Surprenant non ? Après analyse, il s’avère que le modèle considérait alors le mot Bernard comme une insulte, sûrement pour sa similarité avec des mots comment c***ard, b*tard, etc.

Comment éviter le 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 suffit pas d’une dizaine de phrase d’exemple de ce que vous souhaitez détecter pour que cela fonctionne correctement.

Il faut :

  • plusieurs dizaines voir centaines voir milliers de phrases exemple (positifs)
  • des dizaines voir centaines voir 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.

Ainsi il est 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 !

Un bon modèle NLP c’est comme le fromage, ça s’affine (et ça prend du temps) Like a Bot
Share : arrow_backReturn to blog home