Spoiler (Sélectionnez le texte dans le cadre pointillé pour le faire apparaître)
L'horaire tardive à laquelle a été rédigé cet article est due à un petit ennui technique.
à Ertaï de l'avoir corrigé au plus vite.
J'en profite pour ajouter que pour fêter le passage de
Sbirematqui
vers le langage
Haskell
j'ai décidé de rehausser légèrement le niveau. De façon purement mesquine, juste histoire d'être certain de rester au top
Ne vous étonnez pas si vous ne comprenez pas tout tout de suite, lisez lentement, relisez, et dans quelques semaines/mois/années ça prendra davantage de sens même si ça vous paraît totalement ésotérique aujourd'hui.
L'histoire continue
Ceux qui croient que la mise en parenthèse du projet ERic m'empêche d'alimenter ce blog se fourvoient. Un temps mort dans le développement c'est au contraire le moment idéal pour mieux fixer des idées parfois trop mouvantes. Et quoi de mieux pour fixer ses idées que de les mettre au propre pour les partager. De façon informelle, en français, bien avant de devoir rédiger la documentation officielle et définitive (qui serait cette fois en anglais).
Les pré-requis
Ce tutoriel n'est pas le plus facile de la série sur ERic.
Pour l'assimiler au mieux je ne peux que vous recommander :
la lecture de la
documentation officielle d'ERic 0.2f
(en français)
éventuellement, la lecture de l'
introduction aux graphes-conceptuels
par
John F. Sowa
(en anglais)
Les 4 visages d'ERic
Il y a 4 façons de comprendre et d'envisager ERic en tant qu'un système complet d'information :
comme une
représentation graphique du langage naturel
comme une structure de données informatique
comme une modélisation des connaissances
comme une
logique diagrammatique
Jusqu'ici on a surtout insisté sur les deux premiers aspects :
Quoique de manière incomplète ERic nous permet d'assez bien rendre compte de la sémantique du langage naturel.
La structure de données de prédilection est le
multi-digraphe-étiqueté
. On a justifié ce choix par le fait que cette structure de données est familière au lecteur et au programmeur.
On a également donné un méta-modèle d'ERic. C'est dire qu'au moins implicitement on assume une certaine capacité de modélisation.
On n'a pas donné de sémantique logique formellement dérivable d'un graphe entités/relations. Pour ne pas embarrasser le non-logicien mais surtout parce que le programmeur principal est plus à l'aise avec la vision "structure de données". Cependant aux détours de certaines explications on a laissé entrevoir qu'une telle logique était à l'œuvre. De plus on a identifié l'
homomorphisme
comme la méthode de requête et la
subsomption
comme la méthode de classification. Il n'y aucune raison de remettre en cause ces choix de mathématique/logique.
Comment améliorer ERic ?
Quelque soit la modification opérée sur ERic elle impactera simultanément les 4 interprétations de façon cohérente.
Avoir 4 interprétations étroitement liées est-il un avantage ou bien une complexité supplémentaire ?
A-t-on l'obligation d'anticiper 4 fois plus et de tourner 4 fois sa langue dans sa bouche avant de changer une ligne de code ?
Heureusement non. Dans le cas contraire ERic serait de fait condamné à la stagnation.
En fait on peut carrément choisir une interprétation, améliorer ERic dans cette interprétation, et l'amélioration se répercutera sur les 3 autres interprétations sans même qu'on ait à y penser.
Mieux: on peut identifier une limitation dans une interprétation et la corriger à l'aide d'une extension dans une autre interprétation. Chaque amélioration se répercute sur les 4 interprétations.
C'est d'ailleurs exactement comme ça que l'on va procéder.
L'homme est supérieur en capacités linguistiques, c'est donc sur ce point qu'on va chercher des problèmes.
ERic est supérieur en capacités de modélisation, c'est dans ce domaine qu'on va chercher les solutions.
ERic 0.2f possède des limitations linguistiques
Éva veut une crème-glacée
Tom croit qu'Éva veut épouser un marin
Dans les deux premier cas on a un complément d'objet direct (un Dieu, une crème-glacée).
Le dernier cas est plus composite. Tom croit à une
Proposition
qui affirme (
Statement
) quelque chose. Éva veut une
Situation
qui décrit (
Description
) un certain état.
ERic 0.2 ne gère pas cette configuration de façon optimale :
Il n'est pas possible d'exprimer que le marin n'existe pas ailleurs que dans la tête de Tom.
Pire encore: si on demande "une personne veut-t-elle se marier" on aura pour réponse "oui, Éva veut se marier". Sans rien préciser des pensées de Tom. Le problème ici est que le graphe n'est pas assez structuré. Le fait que Tom croit quelque chose n'est qu'une extension du fait qu'Éva veut épouser un marin. Et vice-versa. Il y a des
propositions
mais il n'y a pas de
propositions subordonnées
.
Évidemment on voudrait bien remédier à ces déficiences.
On a dit également qu'ERic ne supportait pas la négation. La version ERic 0.2d supporte la négation atomique qui n'a de négation à peu près que le nom. En fait il s'agit juste d'interdire un certain type de lien entre deux entités. On n'a pas de négation générale. Et pour des raisons de logique qui dépassent le cadre de ce tutoriel on n'ambitionne pas d'en avoir.
Modéliser ERic pour améliorer ERic
Comme n'importe quel concepteur de logiciel on va utiliser un langage de conception pour faciliter la re-factorisation d'ERic.
Rappel du méta-modèle d'ERic 0.2f
Remarque cruciale n°1:
dans ce méta-modèle tous les
référents
(Name, Integer, String, Reference, Float) sont des types atomiques, il n'y a aucun type structuré.
Remarque cruciale n°2:
ce méta-modèle définit le type
EntityRelationGraph
qui lui est un type très structuré.
Idée:
On va simplement ajouter le type
EntityRelationGraph
dans la liste des
référents
possibles. De cette façon on pourra avoir des nœuds dont le
référent
est un graphe entités/relations. Un graphe dont les nœuds peuvent contenir des graphes s'appelle un graphe à hyper-nœuds.
Spoiler (Sélectionnez le texte dans le cadre pointillé pour le faire apparaître)
Certains parlent de graphes imbriqués plutôt que de graphes à hyper-nœuds. Moi je préfère graphe à hyper-nœuds parce que sinon on pourrait imbriquer dans les nœuds ou bien dans les arêtes ou bien dans les deux. C'est trop ambigu. Graphe à hyper-nœuds c'est clair : on imbrique que dans les nœuds.
Ceux qui connaissent les diagrammes d'états (
StateCharts
) ont déjà rencontré des graphes imbriqués.
Le nouveau méta-modèle d'ERic enrichi par les référents EntityRelationGraph
Conséquences linguistiques
Comme on va le voir cette modification résout le problème des
propositions subordonnées
.
Par contre cela ne résout pas le problème de l'existence (in)certaine du marin.
Tom croit qu'Éva veut épouser un marin (avec un digraphe à hyper-nœuds)
On voit que les arêtes
Statement
et
Description
ont disparu.
Chaque
proposition subordonnée
est désormais délimitée par un nœud-cadre.
Désormais le code contient une indentation pour marquer le niveau d'imbrication des nœuds :
join
[Believe *b] Experiencer [Person:Tom] b Theme
[Proposition
[Want *w] Experiencer [Person:Eva] w Theme
[Situation
[Marry *m] Agent [Person:Eva]
m Theme [Sailor]
]
].
Conséquences logiques
Les notions d'
homomorphisme
et de
subsomption
deviennent récursives. En particulier les requêtes deviennent récursives. Elles se propagent à l'intérieur des hyper-nœuds tout en mémorisant le contexte externe.
Concrètement lorsque l'on demande "une personne veut-t-elle se marier" on aura pour réponse "oui, Tom croit qu'Éva veut se marier" au lieu de simplement "oui, Éva veut se marier".
Conséquences sur les structures de données
Comme on l'a dit on passe du
multi-digraphe-étiqueté
au
multi-digraphe-étiqueté-à-hyper-nœuds
.
Le challenge n'est pas tant dans la représentation de ce type de graphe que dans la façon d'en stocker une très grande quantité tout en ralentissant le moins possible la recherche récursive d'homomorphismes.
Conclusion
On a présenté une solution au problème des
propositions subordonnées
et ce que cette solution implique sur les 4 interprétations d'un graphe entités/relations.
Le prochain article présentera une solution au problème de l'existence (in)certaine du marin ainsi que ses implications profondes sur la nature algorithmique des graphes-conceptuels.
SpiceGuid il y a plus de 9 ans , modifié il y a plus de 9 ans