Comme vous le savez probablement, lorsqu’on parle d’Intelligence Artificielle, on parle forcément de données. Selon le type d’apprentissage utilisé pour entrainer l’IA, il peut être nécessaire d’annoter les données, c’est à dire de leur attribuer un label, une intention.
Dans un contexte NLP, pour comprendre certaines intentions, il est généralement nécessaire de disposer d’un nombre important de données. Lors de la mise en place d’un chatbot, nous rencontrons deux cas chez nos clients :
- Certains n’ont pas de données et veulent pouvoir créer des intentions pour comprendre les besoins de leurs utilisateurs. Afin de créer ces intentions, il sera nécessaire de générer suffisamment de données pour entraîner les modèles NLP (et parfois les performances ne seront pas suffisantes pour être exploitées, heureusement il existe des alternatives sans IA)
- Certains clients disposent en revanche de beaucoup de données (issues des différentes conversations passées) et veulent pouvoir en extraire des intentions pertinentes pour leur futur chatbot.
Toutefois, lorsque nous disposons d’un nombre trop important de données brutes, celles-ci deviennent difficiles à traiter par un humain.
L’annotation des données est donc une étape laborieuse mais non moins essentielle dans le processus d’élaboration d’un dataset pour entraîner un modèle d’apprentissage supervisé. Cette étape ne peut être faite que par un agent expert, un humain. Les algorithmes utilisés en NLP sont basés sur des méthodes récentes de deep learning qui nécessitent une grande quantité de données pour que le modèle puisse converger vers les résultats souhaités.
Quand on met en exergue le besoin d’une intervention humaine avec le besoin d’une grande quantité de données dans tout processus informatique, il est évident que l’intervention humaine sera le goulot d’étranglement du système.
Pour faciliter l’annotation d’une grande quantité de données, générer des jeux de données de qualité et donc des modèles performants, Like a Bot a mis en place un processus particulier.
Entraînement des modèles
La création d’un modèle en machine learning comprend une phase d’entraînement. Pour cela, il existe deux méthodes : l’apprentissage supervisé et l’apprentissage non-supervisé.
La méthode utilisée par Like a Bot est « hybride« , c’est-à-dire qu’elle tire partie des deux méthodes pour traiter un grand volume de données.
La mise en oeuvre de la démarche de machine learning adoptée par Like a Bot est constituée de trois étapes majeures :
Etape 1 : Sentence2vec
La conversion est une opération mathématique complexe qui consiste à convertir une suite de mots avec leur contexte (la phrase) en une représentation mathématique (un vecteur) qu’un algorithme pourra manipuler.
Lors du procédé de conversion, il peut s’avérer difficile de conserver la dimension sémantique des phrases. Par exemple, la phrase « je mange une pomme » et « je dévore une golden » devront garder leur proximité sémantique lors de la conversion.
Une fois cette étape réalisée, nous sommes en mesure d’associer des phrases par similarité syntaxique et de procéder au clustering.
Etape 2 : Le Clustering
Le clustering consiste à répartir des phrases, images, etc. (que l’on représente sous forme de points) en différents groupes selon leur distance sémantique. Chaque cluster (ou groupe de points) regroupe donc des données (phrases, images…) ayant le même sens. Cette méthode étant non-supervisée, l’algorithme va devoir déterminer par lui même la meilleure façon de regrouper les points en différentes catégories.
Imaginons par exemple que dans le visuel ci-dessous, le groupe de points bleus, ou cluster 0, regroupe des phrases signifiant « problème de de carte sim » et que le cluster 1, ou groupe de points orange, regroupe des phrases signifiant « vol de portable ».

Ce procédé est une méthode fiable permettant de classifier un grand nombre de données (phrases, images..).
Pour illustrer le fonctionnement de ce processus, nous allons nous baser sur des données issues de conversations pour des recherches/recrutement d’emplois vacants. Dans ce type de situation, nous disposons d’un nombre trop important de données pour que celles-ci puissent être traitées par un humain. La méthode évoquée dans cet article est donc adaptée à ce type de situation.
Tout d’abord, l’algorithme non-supervisé va séparer automatiquement les phrases dont il dispose en différentes catégories. Nous allons arbitrairement demander à l’algorithme d’isoler 50 catégories différentes contenant les phrases qu’il estime similaire.
Voici quelques-unes de ces catégories obtenues :

Etape 3 : Interprétation
Une fois que ces catégories ont été déterminées par l’algorithme de clustering, il faut les interpréter en analysant leur contenu. On distingue trois types de catégories :
- Complète : la catégorie permettra de créer une intention avec son contenu
- Incomplète : la catégorie permettra de créer une intention si elle est fusionnée avec une autre catégorie contenant des phrases proches
- Inutile : la catégorie ne permettra pas de créer une intention car les phrases qu’elle contient sont incohérentes.
Au cours de cette phase d’interprétation, c’est l’occasion de “nettoyer” les catégories des erreurs de l’algorithme de clustering en supprimant certaines phrases.
Dans notre exemple, on va alors avoir 2 catégories complètes et 2 catégories incomplètes qui vont être fusionnées.
On obtient ainsi 3 catégories pour avoir 3 modèles de détection des intentions « Etre disponible », « Merci », « Non Disponible ».

Une fois que les intentions de chaque catégorie sont déterminées, l’entrainement supervisé des modèles peut commencer. Nous allons classifier les phrases positives (qui renferment l’intention voulue) et négatives (qui ne renferment pas l’intention voulue).
Cette étape est cruciale car elle montre toute la puissance de cette méthode. En effet, comme nous travaillons catégorie par catégorie, la vitesse d’annotation est décuplée, notamment quand il s’agit de supprimer des catégories entières.
Par exemple pour l’intention “non disponible” déterminée avec l’association des catégories 3 et 4, nous allons prendre comme exemples positifs toutes les phrases des catégories 3 et 4 et comme exemples négatifs toutes les phrases des autres catégories, notamment les catégories 1 et 2.
Utilisation du modèle
Une fois le modèle entraîné à détecter différentes intentions grâce à la méthode de classification (positif/négatif), nous pouvons témoigner de ses performances en le testant sur des phrases inédites.
Le modèle va prédire la probabilité que la phrase soit positive (renferme le l’intention voulue) en donnant un score entre 0 et 1. Plus le score est élevé, plus il y a de chance que la phrase soit positive. Quand le score est supérieur à 0.5 nous considérons que la phrase est positive. Ce seuil est modulable et peut être augmenté afin d’obtenir une marge de sécurité plus importante.
Par exemple : si le score de prédiction de l’intention « non disponible » est de 0.7, cela veut dire que le modèle estime qu’il y a 70% de chances que l’intention soit présente dans la phrase :
- Non je ne peux pas (score: 0.76) : l’intention est bien détectée
- Je suis disponible (score: 0.14) : l’intention n’est pas détectée
Conclusion
L’apprentissage non-supervisé est une méthode souvent délaissée en NLP. Pourtant, celle-ci permet d’assister l’humain en matière d’annotation d’un grand nombre de données. Une intervention humaine reste nécessaire afin d’interpréter ces catégories pour en déduire des intentions utilisables dans un chatbot.
Concernant cette intervention humaine, il est possible d’améliorer le procédé actuel avec des méthodes de visualisation qui permettent de mettre en évidence les catégories incomplètes afin de les fusionner. Il est également possible d’anticiper des potentiels points de confusion entre des intentions en calculant la similarité syntaxique entre deux clusters.