Comment un opérateur de saisie ADV est promu à un rôle d’opérateur de contrôle grâce à LUIS et Flow ? (1/2)

Posted by
English version available here

N’avez-vous pas remarqué le discours permanent de Microsoft orienté autour de l’IA ? Probablement que si, et si vous lisez cet article cela signifie que vous portez de l’intérêt à ce que Microsoft conçoit de nouveau aussi bien pour son ERP que pour des fonctionnalités d’IA. Aujourd’hui on va s’intéresser à LUIS (Language Understanding Intelligence Service), qui est un service de « machine learning » basé sur la détection et l’interprétation du langage naturel au sein de chatbox, IoT, et applicable également pour l’ERP.

En quelques mots, LUIS est capable d’analyser la voix, le contenu d’un mail… et de trouver quelle intention est détectée dans ce mail, en fonction du paramétrage réalisé mais également de l’apprentissage qu’il aura effectué.

Ici, si l’on publie un article, c’est qu’on a connecté LUIS à Microsoft Dynamics 365 pour la finance et les opérations pour implémenter un processus end to end. Par exemple, voici deux cas d’utilisation possible :

  • Jean n’a pas accès à l’ERP et souhaite commander un nouvel ordinateur portable. Il envoie un email à Pierre, qui est en charge de la création des demandes d’achats. LUIS analyse le contenu du mail et grâce à Flow, une demande d’achat est créé pour Jean par Pierre.
  • Jules est un client de la société Contoso (qui est équipée de l’ERP, cela va de soi). Lorsqu’il envoie ses besoins en commande par mail à Bernard, qui est le responsable de la saisie des commandes de vente, LUIS analyse et détecte l’intention de créer une commande et une commande de vente est créée dans l’ERP avec les bonnes informations.

Découvrons à présent les principaux concepts de la solution LUIS.

Apps

La première chose à initier c’est l’apps, ce qui correspond à un projet de travail.

Intents

Puis il faut créer son ou ses intentions, appelé intent. C’est très important et structurant pour la suite. En analysant le contenu d’un message, LUIS va trouver ou essayer de trouver quelle est l’intention du message. Pour notre exemple, nous avons construit un seul intent qui est la création d’une commande client. Si on avait voulu aller plus loin, on aurait pu créer l’intention de créer un devis par exemple.

Comme vous pouvez le voir, il faut également un intent par défaut, ici None.

Recherche des données : Utterance et Pattern

A présent il faut trouver la façon dont on va chercher les données. Il y a 2 possibilités pour ce faire, via les uttérances et les modèles (patterns).

Utterance : C’est un exemple d’un intent. C’est très simple à créer et cela fonctionne plutôt bien, y compris avec un mapping partiel lors des tests (on le verra par la suite). Par contre, ce n’est pas très puissant comparé aux Patterns.

Patterns : Les patterns ressemblent aux Utterances, mais c’est beaucoup plus strict (parfois à un accent près le pattern n’est pas trouvé) mais également plus puissant.

Concept recherché dans le texte : entité

Avez-vous remarqué le surlignage de certains mots dans les précédentes captures d’écran ? Ce sont les entités, le concept que l’on va rechercher.

Il existe différent types d’entités :

  • Simple: basée sur les uttérances. On ne les utilise pas ici.
  • List: comme on peut le voir ci-dessous, il est possible d’y ajouter d’autres valeurs, parfois suggérées, et également de positionner des synonymes.

  • Regex: on peut y paramétrer des expressions régulières. Si on connait bien la syntaxe, cela peut être un bon outil.
  • Prebuilt: il existe un certain nombre d’entités prédéfinies (Date, Nombre, Montaire…) qu’on peut utiliser. Pour chacune d’entre elles on va leur attribuer un rôle précis, ce qui sera très utile pour l’exploitation des patterns.
  • Composite: utilisé si l’on veut établir une hiérarchie entre les entités.
  • Pattern: si l’on cherche une partie non définie dans une phrase. Ce n’est pas très précis mais on peut isoler un grand morceau de phrase.

Tests et entrainement

Place aux tests. Je vais lancer en test la phrase suivante : « bonjour monsieur, il me faudrait 5 ordinateurs de type C0004 à livrer pour le 18/08/2018 ».

Le résultat est clair, l’intention de créer une commande client a été détectée, avec une certitude de 84%. Par contre, aucun pattern n’a été trouvé. On remarque les entités qui ont été détectées également et les valeurs allouées. C’est une des limites des uttérances, car par exemple l’entité number a été trouvée plusieurs fois, avec des valeurs comme 18, 5 ou 08/2018 (plus étrange). Quoi qu’il en soit, ce résultat est difficilement exploitable pour affecter un « number » à une action puisqu’on ne sait pas sur lequel se baser.

Changeons de test :

Ici, le pourcentage de certitude est faible, à 32%. Ce n’est pas assez pour être sur de l’intention. Dans ce cas, on va rendre LUIS plus intelligent en ajoutant ce cas comme une utterance de l’intent de création de la commande client.

Il faut entrainer l’apps ensuite. Après quoi, le résultat de la phrase est bien plus concluant, avec 96% de certitude, et une nouvelle utterance a été créée.

Enfin, encore un nouveau test :

Ici, on remarque que le score est de 100% et qu’un pattern a été détecté. Cela signifie également qu’on a envoyé en entrée exactement la bonne phrase. Dans les entités number et datetimeV2, on notera qu’un rôle est associée à la bonne date et la bonne quantité à commander. C’est beaucoup plus intéressant pour l’exploitation future de ces données.

Limites

A ce jour, la principale frustration est qu’il n’est pas possible d’entrainer LUIS pour faire correspondre une phrase à un pattern. On le fait uniquement sur des utterances. Si on a un accent qui manque, on devra donc créer un nouveau pattern. Il y a d’autres petites choses qui manquent mais globalement pour un outil très jeune, c’est très prometteur pour le futur. Sans compétences techniques particulières, on peut déjà faire des choses intéressantes.

Suite de l’article ici

Yohann ROLLAND & Guillaume FAGES

2 comments

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.