La société Deeplink est une startup d’intelligence artificielle spécialisée dans la technologie "chatbot". Cette entreprise utilise beaucoup le NLU (Natural Language Understanding) pour déterminer l’intention de l’utilisateur lorsqu’il communique avec le "chatbot". Actuellement la solution NLU est hébergée sur un serveur dédié et les échanges entre celle-ci et le client se font par requêtes http.
L’idée de ce projet consiste à faire tourner directement la solution NLU sur le navigateur du client. Avec une idée pareille, on assure qu’aucune requête contenant des données sensibles ne soit envoyée vers un serveur externe puisque l’inférence du modèle se fait sur le navigateur. En plus d’assurer une confidentialité bien plus sécurisée, si on déplace l’inférence du modèle on devrait obtenir de meilleure performance en termes de latence, d’extensibilité et on pourrait dans le futur développer des modèles personnaliser pour chaque personne.
Le premier défi de ce projet est l’analyse des systèmes et des outils existants qui vont permettre de déplacer l’inférence du modèle on edge. Il existe beaucoup de librairie Javascript qui permette de réaliser des tâches de machine learning. Il faut analyser lesquelles permettent de charger des modèles qui vont effectuer de la classification de texte. Trois modèles ont été retenus : ULMFiT de fastai, DistilBert de Huggin Face et Universal Sentence Encoder de Tensorflowjs. Ce sont ces modèles qui seront chargés sur le navigateur du client. Attention, seule l’inférence du modèle est réalisée sur le navigateur par l’entraînement de celui-ci.
Une fois les recherches terminées, le gros travail du projet peut commencer : la réalisation d’un prototype permettant de faire tourner l’inférence d’un modèle sur le navigateur. Ce deuxième défi débute avec l’entraînement des modèles sur un dataset fourni par Deeplink. Les modèles entraînés doivent être capable de déterminer l’intention d’un texte parmi 28 intentions définies. Une fois les modèles entraînés, on arrive à l’étape délicate qui est l’exportation des modèles. C’est ici que les problèmes ont commencé. Finalement sur les trois prototypes prévus, j’ai dû abandonner les prototypes avec ULMFiT et DistilBert pour des problèmes de conversion de modèle et d’opérateurs non supportés par les librairies Javascript.
Le dernier défi du projet est l’évaluation de la solution trouvée. Puisque seul un prototype a abouti, il est impossible de faire une comparaison. Cependant, après avoir comparé les modèles sur les données de Deeplink, le modèle Universal Sentence Encoder est le moins performant mais il obtient tout de même une précision supérieure à 80%. La solution trouvée utilise ce modèle et obtient de bons résultats. Cependant le gros point négatif de cette solution est le temps d’inférence du modèle. Sur 20 phrases, le modèle met en moyenne 3,2 secondes à répondre à l’utilisateur. C’est un très gros défaut pour un chatbot qui se doit d’être réactif pour garder l’attention de son interlocuteur. L’idée de déplacer l’inférence sur le navigateur comporte de très bons arguments cependant les résultats ne sont pas à la hauteur.