-
Notifications
You must be signed in to change notification settings - Fork 13
Prolog dans Tamgu
La partie triplet dans TREX est en réalité très proche de la notion de fait telle qu'elle est définie dans la Logique du Premier ordre. Il existe des langages de programmation qui ont été conçue spécifiquement pour la manipulation de ces faits. Prolog est certainement le plus connu de tous (voir Prolog 1).
Le but d'un programme Prolog est de vérifié la véracité d'une assertion définie sous la forme d'un prédicat ou d'un ensemble de prédicats. Un programme Prolog se compose d'une grammaire de règles et d'une base de connaissance. Evaluer un prédicat consiste soit à appliquer une règle dont la tête correspond à ce prédicat soit à identifier dans la base de connaissance un fait correspondant.
H -> P1, P2, P3.
Lorsqu'une règle s'applique, elle construit un arbre d'exploration, afin d'évaluer toutes les possibilités offertes par la grammaire. Certains opérateurs tels que le "cut" permettent d'élaguer cet arbre pour éviter une explosion exponentielle de l'exploration.
La manipulation des variables dans la logique des Prédicats, s'effectue via l'unification. Dans un langage comme Prolog, on distingue en effet les variables libres des variables instanciées. Une variable libre n'a pas encore de valeur. Lorsque l'on associe un prédicat avec un fait ou une tête de règles, le mécanisme d'unification va permettre aux variables libres d'acquérir une valeur. Si la variable est déjà instanciée, le mécanisme d'unification vérifiera si les deux variables sont compatibles ou égales.
Nous avons décidé d'utiliser Tamgu, un langage open-source, qui présente l'avantage de mêler en un seul formalisme un langage impératif proche de Python et un interpréteur Prolog. De ce fait, le travail souvent complexe de transformation des données en objets compatibles avec Prolog est largement simplifié. De plus, des fonctions plus prosaïques à la Python peuvent être appelés au sein des règles. Il suffit simplement que cette fonction renvoie "vrai" ou "faux" pour qu'elles soient traitées comme un élément de la logique des Prédicats.
Nous avons en particulier pu transformer l'ensemble des phrases et des triplets en faits Prolog. Il est devenu très simple dès lors d'écrire des règles pour extraire les éléments dont nous avions besoin pour l'entrainement. La règle qui suit par exemple, permet de vérifier que les arguments des faits TREX sont présents dans les phrases associées:
alias ⊂(a,s) = a in s;
Check_into(?Key) :- TREX(?Key,?A1,?A2), SENTENCE(?Key,?S), ⊂(?A1,?S), ⊂(?A2,?S).
Remarquons que les variables de Prédicat sont identifiées par la présence d'un "?" en tête. La fonction "⊂" ne fait que vérifier si l'argument est présent dans la phrase. Les triplets et les phrases issues de TREX sont tous indexés sur une clef particulière qui identifie un type de prédicat particulier. Nous avons systématique gardé cette clef comme premier argument pour l'ensemble des faits issus de TREX.
@article{campbell1984implementation, title={Implementation of PROLOG}, author={Campbell, John A}, year={1984}, publisher={John Wiley and Sons, New York, NY} }