Les 7 familles de l'intelligence artificielle et leurs implémentations en Python
Python s'est imposé ces dernières années comme le langage le plus populaire pour l'intelligence artificielle (IA).
Quelles sont les principales technologies et domaines d'application pertinents ?
A la lumière de notre expérience de Python et du machine learning (apprentissage automatique), ainsi que d'autres technologies clefs de l'IA, nous allons tenter de dégager un panorama du domaine.
Plan de ce post
On peut distinguer sept grandes approches et applications de l'intelligence artificielle :
- Les systèmes experts : ils utilisent des règles de logique formelle pour simuler le raisonnement humain dans un domaine spécifique, en répondant à des questions ou en résolvant des problèmes.
- L'apprentissage automatique supervisé : ces algorithmes apprennent à partir de données étiquetées, c'est-à-dire pour lesquelles la réponse attendue est connue à l'avance, pour réaliser des tâches telles que la reconnaissance de formes, la classification ou la prédiction.
- L'apprentissage automatique non supervisé : ces algorithmes découvrent des structures ou des relations dans des données non étiquetées, sans supervision humaine, pour effectuer des tâches telles que la segmentation ou la réduction de dimensionnalité.
- L'apprentissage par renforcement : ces algorithmes apprennent à partir d'interactions avec un environnement dynamique, en maximisant une récompense ou en minimisant une pénalité, pour effectuer des tâches telles que la planification ou la prise de décision.
- Les réseaux de neurones artificiels : ils sont inspirés par le fonctionnement des neurones biologiques et permettent de modéliser des fonctions complexes à partir de données, pour effectuer des tâches telles que la reconnaissance d'images ou le traitement du langage naturel.
- Le traitement du langage naturel : utilise des techniques d'analyse de texte pour comprendre le langage humain et réaliser des tâches telles que la traduction automatique, la génération de texte ou la compréhension de requêtes.
- Les systèmes multi-agents : simulent le comportement de plusieurs agents, tels que des robots ou des personnes, pour réaliser des tâches de manière coopérative ou compétitive, en utilisant des techniques de coordination, de planification et de négociation.
Systèmes experts en Python
Un système expert est un système informatique qui utilise des connaissances et des règles pour résoudre des problèmes dans un domaine spécifique. Ils visent à imiter le raisonnement humain en utilisant des règles de décision basées, d'une part, sur des données et, d'autre part, sur des connaissances d'experts d'un domaine particulier.
Il existe de nombreux projets intéressants de systèmes experts en Python ou utilisables depuis Python. Ils se basent en général sur des moteurs de règles et sur l'algorithme Rete. En voici quelques exemples :
- Experta : une bibliothèque Python pour construire des systèmes experts fortement inspirés de CLIPS, fork de Pyknow (cf. infra).
- CLIPS : un système expert écrit en C, développé depuis 1985 par la NASA. Il est possible de l'utiliser depuis Python grâce au projet Clispy.
- pyknow : une bibliothèque de système expert basée sur les règles pour Python, facile à utiliser et à étendre. Ce projets n'est malheureusement pas maintenu depuis 2018.
- Nools : une bibliothèque JavaScript pour les systèmes experts, mais qui dispose également d'une interface Python pour les développeurs qui préfèrent utiliser Python. Ce projet n'est plus maintenu depuis 2018.
- pyke : un moteur de règles Python qui fournit des fonctionnalités telles que la rétroaction, l'héritage et les règles de modèles. Ce projet n'est pas maintenu depuis 2010.
- Intellect. Ce projet n'est pas maintenu depuis 2012.
Domaines d'application
Ces projets peuvent être utilisés dans de nombreux domaines, notamment la médecine, le droit, la finance et l'ingénierie. Ils peuvent être utilisés pour diagnostiquer des maladies, pour aider à la prise de décisions financières, pour aider à l'élaboration de plans de construction, pour aider à la planification de la production dans l'industrie, et dans de nombreux autres cas où l'expertise humaine est nécessaire.
Notre commentaire
Comme on peut le voir, les projets identifiés ci-dessus sont pour la plupart abandonnés ou au point mort.
Cela peut s'expliquer par l'histoire du domaine:
Les premiers systèmes experts ont été développés dans les années 1960 et 1970, d'autres systèmes experts ont été développés dans des domaines tels que la chimie, la médecine, la planification de la production, la finance et la gestion de la qualité.
Le terme "système expert" a été introduit en 1979 par les chercheurs en IA Edward Feigenbaum et Pamela McCorduck dans leur livre "The Fifth Generation: Artificial Intelligence and Japan's Computer Challenge to the World". Les années 1980 ont été l'âge d'or des systèmes experts, avec un grand nombre de projets de recherche et de développement dans ce domaine. On a alors parlé d'un "boom de l'IA".
Cependant, les systèmes experts ont progressivement rencontré des limites, notamment en raison de la difficulté de capturer toutes les connaissances et les règles d'expertise d'un domaine, ainsi que de la difficulté à gérer l'incertitude et l'incomplétude des informations. Le "boom de l'IA" a été suivi en 1987 d'un "hivers de l'IA". Ce n'est qu'avec l'avènement de l'apprentissage automatique et des réseaux de neurones, à partir des années 2000, que la recherche en IA a repris son essort, en s'éloignant progressivement des systèmes experts au cours des années.
L'approche par moteur d'inférence reste cependant importante pour certains domaines d'applications, lorsque l'une ou plusieures des exigences suivantes sont rencontrées :
Besoin d'explications claires et justifications : Les systèmes experts sont conçus pour fournir des explications claires sur la manière dont une décision est prise, en utilisant des règles et des connaissances explicites. Cela peut être important dans des domaines tels que la médecine ou le droit, où des explications claires et des justifications sont nécessaires pour la prise de décision.
Connaissance experte disponible : Les systèmes experts sont conçus pour modéliser les connaissances expertes dans un domaine spécifique, en utilisant des règles et des heuristiques. Si les connaissances expertes sont disponibles et bien documentées, un système expert peut être plus efficace que le machine learning.
Problème à résoudre bien défini : Les systèmes experts sont conçus pour résoudre des problèmes bien définis, avec des règles et des heuristiques préétablies. Si le problème à résoudre est bien défini et que les règles sont claires, un système expert peut être plus efficace que le machine learning.
Taille de l'ensemble de données limitée : Le machine learning nécessite généralement une grande quantité de données pour l'apprentissage. Si les données sont limitées, un système expert peut être plus efficace pour résoudre le problème.
Besoin de transparence et d'auditabilité : Les systèmes experts sont conçus pour être transparents et auditables, car ils utilisent des règles explicites et des connaissances expertes. Si la transparence et l'auditabilité sont importantes, un système expert peut être préférable au machine learning.
Lorsque les circonstances incitent à l'utilisation d'un système expert, nous recommandons d'utiliser le projet CLIPS, qui a plus de 30 ans de maturité et qui est toujours actif, et de l'interfacer avec Python.
Enfin, on peut aussi envisager des approches hybrides, à base de graphes de connaissance. Dans ce cas, on pourra s'intéresser au projet PyKEEN, qui permet la création et l'entraînement de modèles d'apprentissage automatique pour les graphes de connaissances, qui sont des structures de données utilisées pour stocker et représenter des connaissances sous forme de triples sujet-prédicat-objet.
Références
- Histoire de l'intelligence artificielle (Wikipedia)
- Présentation: "Expert System With Python" - partie 1 et partie 2
Apprentissage automatique supervisé
L'apprentissage automatique supervisé est une branche de l'intelligence artificielle qui implique la construction d'un modèle à partir de données étiquetées. Les données étiquetées sont des données qui ont été préalablement marquées avec une réponse ou une classe connue, afin que le modèle puisse apprendre à faire des prédictions à partir de nouvelles données.
Il existe de nombreux projets d'apprentissage automatique supervisé en Python. En voici une sélection:
- Scikit-learn : Scikit-learn est une bibliothèque populaire d'apprentissage automatique en Python qui prend en charge plusieurs types de modèles d'apprentissage automatique supervisé, tels que les arbres de décision, les forêts aléatoires, les SVM, les réseaux de neurones, etc.
- TensorFlow : TensorFlow est une bibliothèque open source d'apprentissage en profondeur développée par Google. Elle fournit une grande variété de modèles d'apprentissage automatique supervisé, tels que les réseaux de neurones, les SVM, les arbres de décision, etc.
- Keras : Keras est une bibliothèque d'apprentissage en profondeur de haut niveau qui s'appuie sur TensorFlow pour fournir des modèles d'apprentissage automatique supervisé faciles à utiliser et à configurer.
- PyTorch : PyTorch est une autre bibliothèque populaire d'apprentissage en profondeur qui fournit des modèles d'apprentissage automatique supervisé pour plusieurs tâches, telles que la classification, la segmentation, la reconnaissance d'images, etc.
- XGBoost : XGBoost ("eXtreme Gradient Boosting") est une bibliothèque d'ensemble d'arbres de décision optimisée pour les performances et utilisée pour les tâches de classification et de régression.
- LightGBM : LightGBM est une bibliothèque d'ensemble d'arbres de décision rapide et efficace pour la classification et la régression.
- CatBoost : CatBoost est une bibliothèque d'apprentissage en profondeur pour les tâches de classification et de régression (GBDT) qui peut être utilisée avec des données catégorielles.
Domaines d'application
Les principales applications de l'apprentissage automatique supervisé sont les suivantes :
- Classification : vise à classer des données en différentes catégories ou classes. Par exemple, il peut être utilisé pour classifier des e-mails en spam ou en non-spam, pour classer des images en différentes catégories, ou pour prédire si un client va acheter un produit donné.
- Régression : vise à prédire des valeurs numériques à partir de données d'entrée. Par exemple, il peut être utilisé pour prédire le prix d'une maison en fonction de diverses caractéristiques telles que la taille, l'emplacement et les commodités.
- Reconnaissance de formes : comme la reconnaissance de caractères manuscrits ou la reconnaissance de la parole.
- Détection d'anomalies ou de comportements suspects dans les données, ce qui peut être utile pour la détection de fraude ou de cyberattaques.
- Recommandation de produits ou de services en fonction des préférences de l'utilisateur ou de l'historique d'achat.
Ces applications sont largement déployées, entre autres, dans les secteurs et activités économiques suivants :
- La finance : les banques et les institutions financières utilisent l'apprentissage automatique supervisé pour la détection de fraude, l'évaluation du risque de crédit, la prévision de la demande du marché et la gestion des portefeuilles.
- Le marketing : l'apprentissage automatique supervisé est utilisé pour la segmentation de la clientèle, la recommandation de produits, la prédiction des comportements d'achat et l'analyse de sentiment.
- La santé : les professionnels de la santé utilisent l'apprentissage automatique supervisé pour le diagnostic de maladies, la détection de cancers, la prédiction de l'évolution de la maladie et la recherche de nouveaux traitements.
- La logistique : les entreprises de transport et de logistique utilisent l'apprentissage automatique supervisé pour la gestion des stocks, la prédiction de la demande, l'optimisation des itinéraires et la planification des livraisons.
- La production : les entreprises utilisent l'apprentissage automatique supervisé pour la surveillance des équipements, la détection de défauts (maintenance prédictive), l'optimisation des processus de production et la prévision de la demande.
- La sécurité : les agences gouvernementales et les entreprises utilisent l'apprentissage automatique supervisé pour la détection des menaces, la surveillance des activités suspectes et la prévention des attaques.
Projets d'apprentissage automatique non supervisé
L'apprentissage automatique non supervisé est une branche de l'apprentissage automatique qui consiste à découvrir des motifs et des structures dans les données sans aucune étiquette ou supervision préalable. En voici quelques applications courantes :
- Classification de texte : classer des documents en fonction de leur contenu. Les algorithmes d'apprentissage automatique non supervisé peuvent analyser de grands volumes de données textuelles et découvrir des catégories de texte (topic modeling ou modélisation de sujets) en fonction de leur similitude et de leur thème.
- Détection d'anomalies dans les données en trouvant des motifs ou des points de données qui se comportent différemment de la normale.
- Segmentations de données en fonction de leurs caractéristiques similaires. Cela peut être utile pour segmenter les clients en groupes de comportement similaires, pour segmenter les images en fonction de leurs caractéristiques visuelles, ou pour segmenter les séquences temporelles en fonction de leurs tendances.
- Réduction de la dimensionnalité des données en trouvant les caractéristiques les plus importantes ou les plus représentatives des données.
- Recommandation de contenu à des utilisateurs en fonction de leurs préférences et de leurs intérêts. Les algorithmes d'apprentissage automatique non supervisé peuvent analyser les comportements d'utilisation et les données de profil de l'utilisateur pour suggérer des produits ou des contenus similaires.
- Clustering : regrouper les données en clusters basés sur la similitude de leurs caractéristiques. Les algorithmes de clustering peuvent être utilisés pour trouver des groupes de clients similaires, pour segmenter les images en fonction de leurs caractéristiques visuelles, ou pour regrouper les séquences temporelles en fonction de leurs tendances.
Voici deux projets de bibliothèques Python généralistes qui implémentent les principaux algorithmes d'apprentissage automatique non supervisé :
- Scikit-learn : en plus de ses fonctionalités d'apprentissage supervisé citée ci-dessus, Scikit-learn propose une grande variété de modèles d'apprentissage automatique non supervisé, tels que le clustering (Affinity Propagation, Agglomerative Clustering, BIRCH, DBSCAN, K-Means, Mini-Batch K-Means, Mean Shift, OPTICS, Spectral Clustering, Mixture of Gaussians, etc.), la réduction de dimension (PCA, t-SNE, etc.), etc.
- TensorFlow : de même, TensorFlow propose des modèles d'apprentissage automatique non supervisé, tels que l'auto-encodeur, le clustering, la réduction de dimension, etc.
Apprentissage par renforcement
L'apprentissage par renforcement (en anglais, "reinforcement learning") est une branche de l'apprentissage automatique qui vise à développer des algorithmes capables d'apprendre à prendre des décisions en interagissant avec un environnement.
Dans l'apprentissage par renforcement, un agent apprend à prendre des décisions en observant l'état de l'environnement dans lequel il se trouve, en effectuant des actions et en recevant des récompenses ou des pénalités en fonction de ses actions. L'objectif de l'agent est de maximiser sa récompense à long terme.
Le processus d'apprentissage se déroule en plusieurs étapes. Tout d'abord, l'agent observe l'état de l'environnement et prend une décision. Ensuite, l'environnement évalue l'action de l'agent et lui fournit une récompense ou une pénalité en fonction de la qualité de l'action. L'agent utilise ensuite cette information pour ajuster sa stratégie de décision afin d'optimiser sa récompense à long terme.
Voici les principaux projets que nous avons identifiés :
- Gymnasium : Gymnasium est une plateforme de développement d'algorithmes d'apprentissage par renforcement qui propose une grande variété d'environnements d'apprentissage, tels que des jeux vidéo, des simulations physiques, etc.
- TensorFlow Agents : TensorFlow Agents est une bibliothèque Python pour la mise en œuvre d'algorithmes d'apprentissage par renforcement basée sur TensorFlow.
- Stable Baselines : Stable Baselines est une bibliothèque Python pour l'apprentissage par renforcement qui propose une grande variété d'algorithmes d'apprentissage par renforcement basés sur PyTorch.
- Dopamine : Dopamine est une bibliothèque de recherche open-source pour l'apprentissage par renforcement proposée par Google, basée sur Tensorflow.
- PyBullet : PyBullet est une bibliothèque open-source de simulation physique qui propose de l'apprentissage par renforcement.
Domaines d'application
Les principaux domaines d'application sont :
- Robotique : l'apprentissage par renforcement est utilisé pour apprendre aux robots à effectuer des tâches complexes, telles que la navigation autonome, l'assemblage de pièces, la manipulation d'objets, etc.
- Jeux : l'apprentissage par renforcement permet de développer des agents intelligents qui peuvent jouer à des jeux tels que les échecs, le Go, le poker et les jeux vidéo.
- Publicité en ligne : pour optimiser les stratégies de publicité en ligne en apprenant à maximiser les taux de clics, les taux de conversion et les profits.
- Contrôle de processus : pour contrôler des processus industriels tels que la production d'électricité, la gestion des déchets, la gestion des stocks, etc.
- Finance : pour optimiser les portefeuilles d'investissement, la prévision des prix des actifs financiers et la détection de fraudes financières.
- Santé : pour optimiser les traitements médicaux personnalisés, la planification de traitements, la détection de maladies et la surveillance de patients.
L'apprentissage par renforcement est par ailleurs souvent associé à des techniques telles que les réseaux de neurones profonds et la programmation dynamique afin de développer des algorithmes efficaces.
Réseaux de neurones
Principes
Les réseaux de neurones artificiels sont un ensemble d'algorithmes qui visent à imiter le fonctionnement du cerveau humain. Les grands principes en sont les suivants:
Fonctionnement individuel: chaque neurone effectue une somme pondérée des entrées, puis applique une fonction d'activation non-linéaire pour produire une sortie. Les poids des connexions entre les neurones sont ajustés lors de l'apprentissage pour optimiser la performance du réseau.
Architecture: ils sont composés de couches de neurones interconnectées. Chaque couche reçoit des entrées de la couche précédente et produit une sortie pour la couche suivante.
Apprentissage: ils apprennent à partir de données en ajustant les poids des connexions entre les neurones pour minimiser une fonction de coût qui mesure l'écart entre les sorties prédites et les sorties réelles. Les méthodes d'apprentissage les plus courantes sont la rétropropagation du gradient et les algorithmes génétiques.
Types de réseaux: il en existe plusieurs types, notamment les réseaux de neurones multicouches (MLP), les réseaux de neurones convolutifs (CNN), les réseaux de neurones récurrents (RNN) et les réseaux de neurones de mémoire à court terme (LSTM).
Principaux projets
Voici une sélection des projets les plus actifs dans ce domaine:
- PyTorch : PyTorch est une bibliothèque open-source pour Python développée par Facebook, qui permet la création de réseaux de neurones et la formation de modèles de machine learning. PyTorch est particulièrement populaire dans le domaine de la recherche, où il est utilisé pour la création de réseaux de neurones profonds et la formation de modèles de machine learning.
- TensorFlow : TensorFlow est une plateforme open-source de machine learning développée par Google. Elle propose une large gamme d'outils pour la création et la formation de réseaux de neurones, y compris les réseaux de neurones convolutifs, récurrents, et les réseaux adverses génératifs (GAN).
- Keras : Keras est une bibliothèque open-source pour l'apprentissage en profondeur, qui fournit une API intuitive et conviviale au-dessus de Tensorflow. Elle permet de créer et d'entrainer des réseaux de neurones de manière simple et rapide. Elle fournit aussi des modules de prétraitement de données et des outils pour l'évaluation des performances.
- MXNet : Apache MXNet est une bibliothèque open-source pour Python initialement développée par Amazon. Elle permet la création de réseaux de neurones profonds pour une variété d'applications de machine learning, y compris la reconnaissance de la parole, la vision par ordinateur, et la traduction automatique.
- scikit-learn propose une implémentation simple des réseaux de neurone multi-couches pour l'apprentissage supervisé.
Applications
Ces bibliothèques sont notamment utilisées dans les domaines suivants:
- La reconnaissance d'image et la vision par ordinateur: reconnaissance d'objets dans les images, détection de visages, segmentation d'images, compréhension de scènes, etc.
- Le traitement du langage naturel: traduction automatique, la génération de texte, reconnaissance de la parole, analyse des sentiments, réponse automatique aux questions, etc.
- La prédiction et la classification: comme discuté ci-dessus, les réseaux de neurones sont notamment utilisés pour la prédiction de séries chronologiques, la classification d'images, la détection de fraude, la détection d'anomalies, et la prédiction de la demande.
- Les jeux vidéo: analyse de scènes en temps réel, optimisation des performances, génération de comportements d'IA, reconnaissance de gestes, etc.
- La robotique: perception de l'environnement, planification de trajectoires, reconnaissance d'objets, prise de décision, etc.
Traitement du langage (TAL / NLP)
Le TAL (Traitement Automatique du Langage, également connu sous le nom de NLP pour Natural Language Processing en anglais) est un domaine de l'intelligence artificielle qui traite et analyse le langage naturel humain. Le TAL permet aux ordinateurs de comprendre, d'analyser, de manipuler et de générer du langage naturel.
Domaines d'application
Le TAL est utilisé dans une grande variété d'applications, telles que la traduction automatique, l'analyse de sentiment, la reconnaissance de la parole, la génération de texte, la compréhension de la langue naturelle et la recherche d'informations.
Le TAL implique l'utilisation de techniques telles que la reconnaissance des entités nommées, la segmentation de phrases, l'analyse syntaxique, l'analyse sémantique, la modélisation de sujets, la classification de textes, la génération de langage naturel et l'apprentissage en profondeur pour aider les ordinateurs à comprendre et à traiter le langage naturel.
Principaux projets
Voici quelques projets open source en Python, que nous avons utilisés dans le cadre de nos projets:
- Natural Language Toolkit (NLTK) : une bibliothèque mature (projet démaré en 2001) qui fournit des outils pour la tokenization, le stemming, la lemmatisation, la reconnaissance d'entités nommées et l'analyse syntaxique.
- spaCy : une bibliothèque basée sur le traitement par pipeline qui utilise des modèles pré-entraînés pour des tâches spécifiques telles que la reconnaissance des entités nommées, l'analyse syntaxique et la lemmatisation. SpaCy est reconnu pour sa rapidité de traitement et sa capacité de traitement à grande échelle, grâce à son utilisation d'algorithmes optimisés et de structures de données efficaces
- Gensim : une bibliothèque Python spécialisée dans la modélisation de topics, la similarité de documents et la vectorisation de documents.
- TextBlob : fournit une API simple pour effectuer des tâches courantes de NLP, telles que la tokenization, la lemmatisation, l'analyse de sentiment et la détection de langue.
Systèmes multi-agents
Les systèmes multi-agents (SMA) sont un domaine de l'IA qui traite des systèmes où plusieurs agents autonomes interagissent pour résoudre des problèmes complexes.
Applications
Les SMA ont de nombreuses applications dans divers domaines, notamment :
- Robotique : Les SMA sont utilisés dans la conception de robots pour permettre une communication et une coopération efficaces entre plusieurs robots pour accomplir des tâches complexes.
- Jeux : Les SMA sont utilisés dans la conception de jeux pour permettre une interaction entre plusieurs joueurs et pour créer des adversaires virtuels qui agissent de manière autonome et intelligente.
- Finance : Les SMA sont utilisés dans la modélisation des marchés financiers pour simuler les comportements des acteurs du marché et pour prédire les tendances et les évolutions du marché.
- Gestion de la chaîne d'approvisionnement : Les SMA sont utilisés dans la gestion de la chaîne d'approvisionnement pour permettre une communication efficace entre les différents acteurs de la chaîne, tels que les fournisseurs, les transporteurs et les détaillants.
- Transport intelligent : Les SMA sont utilisés dans la conception de systèmes de transport intelligents pour optimiser la circulation et pour permettre une communication entre les véhicules autonomes et les systèmes de gestion de trafic.
- Systèmes de surveillance : Les SMA sont utilisés dans la surveillance de la sécurité pour permettre une communication et une collaboration efficaces entre les différents capteurs et les agents de sécurité.
- Domaine militaire : Les SMA sont utilisés pour simuler les scénarios de bataille afin d'optimiser les stratégies et les tactiques et pour entraîner les troupes, pour permettre une coordination efficace entre les différents acteurs sur le champ de bataille et pour améliorer la prise de décision.
Quelques projets en Python
Voici quelques projets de systèmes multi-agents en Python:
- Mesa : une bibliothèque open source pour la simulation multi-agent basée sur Python, qui fournit des outils pour la création de modèles multi-agents, la visualisation et l'analyse des résultats.
- SPADE (Smart Python Agent Development Environment) : fournit un ensemble de bibliothèques Python pour la création, la simulation et le déploiement d'agents autonomes.
Références
- Un rapide retour sur les frameworks python pour les systèmes multi-agents
- Système multi-agents (Wikipedia)
- Distributed Artificial Intelligence: A primer on Multi-Agent Systems, Agent-Based Modeling, and Swarm Intelligence
Conclusion
On a vu dans ce post que Python permettait d'adresser l'immense majorité des besoins actuels en intelligence artificielle.
Le domaine étant très vaste, nous ne prétendons pas à l'exhaustivité. Néanmoins, si vous identifiez des lacunes ou des erreurs flagrantes, n'hésitez pas à nous les signaler ou à proposer un ajout ou une correction dans les sources de ce post.