Dans un post précédent, nous avons créé un bot et utilisé LUIS afin de router les différents messages de notre utilisateur en fonction de leur contenu. Depuis le service a été mis à jour avec un lot de nouveautés que je vous propose de découvrir !

Refonte de la documentation

Premier gros point positif à ne pas négliger : une refonte complète de la documentation. Moins succincte que la précédente, beaucoup mieux illustrée, mieux construite, elle permet d’apréhender plus sereinement LUIS.

On remarque notamment l’ajout d’une section How-to qui permet de rapidement prendre l’outil en main et de comprendre les concepts de base.

SDKs

Ajout de quatre SDKs :

Pour tirer parti de ces SDKs, il vous faut au préalable créer une application LUIS afin d’obtenir un appID et appKey. Ceci fait, les SDKs vous permettront de créer un client LUIS et de l’interroger en lui donnant des phrases à analyser.

Voici un petit exemple d’utilisation du SDK Node.js :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

const LUISClient = require("./luis_sdk");

const APPID = "Enter your Application Id here";
const APPKEY = "Enter your Subscription Key here";

var LUISclient = LUISClient({
appId: APPID,
appKey: APPKEY,
verbose: true
});

LUISclient.predict("Text à analyser", {

onSuccess: function (response) {
console.log(response);
},

onFailure: function (err) {
console.error(err);
}
});

Prebuilt domains (preview)

Actuellement uniquement disponible pour les applications Luis en langue ‘en-us’.

Depuis ce menu, on trouve une collection de modèles déjà entraînés et prêts à être intégrés à notre application !

Prebuilt domains

Ces modèles sont constitués d’intentions et/ou d’entités liés à un domaine particulier (méteo, taxi, divertissement, sport …), qu’ils savent déjà identifier. Cela signifie que des phrases d’exemple ont déjà été renseignées, associées aux bonnes intentions et que les entités ont été identifiées. En cliquant sur le lien “learn more” vous pouvez voir le contenu d’un domaine. Voici par exemple, le détail du prebuilt domain fitness :

Prebuilt domain Fitness

Une fois ajouté, on retrouve dans les menus adéquat les entités et intentions du domaine :

Ajout du domain Fitness

Quelques petites infos en rab :

  • un prebuilt domain peut contenir des entités et/ou intentions qui sont également contenus dans d’autre prebuilt domain. Par exemple, lorsqu’on ajoute le domaine “Fitness”, les domaines “Places” et “RestaurantReservation” sont marqués comme partiellement ajoutés car l’entité “MealType” existe au sein de ces trois domaines.
  • comme vous pouvez le voir sur l’image ci-dessus, il est possible d’ajouter unitairement des éléments d’un prebuilt domain dans les menus “Intents” et “Entities” avec les boutons : “Add prebuilt domain intents” et “Add prebuilt domain entity”. Les domaines seront la aussi marqués comme partiellement ajoutés.

Ajout de prebuilt entities

Voici l’ancien tableau des prebuilt entities :
Liste prebuilt entity

Et voici le nouveau :

Nouveau tableau des prebuilt entities

On remarque deux petits nouveaux :

  • Tempareture : vous permet de détecter une température écrite en celsius ou fahrenheit.
  • DatetimeV2 : remplace Datetime (dorénavant deprecated). Contrairement à son prédécesseur, il gère la résolution de date dans le temps (samedi dernier, la semaine prochaine, …) et les plages de dates. Pour plus d’info je vous conseille cet article.

Nouveau type d’entité : List

Ce quatrième type va nous permettre de rattacher une liste de mots en relation avec une entité. Quelles différences avec la Feature Phrase List ? La principale différence est que les termes dans une entité de type list ne sont plus reconnus en fonction de leur contexte, mais juste via une regex. Cela signifie également, qu’il n’est pas possible d’identifier une entité de type list dans une phrase d’exemple pour entraîner le modèle à la reconnaître.

En reprenant l’exemple du bot qui permet de commander des bières, nous avions utilisé la Feature Phrase list pour les différentes marques de bières. Nous avions renseigné plusieurs marques afin d’améliorer sa reconnaissance des marques. Grâce à cela, si je commande une “despe”, une “desperados” ou une “despados” il reconnaîtra que cela correspond à une marque.
A contrario, si j’utilise une entité de type liste (à la place du combo entité type simple + Feature Phrase list) il ne reconnaîtra pas une mauvaise orthograpghe d’une marque (à moins que celle-ci ne fasse partie de la liste).

Voici la réponse JSON de mon model en fonction de l’utilisation :

Entity List vs Phrase List

Nouveau menu : Settings

Ce nouveau menu apporte un tas de nouvelles possibilités, notamment dans le partage de son application LUIS :

  • rendre son application publique pour que les autres puisse l’utiliser avec leur propre clé.
  • cloner son application.
  • ajouter de nouveaux collaborateurs qui pourront éditer l’application.
  • exporter des anciennes versions de son application et les importer afin de downgrader son app par exemple.

Menu settings portail LUIS

Conclusion

Il reste quelques nouveautés sur lesquelles je ne me suis pas attardé :

  • support de nouvelle langues (Néerlandai, Coréen, …)
  • augmentation de la limite d’intentions (80) et d’entités (30) par application
  • amélioration de lra reconnaissance de plusieurs prebuilt entities.
  • ajout de dictionnaire semantique pour suggérer des valeurs lors de la saisie d’une entité de type list

On attend avec impatience le support des prebuilt domain pour d’autres langues :)

A très bientôt !