La conférence Microsoft Build 2018 a été l’occasion de nombreuses annonces, dont celle de la fin de la Preview d’un produit disponible depuis plusieurs mois, autour de la notion de question / réponse ou FAQ : QnA Maker.

Ayant eu l’occasion d’utiliser de manière assez poussée la version Preview, je vous propose dans cet article de vous détailler les principaux changements apportés par l’officialisation du produit ainsi que quelques pistes utiles pour son utilisation.

 

Qu’est-ce que QnA Maker ?

Le terme QnA pour Questions and Answers, trouve son équivalent français avec la FAQ, pour Foire Aux Questions. Cela vous parle certainement, c’est en effet au travers des rubriques du même nom que l’on retrouve souvent sur le web, les réponses fréquentes des utilisateurs d’un site ou d’un service SaaS.

 

QnA Maker par Microsoft

QnA Maker est un service proposé par Microsoft et disponible dans Azure au sein des Cognitives Services et qui permet de créer des bases de connaissances sans utiliser du code. Ces bases peuvent être alimentées par différents moyens, notamment :

  • Des fichiers regroupant des questions et réponses
  • Des documents structurés
  • Ou encore des URLs.

La capacité d’extraction des couples de questions / réponses de sites tiers existants est parfois bluffante : on peut ainsi simplement fournir un lien et l’outil se charge d’aller lui-même extraire les informations nécessaires pour former les couples de questions et réponses.

QnA Maker est fréquemment associé au Microsoft Bot Framework pour fournir une solution de bot FAQ rapidement disponibles sur de nombreux canaux.

 

Les défauts de la Preview

Il y a plusieurs mois, nous avons eu l’occasion de nous intéresser à cet outil dans le cadre de plusieurs projets de clients. Du fait de cette expérience, nous avons pu constater :

  • Des restrictions très importantes en termes de quotas d’appels (seulement quelques appels par minute autorisés).
  • Le manque de possibilité de pondération des questions / réponses trouvées par le produit.
  • L’absence d’identifiant unique pour chaque entrée, rendant l’administration bien plus compliquée.
  • Des résultats parfois surprenants, pour ne pas dire incorrects.

 

Évolutions avec la sortie “Generally Available

Modification de l’architecture de la solution

Le gros changement apparu avec la version GA réside dans la répartition des rôles :


Architecture QnA Marker Generally AvailableArchitecture phase “Preview” vs “Generally Available”

Comme détaillé sur le schéma ci-dessus, une bonne partie des informations sont désormais hébergées dans votre propre infrastructure Azure. Auparavant, elles étaient du côté de Microsoft.

Ce changement est visible notamment au niveau des APIs proposées par QnA Maker :

  • API v1 / v2 (QnA Maker Preview) :
    • Toutes les opérations sont hébergées par Microsoft, avec comme point d’entrée “https://westus.api.cognitive.microsoft.com/qnamaker/v2.0” (détails de l’API v2 ici)
  • API v4 (QnA Maker Generally Available) :
    • Les opérations de gestion des bases de connaissances sont toujours hébergées par Microsoft, avec comme point d’entrée “https://westus.api.cognitive.microsoft.com/qnamaker/v4.0” (détails de l’API v4 ici)
    • Les opérations de requête de la base (GenerateAnswer) sont hébergées sur votre endpoint !

Remarque : vous aurez remarqué que je n’ai volontairement pas cité l’API v3. En effet, Microsoft n’a jamais vraiment communiqué sur cette dernière qui contenait certaines fonctionnalités avancées (metadata) mais qui n’étaient pas administrables via le portail d’administration qnamaker.ai.

Cette nouvelle architecture répond à plusieurs problématiques :

  • Confidentialité des données, surtout en cette période d’entrée en application du RGPD.
  • Transfert des problématiques de seuils d’appels / consommation sur votre infrastructure Azure.
  • Une mise à l’échelle facilitée.

 

Nouveau type de ressource Azure

Nouveauté allant de pair avec ce changement d’architecture, il y a désormais une ressource de type “QnA Maker” dans votre portail Azure :

QnA Maker dans votre portail AzureRessource Azure QnA Maker

Cette ressource se trouve dans la famille “AI + Machine Learning”, rubrique “Cognitive Service” aux côtés de LUIS, Face API ou encore Computer Vision.

 

Amélioration du fonctionnement de la recherche

S’il est bien un point qui nous posait problème dans la Preview, c’est la recherche, ou plutôt la qualité des réponses proposées en raison de la méthode employée pour calculer le score. Imaginons cet exemple concret, avec une base à 2 entrées :

  • Question 1: “I want a car” avec sa réponse “You could rent a car at MyRentalCompany”
  • Question 2 : “How can I get a sandwich?” et sa réponse “Are you hungry?”

En Preview, si vous demandiez “How can I get a car?” (vous noterez le mélange des 2 questions de la base, avec une majorité de mots de la 2ème question), le moteur QnA Maker vous aurait probablement répondu… avec la réponse 2 “Are you hungry?” bien que le sens de la question se rapproche de la question 1 !

 

Modification du calcul du scoring

En effet, le scoring était basé sur une tokenisation simple de la question, où chaque mot n’a pas forcément plus de sens qu’un autre. Changement en Generally Available, il y a maintenant de l’Azure Search sous le capot, avec une utilisation d’analyseurs de langages : cela permet de rechercher une cohérence dans le sens des phrases au lieu d’une proximité simple de mots sans leur “sens”.

Attention, toutes les langues ne possèdent pas les mêmes optimisations : allez jeter un œil sur l’article de la documentation Microsoft à ce sujet ici ! Vous y trouverez notamment l’explication de la différence entre les analyseurs Lucene et Microsoft.

 

Nouveau format de QnA

Un point important de l’amélioration du scoring réside aussi dans la mise à disposition de metadatas au niveau de la base de connaissances. On a donc maintenant une structure à cette image :

QnA Maker knowledge bases

A quoi cela sert-il ? Tout simplement à adapter le scoring de chaque item de la base en fonction de paramètres. On peut désormais ajouter un filtre par rapport à ces données lors de l’appel à GenerateAnswer, appelé strictFilters. Exemple :

  • { “question”: “parking in town”, “top”: 6, “strictFilters”: [ { “name”: “Location”, “value”: “Seattle” }], “userId”: “azdo545=” } renverra bien cette réponse car on a le couple Location: Seattle
  • { “question”: “parking in town”, “top”: 6, “strictFilters”: [ { “name”: “Location”, “value”: “Paris” }], “userId”: “azdo545=” } ne renverra pas cette réponse, ou alors avec un score faible

 

Autres pistes d’améliorations des résultats reçus

En complément des metadonnées, il y a d’autres moyens de faire progresser votre base de connaissances. Pour cela, il faut entrer dans les fonctionnalités d’Azure Search, notamment sur la gestion des indexes.

 

Amélioration continue ?

Pour ceux qui ont joué avec la version Preview, vous aurez probablement rencontré le cas de réponses ayant un score trop proche. La bonne pratique est de proposer la liste des questions correspondantes puis laisser l’utilisateur choisir celle qui lui semble convenir. Ensuite, on remonte ce choix au modèle grâce à une opération nommée “Train” sur l’API.

Eh bien, sachez que cette opération n’existe plus dans la v4 ! Suite à de nombreuses questions sur les forums comme StackOverflow, j’ai créé un ticket sur Github (ici) pour connaître le point de vue officiel des équipes de développement du produit. Voici leur réponse :

We do not have the train API in V4. We are re-thinking this feature and will re-enable an advanced version in a future release.

Affaire à suivre !

 

Tuto : créez et exposez votre base de connaissances

Passons à la pratique !

 

Les grandes étapes pour créer votre QnA Marker

  1. Paramétrage de votre compte QnA Maker dans le portail Azure (nouveauté par rapport à la Preview)
  2. Création de votre base de connaissances via le portail web QnA Maker
  3. Édition et entraînement de votre base de connaissances via le portail web QnA Maker
  4. Publication de votre base de connaissances via le portail web QnA Maker
  5. Utilisation !

Évidemment, tout ce qui est fait sur le portail web QnA Maker peut être fait via l’API QnA Maker v4.0 et quelques lignes de code, dans votre langage favori.

 

Cycle de vie de votre base de connaissances

Un point important : c’est bien à vous de relancer l’entraînement et la republication de la base de connaissances ; le fait d’ajouter une nouvelle entrée ne fera pas ces opérations automatiquement.

Authoring cycle QnA maker

 

Étape 1 – Paramétrage de votre “service” QnA Maker

  • 1a – Connectez-vous sur le portail Azure
  • 1b – Créez une nouvelle ressource de type “QnA Maker” (comme vu plus haut, on les retrouve dans la catégorie “AI + Cognitive Services”)

 

Create a new QnA Maker service

 

  • 1c – Saisissez les informations nécessaires :

Create a new QnA Maker service

 

Remarque : à cette étape, il est important de distinguer et de bien choisir le Management pricing tier et Search pricing tier que l’on sélectionne. Le 1er correspond aux capacités de l’API (limites d’appels et nombre de documents autorisés à l’import), le 2nd concerne les propriétés d’Azure Search : taille de données, nombre d’index créés, etc.

  • 1d – Validez la création

Create a new QnA Maker service Azure

 

On constate la création des éléments ci-dessous, dont 1 ressource “Search Service” pour la partie recherche et 1 App Service (et son App Service plan) pour la partie hébergement d’API.

 

Étape 2 – Création de votre base de connaissances

Rendez-vous sur qnamaker.ai.

  • 2a – Connectez-vous avec le compte qui vous sert pour le portail Azure, afin de retrouver facilement les éléments que vous venez de créer
  • 2b – Lancez la création d’une nouvelle base de connaissances :

Create new Knowledge base QnA Maker

 

  • 2c – L’écran détaille les étapes : Step 1, nous venons de le faire ! Au Step 2, choisissez le service QnA que vous venez de créer à l’étape 1 : si vous vous êtes bien connecté avec le même identifiant, vous devez normalement pouvoir le sélectionner. Cela permettra ensuite de “publier” votre FAQ sur ce site.

Select a QnA service KB

 

  • 2d – Nommez votre base de connaissances : pas besoin de capture pour cette étape !
  • 2e – Peuplez votre base. Pour cela, le portail vous propose plusieurs moyens :
    • Renseignement d’URL : la page indiquée sera parsée pour détecter des templates de questions/réponses
    • Import de fichiers (attention, le nombre de documents est limité ainsi que leur taille par le “management pricing tier” défini à la création du service)
    • Vous pouvez également créer une base vide en ne renseignant rien à cette étape !
  • 2f – Création !

La création peut prendre quelques minutes selon le contenu que vous mettez.

 

Étape 3 – Édition et entraînement de votre base de connaissances

Une fois votre base créée, vous avez bien évidemment la possibilité d’administrer ces données (adapter les questions ou réponses, ajouter des questions similaires, éditer les métadonnées, etc.) : le portail web est assez intuitif sur ce point. Une fois adaptée à vos souhaits, cliquez sur “Save and train”.

La phase de test est également importante pour s’assurer que votre base est correcte : c’est à ce moment que l’on détecte la nécessité d’ajout de questions similaires ou de métadonnées.

 

Étape 4 – Publication de votre base de connaissances

Une fois que vous avez une base correcte, il est temps de la publier. Cette opération consiste principalement à migrer les index dans Azure Search.

Publish prod test index

Rassurez-vous, c’est juste un bouton à cliquer (ou une opération de l’API à appeler pour ceux qui préfèrent le code).

Une fois publiée, un petit écran récapitulatif vous donne des informations utiles :

Publish knowledge base

 

Étape 5 – Utilisation : exemple dans un bot

L’écran en fin de publication détaille la manière de requêter votre base de connaissances, cela passe par une requête HTTP de type POST, qui pointe vers votre web app sur l’opération “GenerateAnswer“. Le contenu json envoyé est simple : il s’agit de la question recherchée.

Ce fonctionnement permet l’utilisation dans des projets de types très variés, mais comme je le disais en début d’article, l’usage typique de QnA Maker se trouve au sein d’un bot. Attardons nous à ce cas précis. Là encore, Microsoft a prémâché le travail des développeurs en fournissant des ressources Azure prépackagées !

 

Bot framework – Template QnA Maker

En effet, lors de la création d’un Bot (type Web App Bot), Microsoft donne le choix parmi 5 templates :

bot service selection

 

Le template “Question and Answer” contient la base de l’implémentation d’un appel à QnA Maker ; il ne reste qu’à fournir à la ressource 3 paramètres :

app settings

 

Ces paramètres sont visibles dans l’écran en fin de publication.

 

Changement entre consommation v2 Preview vs v4 Generally Available

La transition a été opérée de manière intelligente : les mises à jour des packages utilisés n’ont pas entraîné de “breaking changes”. Les différences sont les suivantes :

  • Le champ “QnAKnowledgebaseId” est identique
  • Le champ “QnAAuthKey” remplace la clé Ocp-Apim-Subscription-Key utilisée précédemment. Le format est donc :
    • “Endpoint + clé d’endpoint” pour la v4, la valeur de l’Ocp-Apim-Subscription-Key (récupérable dans l’ancien portail) pour la v2
  • Le champ “QnAEndpointHostName” permet de préciser le nom de votre API : il est nouveau, tout étant hébergé par Microsoft précédemment.

Conclusion

Dans cet article, nous avons pu parcourir les grands changements apportés au produit QnA Maker de Microsoft et constater l’évolution depuis la Preview, pour ne pas dire révolution ! Une recherche grandement améliorée, mieux administrable, bref, un produit bien plus efficace.

Pour finir, je vous ai présenté un rapide tutoriel sur l’utilisation du produit dans le cadre du Bot Framework.

N’hésitez pas à me faire part de vos retours, que cela soit sur l’utilisation du produit en lui-même ou par rapport au contenu de cet article !

 

Quelques liens utiles

Pour finir, la traditionnelle liste de liens utiles autour de ce sujet :

Livre Blanc Cell'insight 7 Cognitive Services