De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (1/5).
Introduction
Des progrès spectaculaires ont été réalisés sur la dernière décennie dans le domaine du traitement du langage naturel : Siri, Alexa et Google Home sont apparus, Google translate s’est amélioré. GPT-3 d’OpenAI est au minimum bluffant (un exemple ici si vous n’êtes pas inspirés pour produire du contenu1) et frise l’effrayant2 !
Également, les réseaux convolutionnels facilitent grandement la reconnaissance ou la classification d’images là où auparavant il était nécessaire de mettre en œuvre beaucoup d’ingénierie. À ce sujet, une rétrospective du challenge ImageNet montre les progrès spectaculaires accomplis depuis 2010.
Aujourd’hui, nous avons donc à notre disposition de très nombreux algorithmes capables de résoudre des problèmes complexes qui, auparavant, n’avaient pas de solution viable. Ces progrès ont été obtenus grâce aux efforts conjugués de la recherche tant universitaire que privée. Ce qu’il y a de particulier, c’est que ces efforts ont été menés dans un cadre communautaire et qu’en grande partie ces résultats (on parle de modèle) sont librement accessibles par exemple sur le hub de tensor flow.
La mise au point de ces modèles se fait notamment par une phase d’apprentissage, à partir de jeux de données en général gigantesques. Cela requiert des puissances de calcul et des capacités de stockage souvent considérables et hors de portée pour la plupart des organisations. Bonne nouvelle cependant pour ceux qui ne gravitent pas dans les milieux de la recherche ou des géants du web : une fois leur mise au point achevée, l’exploitation de ces modèles ne nécessite pas une telle débauche de puissance, à tel point que certains de ces modèles3 peuvent être utilisés dans le navigateur ou sur un mobile ! Si la phase de mise au point peut demander des semaines de calcul, l’obtention d’un résultat pour une donnée fournie est inférieure à la seconde.
Nous disposons donc d’un nouvel arsenal d’outils pour élaborer ou améliorer les solutions que nous mettons en œuvre pour nos utilisateurs.
Cependant, l’algorithme en lui-même n’est qu’un élément de la solution et il est souvent nécessaire d’ajouter d’autres éléments à la chaîne de traitement afin d’obtenir une solution exploitable.
Cette série d’articles propose d’illustrer cette démarche sur un exemple concret : nous allons utiliser un modèle de traitement du langage naturel. Ses propriétés vont nous permettre de construire un moteur de recherche, qui va plus loin que le mot-à-mot, prend en compte les synonymes et fonctionne sur plusieurs langues. Étonnant non 4?
Au passage, nous nous arrêterons sur certains concepts importants afin d’en faciliter la compréhension.
Le défi : les moteurs de recherche (Elasticsearch par exemple) que nous mettons à disposition de nos utilisateurs sont capables de donner des résultats qui contiennent les mots donnés par l’utilisateur. Cependant, ils ne sont pas en mesure de donner des résultats ayant un sens équivalent et ne contenant pas forcément les mots de la requête5.
Par exemple, si je cherche une “baraque typique pas chère” je n’aurais pas le résultat “maison de caractère bon marché” qui est pourtant contenu dans le système et encore moins “typical cheap hut”.
Ce qu’on commence à voir ici, c’est que le moteur de recherche raisonne sur les mots, alors que l’utilisateur raisonne sur des concepts (si, si !). L’outil et le besoin ne sont pas très bien alignés : on va essayer de corriger le tir.
C’est ici qu’intervient l’algorithme qui va nous intéresser : il va être en mesure de “découvrir”, “capturer” le sens du texte et nous permettre ainsi d’améliorer la qualité des réponses de notre système.
Mais comme nous le verrons, la solution ne s’arrête pas là : il nous restera encore du chemin à parcourir pour pouvoir exploiter ce “sens” qu’a “découvert” l’algorithme.
Voici comment va se dérouler cette série d’articles :
- Comprendre ce que signifie le résultat de l’algorithme que nous utilisons et donner quelques éléments de compréhension du fonctionnement de cet algorithme.
- Ébaucher une architecture technique pour notre solution.
- Faire une première implémentation puis identifier ses limites.
- Améliorer cette solution en utilisant une technique d’optimisation.
Voici en avant-goût ce que nous aurons au menu :
Nous utiliserons l’Universal Sentence Encoder Multilingual, dont l’implémentation en Tensorflow est disponible librement sur Tensor Hub.
Python étant le langage de prédilection des data scientists en général et de Tensorflow en particulier, nous ne ferons pas preuve d’originalité ici et nous l’utiliserons dans tout le code que nous verrons.
Afin d’exploiter les résultats de cet algorithme, nous verrons que la notion de similarité nous sera utile pour résoudre notre problème. Nous verrons au passage que c’est une notion géométrique !
Dans le domaine des moteurs de recherche, Elasticsearch est une solution très populaire. Depuis la version 7.6, il est en mesure de manipuler des structures de données identiques à ce que produit notre algorithme, à savoir des vecteurs de grandes dimensions.
Pour améliorer notre première implémentation, nous utiliserons enfin l’algorithme LSH (Local Sensitivity Hashing) : il est bien adapté aux spécificités de notre problème, simple à comprendre et en plus, point de vue personnel, il est élégant.
Dans le prochain article, nous verrons ce qu’il y a derrière l’algorithme : nous parlerons de modèles de langage.
(1) Non l’idée de cet article n’a pas été donnée par cet outil 😉
(2) Parler d’IA et l’utiliser ne nous empêche pas d’avoir une approche critique. Ces points ne seront pas abordés ici. Si le sujet vous intéresse, je vous suggère cette playlist sur la chaîne youtube Science4All de Lê Nguyên Hoang.
(3) On utilise souvent le terme “inférence” : le modèle produit un résultat (on dit aussi une prédiction) à partir de la donnée qu’on lui soumet.
(4) ©Pierre Desproges
(5) Il est possible avec elasticsearch d’améliorer ceci en fournissant un dictionnaire de synonymes, sans pouvoir prétendre cependant à l’exhaustivité, mais cette approche peut avoir toute sa pertinence dans des cadres spécifiques (domaines métier spécialisés par exemple)
Ping : De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (2/5). – Blog Zenika
Ping : De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (3/5). – Blog Zenika
Ping : De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (4/5) – Blog Zenika
Ping : De l’algorithme à la solution : un exemple d’exploitation d’un algorithme d’intelligence artificielle (5/5). – Blog Zenika