# Langage à Cadre

Un langage orienté cadre est une technique de représentation des connaissances utilisée en intelligence artificielle : les cadres sont stockés en tant qu'ontologies d'ensembles et de sous-ensembles constitués de cadre. Ils sont similaires aux hiérarchies de classes des langages à objet bien qu'ils soient conçus dans un but fondamentalement différents. Les cadres sont destinés à une représentation explicite et intuitive des connaissances, alors que les objets sont conçus pour l'encapsulation et le masquage des informations privées. Ils sont apparus dans le contexte des recherches en intelligence artificielle, tandis que les objets sont apparus dans le cadre du génie logiciel. En pratique les deux technologies se recouvrent assez largement, que ce soit en termes techniques ou de possibilités.

## Description

Les travaux préliminaires sur les cadres se sont inspirés des recherches psychologiques des années 1930. Elles suggéraient que les gens utilisent des connaissances stéréo-typiques pour interpréter et agir dans de nouvelles situations. Le terme Frame (Cadre) a d'abord été utilisé par Marvin Minsky comme paradigme de compréhension du raisonnement visuel et de traitement du langage. Dans ce type de problèmes, comme dans bien d'autres, le nombre de solution potentielles est énorme, y compris pour les exemples les plus simples, par exemple, extraire les phonèmes d'un flux audio brut ou détecter les arêtes d'un objet. Ce sont des tâches qui peuvent sembler simples pour un humain, mais qui sont en réalité plutôt complexes. Leur difficulté n'étaient probablement pas bien comprise à l'époque ou les chercheurs ont commencé à étudier la possibilité de les faire faire à des ordinateurs.
L'intention initiale des cadres, ou scripts comme ils étaient aussi appelés, étaient de permettre de modéliser le contexte d'un problème et ainsi de réduire l'espace des solutions potentielles (l'espace de recherche) automatiquement et de manière significative. La même idée a été adoptée par Schank and Abelson, qui l'utilisaient pour illustrer comment un système d'intelligence artificielle pouvait traiter certaines interactions humaines habituelles comme une commande dans un restaurant. Ces interactions ont été modélisées en tant que cadres avec des « emplacements » (slots) qui stockaient les informations pertinentes de chacun d'eux. Les emplacements sont analogues aux propriétés/attributs des langages à objets aux relations des modèles entité/relation. Les emplacements ont souvent une valeur par défaut, qui doit parfois être reprécisée lors de chaque instance d'exécution d'un scénario. Notre tâche de commande était contrôlée en démarrant avec une instance basique du cadre, puis chaque valeur était instanciée et précisée de manière appropriée. Le Cadre abstrait représentait essentiellement une classe d'objet, et les instances de ce cadre une instance d'objet. Dans ce travail initial, l'emphase était mise sur la représentation statique des données du cadre. Différents mécanismes ont été développés pour définir le domaine de définition d'un emplacement, les valeurs par défaut, etc. Ces systèmes préliminaires possédaient tout de même des capacités procédurales. Une technique classique était l'utilisation de « déclencheurs » (triggers) (similaire au concept de trigger dans les bases de données) associés aux emplacements. Un déclencheur était constitué de code procédural associé à un emplacement. Le code était exécuté avant et/ou après l'accès ou la modification d'un emplacement.
Comme les classes d'objet, les cadres étaient organisées en hiérarchies de subsomption. Par exemple, un cadre de base peut être « les commandes d'un restaurant ». Une instance de ce cadre peut être « Joe commande un Burger au Fast Food local ». Une spécialisation de ce cadre (une sous-classe, par essence) pourrait être « commander dans un restaurant gastronomique ». Le cadre « restaurant gastronomique » hériterait de toutes les valeurs par défaut du cadre « restaurant » et soit ajouterait plus d'emplacements soit changerait une ou plusieurs des valeurs par défaut (par ex., la gamme de prix) du cadre spécialisé$^,$.
Les premières recherches sur ce sujet ont pour la plupart été inspirées par des résultats de psychologie expérimentale (par ex. Schank and Abelson) et des tentatives de conception d'outils de représentations des connaissances correspondant à la manière dont les humains étaient supposés fonctionner. Ces chercheurs n'étaient pas vraiment intéressés par le formalisme mathématique, car ils pensaient que ce type de formalisme n'étaient pas forcément de bons modèles de la manière dont la personne lambda conceptualise le monde. La manière dont les humains utilisent le langage, par exemple, est souvent très loin d'être parfaitement cohérente logiquement.
Dans le même esprit, en linguistique, Charles Fillmore a commencé dans les années 1970 à travailler sur sa théorie de cadre sémantique, qui conduira plus tard à la création de ressources comme FrameNet. Cette théorie était motivée par des réflexions sur les langages et la cognition humaine.
Des chercheurs comme Ron Brachman d'autre part voulaient fournir aux chercheurs en IA la puissance de raisonnement et les formalismes mathématiques associés à la logique. Ils cherchaient à faire correspondre les cadres, emplacements, les contraintes et les règles d'un langage à cadre à la logique et la théorie des ensembles. Un des bénéfices de cette approche est que la validation, et même la création des modèles pourrait être automatisée grâce à la preuve automatique de théorème ou des techniques de raisonnement automatique. L'inconvénient était que la spécification initiale du modèle en utilisant un langage doté d'une sémantique formelle était sans doute plus difficile.
Cette évolution illustre une division classique dans la recherche en IA surnommée les tirés « tirés à quatre épingles contre débraillé » (neats vs scruffies). Les « quatre épingles » étaient des chercheurs qui plaçaient tous leurs espoirs sur la rigueur mathématique et la précision, par le formalisme par la Logique du premier ordre et la Théorie des ensembles. Les « débraillés » étaient davantage intéressés par la modélisation des connaissances par des représentations intuitives et signifiant quelque chose pour la psyché humaine.
Le plus intéressant des langages de l'approche formelle était KL-ONE. KL-ONE a plus tard engendré plusieurs langages à cadre successeurs. La sémantique formelle des langages à la KL-ONE leur a fourni un nouveau type de raisonnement automatique appelé le classifieur. Ce sont des moteurs qui analysent les différentes déclarations des programmes du langage : les définitions d'ensembles, de sous-ensembles, de relations, etc. Il en déduit automatiquement des relations supplémentaires et peut détecter des incohérences entre différentes parties du modèle. De cette manière, beaucoup des taches qui seraient habituellement exécutées par un moteur d'inférence en chaînage avant ou arrière peuvent désormais être effectuées par le classifieur.
Cette technologie est particulièrement pertinente dans le cadre d'Internet. Le fait que le formalisme de langages comme le précédent puisse être utile dans la gestion de données très peu formelles et non structurées comme celles d'Internet est particulièrement intéressant. Sur Internet, il n'est tout simplement pas possible d'imposer que tous les systèmes standardisent leur modèle de données. Il est inévitable que la terminologie sera utilisée de multiples manières incohérentes entre elles. Dans ce cadre, la classification automatique offerte par un classifieur constitue un outil de base puissant pour aider à ramener de l'ordre et de la cohérence dans ce type de jeu de données. La vision d'un Internet amélioré, dans lequel les pages sont ordonnées non seulement par mots clés textuels mais aussi par classification de concepts est connue sous le nom de Web sémantique. Les technologies de classification originellement développées pour les langages à cadre sont une technologie clé de son émergence$^,$. Le débat 4 épingles contre débraillés a aussi émergé dans le monde du web sémantique, et a culminé avec création de la communauté Linking Open Data — qui se concentre plus sur la publication des données sur le web que sur la modélisation.

## Exemple

Un exemple simple de concepts modélisés dans un langage à cadre est l'ontologie Friend of A Friend (FOAF) définie dans le cadre du web sémantique comme fondement du réseautage social et des systèmes de calendrier. Le cadre principal de cet exemple simple est le cadre Person (personne). Des emplacements sont email, home page, phone, (mail, page personnelle, téléphone) etc. Les centres d'intérêt de chaque personne peuvent être représentés par des cadres additionnels représentant l'espace du commerce et des loisirs. L'emplacement knows (connait) lie chaque personne à d'autres personnes. Des valeurs par défaut pour les centres d'intérêt d'une personne peuvent être déduits des centres d'intérêt de son réseau de connaissances.

## Mises en œuvre

Les premiers langages par cadre étaient des langages ad-hoc dédiés à des projets de recherche spécifique et n'étaient pas empaquetés pour la réutilisation par d'autres. De manière identique aux moteurs d'inférence de systèmes experts, les chercheurs ont bientôt réalisé le bénéfice à séparer le cœur de l'infrastructure et à développer des langages indépendants de l'application. L'un des premiers langages à cadre généraliste est KRL. L'un de ceux qui ont le plus inspiré est KL-ONE. L'un de ses successeurs les plus utilisés était le langage Loom, de Robert MacGregor, du Information Sciences Institute.
Dans les années 1980, l'intelligence artificielle a beaucoup intéressé les milieux d'affaire, en particulier les systèmes experts. De nombreux produits commerciaux pour le développement de bases de connaissances ont été développés. Ces jeunes produits étaient souvent développés en Lisp et intégraient des constructions comme des règles SI-ALORS pour le raisonnement logique, avec des hiérarchies de cadre pour la représentation des données. L'un des plus connus de ces outils Lisp pour les bases de connaissances était Knowledge Engineering Environment (KEE) d'Intellicorp. KEE fournissait un langage à cadres complet avec héritage multiple, emplacements, déclencheurs, valeurs par défaut, et un moteur de règle capable de raisonnement en chaînage avant comme arrière. La plupart de ces logiciels d'intelligence artificielle étaient codés en Lisp sur des plates-formes Lisp machine mais furent finalement portés pour PC et stations de travail Unix.
Le projet de recherche du web sémantique a relancé l'intérêt pour la classification automatique et les langages à cadre. Un exemple : le standard Web Ontology Language (OWL) pour la description d'informations sur Internet. OWL est un standard pour fournir une couche sémantique au-dessus d'Internet. L'objectif est d'organiser le web en fonction de concepts, eux-mêmes organisés en ontologies, plutôt que par mots clés, comme beaucoup d'applications des années 1990 et 2000 et ultérieures (par ex. les moteurs de recherche et d'indexation comme Google).
Le nom du langage OWL est en lui-même un exemple de l'intérêt d'un Web Sémantique. Si quelqu'un cherche « OWL » en utilisant un moteur de recherche classique la plupart des pages résultats (en anglais) parleront d'un animal (Owl veut dire Chouette en anglais). Un web sémantique permet de se concentrer sur les concepts et les définir. Il est alors possible de spécifier le concept « Web Ontology Language » et les utilisateurs n'ont plus à se soucier des différents synonymes ou acronymes une fois qu'ils ont choisi le concept qu'ils cherchent, ils sont éliminés de la liste de résultats (par exemple tout ce qui concerne l'oiseau).
En plus d'OWL, d'autres standards, comme OIL and DAML, sont pertinents dans le cadre du Web Sémantique et ont été influencés par les langages à cadres. L'outil libre Protege de la Stanford University fournit un éditeur d'ontologie basé sur OWL qui a toutes les possibilités d'un classificateur.

## Comparaison cadre objets

Les langages à cadre et les langages à objet se recouvrent significativement. Les buts et les terminologies des deux communautés étaient différents mais quand ils sont sortis des laboratoires et des milieux académiques les utilisateurs tendaient à peu se soucier des différences de philosophies pour se concentrer sur les possibilités offertes, en prenant le meilleur de chacune des communautés indifféremment de l'origine des idées. Ce qui relie les deux mondes est la volonté de combler la distance entre les concepts du monde réel et leur implantation logicielle. Les deux communautés ont abouti à l'idée de classer les données en taxonomies en partant de types très généraux et en les raffinant en types de plus en plus spécifiques.
La table suivante montre les relations entre les terminologies objet et cadre dans leurs communautés respectives :
| Terminologie « Cadre » | Terminologie « Orienté Objet » |
| Cadre | Classe d'objet |
| Emplacement | Propriété ou attribut |
| Déclencheur | Accesseurs et méthodes mutatrice |
| Méthode (Par ex. dans Loom ou KEE) | Méthode |
La principale différence entre les deux paradigmes est l'importance accordée à l'encapsulation. C'était une fonctionnalité critique et fondamentale pour la communauté de l'orienté objet, dans le but de réduire au maximum les interactions possibles entre les composants d'un logiciel. La gestion de systèmes complexes de grande taille était une des motivations principales des technologies orientées objet, et réduire les interactions était une manière de minimiser la complexité du système. C'était une fonctionnalité beaucoup moins critique dans le camp des cadres que l'objectif de fournir un vaste ensemble d'outils potentiels pour représenter des contraintes, des règles et des programmes logiques. Dans le monde objet, le contrôle est obtenu en jouant sur la visibilité des méthodes, et les données sont accédées uniquement à l'aide des méthodes. Dans l'idéal, accéder à la valeur d'une propriété d'un objet doit être effectué au travers d'un accesseur (un type de méthode). Cette méthode est responsable de la validation des données et des contraintes comme le type des données ou sur les valeurs récupérées ou affectées à la propriété. Dans les langages par cadre ce même type de contraintes peut être géré de plusieurs manières. Les déclencheurs pouvaient être définis pour être lancés avant ou après une affectation ou une lecture de valeur sur un emplacement, des règles pouvaient maintenir le même type de contraintes. Les slots eux-mêmes pouvaient être adjoints d'informations additionnelles (les « Facettes » dans certains langages), qui permettaient également d'exprimer ce type de contrainte.
L'autre grosse différence entre les deux communautés concernait l'héritage multiple (La possibilité pour un cadre ou une classe d'avoir plusieurs superclasses.). C'était une fonctionnalité indispensable pour la communauté Cadre. En effet l'objectif était la modélisation du monde d'une manière proche de la manière humaine, et les conceptualisations humaines ne sont en général pas des taxonomies rigides et disjointes. Pour de nombreux langages à objets, surtout les plus récents, l'héritage singulier était soit désiré soit imposé. L'héritage multiple était vu comme utile en phase de modélisation d'un domaine métier mais à écarter en phase de conception et d'implémentation, pour conserver l'encapsulation et la modularité.
Les langages par cadre initialement, comme KRL, n'avaient pas de fonctionnalité de passage de messages, mais sur demande des utilisateurs de ces langages la possibilité de définir des messages, y compris sur des cadres, a finalement été implémentée (par ex. dans Loom, KEE).
Du côté des objets, des standards ont émergé qui fournissent des fonctionnalités essentiellement équivalentes à celles que pouvaient fournir les langages par cadre, bien que dans des formats différents et standardisées entièrement dans des bibliothèques d'objet. À titre d'exemple, l'Object Management Group a standardisé des spécifications pour des fonctionnalités comme l'association de données de test et de contraintes à des objets (analogues à l'usage courant des facettes sur des cadres et aux contraintes de langages comme Loom) et pour l'intégration de langages à règles$^,$.