Skip to content

Projet 3 : Construction d'un squelette complet de système expert à partir de zéro

Description du projet

Généralités

Dans ce projet nous allons concevoir un prototype de système expert. Étant donné le faible temps imparti pour réaliser par rapport au niveau de complexité de ce projet, votre défi consistera simplement à concevoir l'architecture complète d'un système expert, afin qu'une autre promotion d'étudiant puisse implémenter cette architecture à partir de vos recommandations. Notez que vous pouvez, si vous avancez suffisamment vite, allez jusqu’à l'implémentation complète de votre système expert, vous serez récompensé d'une note supplémentaire. Le sujet de ce projet est volontairement vaste et peu détaillé, vous devrez compléter les éléments de cours par des recherches personnelles et faire preuve de créativité pour imaginer les meilleures solutions pour créer votre système expert.

Contexte détaillé

Votre système expert devra être capable de simuler l'expertise d'un nutritionniste en fournissant à différents profils d’utilisateurs des recommandations concernant leur alimentation.

Généralités sur les systèmes experts

Définition & historique

Dans l'intelligence Artificielle, les systèmes experts sont des programmes qui appartiennent au grand domaine de la représentation des connaissance et du raisonnement automatique. Plus précisément, ils sont un cas particulier de programmes, les knowledge-based system, dont la principe général consiste à pouvoir acquérir des connaissances sur un domaine définit précisément, organiser ces connaissances et utiliser des méthodes mathématiques (statistiques ou logiques) pour produire un raisonnement.

Edward Feigenbaum, un chercheur dirigeant le Stanford Heuristic Programming Project dans les années 65, est souvent considéré comme le père des système expert (avec des contributions d'autres chercheurs). Il définit le système expert comme "un programme informatique intelligent qui utilise des connaissances et des méthodes d'inférences pour résoudre des problèmes qui sont suffisamment difficiles pour requérir une expertise humaine significative pour en trouver une solution"

Pratiquement les systèmes expert sont utilisé pour simuler l'expertise d'un expert dans un domaine. Ils sont généralement considérés comme étant la première application concrète de systèmes de raisonnement automatique et ont beaucoup été utilisés dans les années 90 dans différents domaines, en particulier pour l'aide à la décision en médecine.

Les différents composants d'un système expert

Généralement, la plupart des systèmes experts se composent au moins de deux composants principaux:

  • une base de connaissance qui représente les faits concernant le domaine particulier sur lequel le système expert doit opérer. Les premiers systèmes expert développés tels que Mycin ou Dendral représentaient ces faits principalement par des assertions. Plus tard, dans les systèmes experts les plus développés la base de connaissance possède une structure utilisant les concepts de la programmation orientée objet et représente les faits par des classes et des instances d'objets.

  • un moteur d'inférence qui permet de produire un raisonnement par des inférences, en appliquant généralement des règles aux faits représentés dans la base de connaissance et produire des nouveaux faits qui peuvent être utilisés comme solution au problème à résoudre. Les systèmes experts qui utilisent des règles logiques sont de type parle rule-based et sont généralement les plus simples et les répandus. D'autres moteurs d'inférences plus complexes sont en général utilisé pour lorsque le problème à modéliser le requiert. Il existe deux types d'inférences, le forward chaining et le backward chaining. Le forward chaining procède en partant des faits pour produire une conclusion, tandis que le backward chaining procède en partant d'une hypothèse de conclusion pour trouver les faits qui supportent cette hypothèse. La plupart des systèmes expert intègrent l'une, l'autre ou ces deux types d'inférences.

Souvent, le système expert intègre également un système d'explicabilité (parfois appelé justifier) afin de permettre aux utilisateurs de retracer partir de données d'entrée, la chaîne de raisonnement impliquée dans la conclusion, et ce en examinant en détails la chaîne de règles utilisée.

Pour le développement d'un système expert, il existe des environnement de développement spécifiques (ou shell) qui, connecté à une base de connaissance, permettent facilement de développer les fonctionnalités d'entrée sortie du système expert, en particulier son moteur d'inférence.

Enfin, comme dans la plupart des logiciels, le système expert possède une interface utilisateur. Son importance n'est pas à négliger car elle conditionne souvent l'acceptation du logiciel par les utilisateurs.

Étapes générales de conception d'un système expert

1. Sélection du problème

La première étape consiste à modéliser précisément le problème que vous souhaitez résoudre de manière automatique. Contrairement aux approches plus générales de résolution de problème, comme celle parcours de graphe, il est important pour concevoir un système expert de cerner plus précisément le domaine d'expertise et particulièrement le tâche que vous souhaitez résoudre.

Pour cela, voici quelques pistes: - Documentez vous sur le domaine pour vous familiariser avec la tâche (documents, jeu de données disponibles, cas d'usages ...)
- Sélectionner de(s) expert(s) du domaine pour les interviewer. Cette enquête vous servira pour construire votre base de connaissance, définir la métrique d'évaluation de votre prototype, ...

2. Acquisition des connaissances

Une fois votre problème bien défini, vous allez devoir réaliser une tâches les plus complexes à accomplir pour réaliser un système expert, a savoir acquérir les connaissances nécessaires sur le domaine :

  • Réalisez une interview de(s) expert(s) afin de définir les limites de la tâche à modéliser et identifier le type de connaissance à acquérir
  • A partir de vos recherches préalables et de l'interview de l'expert, enregistrez les connaissances sous forme de faits
  • Demandez à l'expert de vérifiez les faits ainsi constitués
  • Définissez avec le(s) experts les règles d'inférences

3. Représentation des connaissances

Après avoir acquis des connaissances, la prochaine étape consiste à représenter les connaissances en construisant vote base de connaissance:

  • Choisissez le type de modèle de représentation des connaissances: règles, frames, scripts, réseaux sémantiques, ... En général, vous avez plutôt intérêt à utiliser un modèle proche de la manière dont vos experts raisonnent et expriment leur connaissances. Par exemple, si l'expert utilisent beaucoup de clauses de type if-then, vous pourriez utiliser des règles pour représenter vos connaissances. Au contraire, si les experts utilisent des connaissances plus descriptives et dépendantes d'un contexte, alors l'usage de frames ou de réseaux sémantiques serait peut être plus appropriée. De même, la manière dont raisonne votre expert, en se basant sur les données d'entrées (approche data driven), en utilisant une approche orientée par les buts à atteindre (approche goal directed), ou les deux vous permettra de décider du type d'inférence à utiliser (forward chaining, backward chaining ou autre, ...)
  • Décidez si votre système expert gère une part d'incertitude et la manière dont vous allez le modéliser.

4. Encodage des connaissances

Cette étape implique d'implémenter les connaissances en utilisant un logiciel ou un langage dédié.

  • Essayez de plutôt développer ainsi votre base de connaissance de manière modulaire afin de rendre plus simple sa mise à jour et sa maintenance
  • Mettez en place votre moteur d'inférence
  • Développez une interface utilisateur simple
  • Vous disposez alors d'un prototype et pouvez testez son fonctionnement avec des exemples de cas sont les solutions sont connues.
  • Recueillez d'éventuels retours de vos experts
  • Ayez une approche incrémentale et itérative: construisez rapidement des première briques, testez les, améliorez les, recommencez ...

5. Test des connaissances et évaluation

Une fois que vous avez un prototype satisfaisant, la prochaine étape consiste a effectuer des tests pour valider votre prototype par différents utilisateurs humains:

  • Définissez avec les experts une métrique d'évaluation et des cas de tests
  • Testez votre système expert avec des cas de tests en comparant les performances de votre système expert avec celles d'experts humains
  • Trouver des stratégies pour tester la consistance et la complétude de l'ensemble des solutions que peut donner votre système expert.
  • Grâce aux retours des utilisateurs, identifiez les facteurs dépendants du design de votre système qui pourraient être améliorés (instructions, temps de réponse, présentation des résultats, ...)

6. Mise à jour et acceptation des utilisateurs

Cette étape consiste à mettre à jour le système pour améliorer ses performances ainsi que sa facilité d'utilisation.

Pour améliorer les performances du système, vous pouvez:

  • Affiner votre moteur d'inférence (par exemple, ajoutez de nouvelles règles, ajouter/améliorer votre système pour gérer les informations incertaines, ...)
  • Modifier les faits nécessitant une révision
  • Améliorer le système expert étendant ses capacités à de nouveaux sous domaines et le tester à nouveau
  • Répétez ces étapes

Afin d'améliorer l'acceptation de votre système aux utilisateurs vous pouvez:

  • Améliorer le design et l’ergonomie de l'interface utilisateur
  • Proposez une documentation complète de votre système, à la fois sur son utilisation et sur ses détails de conception

Conseils généraux pour la réalisation du projet

  • Privilégiez les recherches en anglais, vous aurez ainsi accès à plus de contenu détaillé
  • Recherchez des articles scientifiques sur le sujet, soit des articles spécifiques au sujet, soit des articles plus généraux sur les systèmes expert
  • Il est important pour ce projet que vous citiez précisément vos sources !
  • Pensez à inclure des recommandations concernant les outils à utiliser pour construire et implémenter votre système expert
  • Pensez à inclure des recommandations concernant les interactions avec l'expert du domaine que vous allez sollicitez (quels questions allez vous lui poser, comment aller vous lui introduire le concept de système expert, ...)
  • De manière générale essayez de donner le plus de détails possibles (techniques ou non) concernant toutes les étapes de conception

Lexique et documentation

  • En programmation informatique, une assertion est une expression qui doit être évaluée à vrai.

  • En Intelligence Artificielle, une frame est une structure de donnée utilisée pour représenterla connaissance en la segmentant en sous structures capables de représenter des "situations stéréotypées". Les frames sont généralement utilisées pour leur capacité à représenter le contexte d'un problème et permet ainsi de réduire significativement l'espace de recherche.

  • Un réseau sémantique est un type de base de connaissance qui représente des relations sémantiques entre des concepts en utilisant un structure de réseau. Il s'agit la plupart du temps d'un graphe dont les nœuds représentent les concepts et les arrêtes les relations entre ces concepts.