Moteur d'inférence - Inference engine

Dans le domaine de l' intelligence artificielle , un moteur d'inférence est un composant du système qui applique des règles logiques à la base de connaissances pour en déduire de nouvelles informations. Les premiers moteurs d'inférence étaient des composants de systèmes experts . Le système expert typique se composait d'une base de connaissances et d'un moteur d'inférence. La base de connaissances stockait des faits sur le monde. Le moteur d'inférence applique des règles logiques à la base de connaissances et en déduit de nouvelles connaissances. Ce processus serait itéré car chaque nouveau fait dans la base de connaissances pourrait déclencher des règles supplémentaires dans le moteur d'inférence. Les moteurs d'inférence fonctionnent principalement dans l'un des deux modes suivants : règle spéciale ou faits : chaînage avant et chaînage arrière . Le chaînage avant commence par les faits connus et affirme de nouveaux faits. Le chaînage en amont commence par les objectifs et fonctionne en amont pour déterminer quels faits doivent être affirmés pour que les objectifs puissent être atteints.

Architecture

La logique utilisée par un moteur d'inférence est généralement représentée par des règles SI-ALORS. Le format général de ces règles est SI <expression logique> ALORS <expression logique>. Avant le développement de systèmes experts et de moteurs d'inférence, les chercheurs en intelligence artificielle se sont concentrés sur des environnements de démonstration de théorèmes plus puissants qui offraient des implémentations beaucoup plus complètes de la logique du premier ordre . Par exemple, les déclarations générales qui incluaient la quantification universelle (pour tout X, une déclaration est vraie) et la quantification existentielle (il existe un certain X tel qu'une déclaration est vraie). Ce que les chercheurs ont découvert, c'est que la puissance de ces environnements de preuve de théorème était également leur inconvénient. En 1965, il était beaucoup trop facile de créer des expressions logiques qui pouvaient prendre un temps indéterminé ou même infini pour se terminer. Par exemple, il est courant dans la quantification universelle de faire des déclarations sur un ensemble infini tel que l'ensemble de tous les nombres naturels. De telles déclarations sont parfaitement raisonnables et même requises dans les preuves mathématiques, mais lorsqu'elles sont incluses dans un démonstrateur de théorème automatisé exécuté sur un ordinateur, l'ordinateur peut tomber dans une boucle infinie. Se concentrer sur les instructions SI-ALORS (ce que les logiciens appellent modus ponens ) a toujours donné aux développeurs un mécanisme général très puissant pour représenter la logique, mais qui pouvait être utilisé efficacement avec des ressources de calcul. De plus, certaines recherches psychologiques indiquent que les humains ont également tendance à privilégier les représentations SI-ALORS lors du stockage de connaissances complexes.

Un exemple simple de modus ponens souvent utilisé dans les livres d'introduction à la logique est "Si vous êtes humain, alors vous êtes mortel". Cela peut être représenté en pseudo-code comme :

Rule1: Human(x) => Mortal(x)

Un exemple trivial de la façon dont cette règle serait utilisée dans un moteur d'inférence est le suivant. Dans le chaînage avant , le moteur d'inférence trouverait dans la base de connaissances tous les faits correspondant à Human(x) et pour chaque fait trouvé, il ajouterait la nouvelle information Mortal(x) à la base de connaissances. Donc, s'il trouvait un objet appelé Socrate qui était humain, il en déduirait que Socrate était mortel. Dans l' enchaînement en amont , le système se verrait attribuer un objectif, par exemple répondre à la question est-ce que Socrate est mortel ? Il chercherait dans la base de connaissances et déterminerait si Socrate était humain et, dans l'affirmative, il affirmerait qu'il est aussi mortel. Cependant, dans le chaînage en amont, une technique courante consistait à intégrer le moteur d'inférence à une interface utilisateur. Ainsi, au lieu d'être simplement automatisé, le système pourrait désormais être interactif. Dans cet exemple trivial, si le système avait pour objectif de répondre à la question si Socrate était mortel et qu'il ne savait pas encore s'il était humain, il générerait une fenêtre pour poser à l'utilisateur la question « Est-ce que Socrate est humain ? » et utiliserait ensuite ces informations en conséquence.

Cette innovation consistant à intégrer le moteur d'inférence à une interface utilisateur a conduit à la deuxième avancée des systèmes experts : les capacités d'explication. La représentation explicite des connaissances sous forme de règles plutôt que de code a permis de générer des explications aux utilisateurs : à la fois des explications en temps réel et après coup. Donc, si le système demandait à l'utilisateur « Est-ce que Socrate est humain ? », l'utilisateur peut se demander pourquoi on lui a posé cette question et le système utiliserait la chaîne de règles pour expliquer pourquoi il essayait actuellement de vérifier ce peu de connaissance : c'est-à-dire , il doit déterminer si Socrate est mortel et pour ce faire, il doit déterminer s'il est humain. Au début, ces explications n'étaient pas très différentes des informations de débogage standard que les développeurs traitent lors du débogage de n'importe quel système. Cependant, un domaine de recherche actif utilisait la technologie du langage naturel pour poser, comprendre et générer des questions et des explications en utilisant des langages naturels plutôt que des formalismes informatiques.

Un moteur d'inférence parcourt trois étapes séquentielles : correspondance des règles , sélection des règles et exécution des règles . L'exécution des règles entraînera souvent l'ajout de nouveaux faits ou objectifs à la base de connaissances, ce qui déclenchera la répétition du cycle. Ce cycle se poursuit jusqu'à ce qu'aucune nouvelle règle ne puisse être mise en correspondance.

Dans la première étape, les règles de correspondance, le moteur d'inférence trouve toutes les règles déclenchées par le contenu actuel de la base de connaissances. Dans le chaînage avant, le moteur recherche des règles dont l'antécédent (côté gauche) correspond à un fait dans la base de connaissances. Dans le chaînage arrière, le moteur recherche des antécédents pouvant satisfaire l'un des objectifs actuels.

Dans la deuxième étape, sélectionnez les règles, le moteur d'inférence hiérarchise les différentes règles qui ont été mises en correspondance pour déterminer l'ordre de les exécuter. Dans l'étape finale, exécuter les règles, le moteur exécute chaque règle correspondante dans l'ordre déterminé à l'étape deux, puis réitère à l'étape un. Le cycle continue jusqu'à ce qu'aucune nouvelle règle ne corresponde.

Implémentations

Les premiers moteurs d'inférence se concentraient principalement sur le chaînage avant. Ces systèmes étaient généralement implémentés dans le langage de programmation Lisp . Lisp était une plate-forme fréquente pour les premières recherches sur l'IA en raison de sa forte capacité à effectuer des manipulations symboliques. De plus, en tant que langage interprété, il offrait des environnements de développement productifs adaptés au débogage de programmes complexes. Une conséquence nécessaire de ces avantages était que les programmes Lisp avaient tendance à être plus lents et moins robustes que les langages compilés de l'époque tels que C . Une approche courante à ces débuts consistait à prendre une application de système expert et à reconditionner le moteur d'inférence utilisé pour ce système en un outil réutilisable que d'autres chercheurs pourraient utiliser pour le développement d'autres systèmes experts. Par exemple, MYCIN était un système expert précoce pour le diagnostic médical et EMYCIN était un moteur d'inférence extrapolé à partir de MYCIN et mis à la disposition d'autres chercheurs.

Au fur et à mesure que les systèmes experts sont passés des prototypes de recherche aux systèmes déployés, l'accent a été mis davantage sur des questions telles que la vitesse et la robustesse. L'un des premiers et des plus populaires moteurs de chaînage avant était OPS5, qui utilisait l' algorithme Rete pour optimiser l'efficacité du déclenchement des règles. Une autre technologie très populaire qui a été développée était le langage de programmation logique Prolog . Prolog s'est principalement concentré sur le chaînage en amont et a également présenté diverses versions commerciales et optimisations pour l'efficacité et la robustesse.

Alors que les systèmes experts suscitaient un intérêt considérable de la part de diverses entreprises du monde des affaires, beaucoup d'entre elles ont démarré ou guidés par d'éminents chercheurs en IA ont créé des versions produites de moteurs d'inférence. Par exemple, Intellicorp était initialement guidé par Edward Feigenbaum . Ces produits de moteur d'inférence ont également souvent été développés en Lisp au début. Cependant, les demandes de plates-formes plus abordables et commercialement viables ont finalement rendu les plates-formes d' ordinateurs personnels très populaires.

Voir également

Les références