Les 7 familles de l'intelligence artificielle et leurs implémentations en Python

Par: Abilian 13/03/2023 IA Tous les articles

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 domaine 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 :

  1. 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.
  2. 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.
  3. 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é.
  4. 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.
  5. Les réseaux de neurones artificiels (détails à venir) : 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.
  6. Le traitement du langage naturel (détails à venir) : 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.
  7. Les systèmes multi-agents (détails à venir) : 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 :

  1. Experta : une bibliothèque Python pour construire des systèmes experts fortement inspirés de CLIPS, fork de Pyknow (cf. infra).
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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. L'approche par moteur d'inférence reste cependant importante pour certains domaines d'applications. 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.

Références

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. LightGBM : LightGBM est une bibliothèque d'ensemble d'arbres de décision rapide et efficace pour la classification et la régression.
  7. 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 :

  1. 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é.
  2. 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.
  3. Reconnaissance de formes : comme la reconnaissance de caractères manuscrits ou la reconnaissance de la parole.
  4. 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.
  5. Recommandation de produits ou de services en fonction des préférences de l'utilisateur ou de l'historique d'achat.

Ces projets d'apprentissage automatique supervisé sont largement utilisés dans l'industrie (commerce électronique, santé, finance, sécurité, maintenance prédictive...) et la recherche, et sont régulièrement mis à jour pour intégrer les dernières avancées en matière d'apprentissage automatique.

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 :

  1. 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.
  2. 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.
  3. 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.
  4. Réduction de la dimensionnalité des données en trouvant les caractéristiques les plus importantes ou les plus représentatives des données.
  5. 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.
  6. 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é :

  1. 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.
  2. 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 identifés :

  1. 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.
  2. TensorFlow Agents : TensorFlow Agents est une bibliothèque Python pour la mise en œuvre d'algorithmes d'apprentissage par renforcement basée sur TensorFlow.
  3. 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.
  4. Dopamine : Dopamine est une bibliothèque de recherche open-source pour l'apprentissage par renforcement proposée par Google, basée sur Tensorflow.
  5. 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 :

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Finance : pour l'optimisation des portefeuilles d'investissement, la prévision des prix des actifs financiers et la détection de fraudes financières.
  6. Santé : pour l'optimisation des 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.