PATR II Interpreter Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf
PATR II2 Grammatik-Formalismen Grammatikformalismen sind Sprachen zur Beschreibung von Sprachen. –Metasprache (Formalismus: Beschreibungsebene) –Objektsprache (natürliche Sprache: Objektebene) Anwendungszweck von Formalismen: –Werkzeug-orientiert (PATR II, ALE, QType,...) –Theorie-orientiert (LFG, GPSG, HPSG,...)
PATR II3 Motivation für Formalismen Präzises Werkzeug für die Beschreibung natürlicher Sprachen. Einschränkung der Klassen möglicher natürlicher Sprachen. Computer-interpretierbare Charakterisierung natürlicher Sprachen.
PATR II4 Anforderungen an Formalismen Linguistische Adäquatheit –Linguistische Phänomene sollten möglichst direkt darstellbar sein. Ausdruckskraft –Welche Problemklassen können überhaupt dargestellt werden? Berechenbarkeit/Effizienz –Welche Werkzeuge aus der Informatik werden benötigt und welche Eigenschaften haben sie?
PATR II5 PATR-Design-Entscheidungen Oberflächenbasiert (vs. transformationiell) Informationstragend (linguistisches Wissen) Induktiv (Berechnung der Informationskombination) Deklarativ (was vs. wie wird berechnet) Merkmalsbasiert bzw. Constraintbasiert (komplexe Merkmalsstrukturen)
PATR II6 Abdeckung theoretischer Frameworks CG categorial grammar GPSGgeneralized phrase structure grammar HPSGhead driven phrase structure grammar LFGlexical functional grammar FUGfunctional unification grammar DCGdefinite clause grammar...
PATR II7 PATR Basisoperationen Konkatenation –String-Kombination auf Basis eines kontextfreien Phrasenstrukturgerüst. Jeder (Teil-)String wird mit einer Merkmalsstruktur assoziiert. Unifikation –Informations-Kombination durch monotone Unifikation von Merkmalsstrukturen.
PATR II8 Merkmalsstrukturen Seien F (features) und V (values) Mengen. Dann ist FS (feature structures) eine Menge von partiellen Funktionen F V mit V FS 1. 1: Bzw. V ohne atomare Werte.
PATR II9 DAGs Zyklische Merkmalsstrukturen können sich selbst als Wert enthalten. Azyklische Merkmalsstrukturen können als gerichtete azyklische Graphen (DAGs) betrachtet werden. numpers sing3
PATR II10 Typ- vs. Tokenidentität Typidentität: f und g haben zwei verschiedene Werte vom Typ a. Tokenidentität: f und g haben den identischen Wert a. Die Indexe nennt man Tag, Reentrancy oder Koindexierung.
PATR II11 Subsumption Subsumption ist eine partielle Ordnungsrelation über Merkmalsstrukturen, die auf der Spezifizität der enthaltenen Information beruht. Informell: FS 1 FS 2 gdw. alle Information in FS 1 ebenfalls in FS 2 enthalten ist.
PATR II12 Unifikation Die Unifikation FS 1 FS 2 = FS 0 ist die allgemeinste Merkmalsstruktur FS 0, so dass FS 1 FS 0 und FS 2 FS 0. Falls FS 0 nicht existiert, scheitert die Unifikation.
PATR II13 PATR II Merkmalslogik Eine Merkmalslogik ist eine Beschreibungs- sprache für Merkmalsstrukturen. Ein Ausdruck L i L der PATR II-Merkmalslogik L ist eine Abbildung L i FS (vs. L i (FS) mit Negation und Disjunktion). Bestandteile der PATR II-Merkmalslogik sind –Pfadgleichungen P –Makros ML = (P M)* –Konjunktion
PATR II14 Pfadgleichungen Seien FS i FS, F j F, AV k AV (atomare Werte), mit AV V und sei P die Menge der Pfade, dann ist G die Menge der Pfadgleichungen mit P i = AV k P i = P j. Originalnotation: – = – = sg Prolog-Notation: –S:head === VP:head –NP:head:agr:num === sg :- op(600,xfx,===). :- op(510,xfy, : ).
PATR II15 Makros (Templates) Makros sind Abkürzungen für Merkmalsstrukturen und müssen definiert werden, bevor man sie verwenden kann. Makro-Definition: Let Makroname be L i. Makro-Verwendung: L j Makroname L k Originalnotation: –Let Third be = 3. –Let Sing be = sing. –Let ThirdSing be Third Sing. Prolog-Notation: –third(F):- F:head:agr:pers === 3. –sing(F):- F:head:agr:num === sing. –thirdSing(F):- third(F), sing(F).
PATR II16 Merkmalsstrukturen in Prolog Wir repräsentieren Merkmalsstrukturen in Prolog als offene Listen: –[agr:[num:sg|A]|B] –[agr:[pers:3|C]|D] Die Unifikation der beiden Strukturen soll folgendes Ergebnis liefern: –[agr:[num:sg, pers:3|E]|B] –[agr:[pers:3, num:sg|E]|B] –B=D, A=[pers:3|E], C=[num:sg|E]
PATR II17 unify/2 % unify(?FS1,?FS2) unify(X,X):- !. unify([P:V|FS1],FS):- pathval(FS,P,V,FS2), unify(FS1,FS2). pathval([F:V1|FS], F, V2, FS):- !, unify(V1, V2). pathval([FS|FSs1], F, V, [FS|FSs2]):- pathval(FSs1, F, V, FSs2).
PATR II18 Zerlegung von Pfaden ?- current_op(Precedence,Associativity,:). Precedence = 500 Associativity = xfy yes ?- a:b:c = F:P. F = a P = b:c yes a:b:c a:(b:c)
PATR II19 Interpreter für Pfadgleichungen X === Y :- denotes(X, X1), denotes(Y, Y1), unify( X1, Y1). denotes(V, V):- var(V), !. denotes(A, [A|_]):- atomic(A), !. denotes(F:P, V):- pathval(F, P, V, _), !. denotes(FS, FS).
PATR II20 Erweiterung für pathval/4 pathval(FS1, F:P, V, FS2):- !, pathval(FS1, F, FS3, FS2), pathval(FS3, P, V, _). pathval([F:V1|FS], F, V2, FS):- !, unify(V1, V2). pathval([FS|FSs1], F, V, [FS|FSs2]):- pathval(FSs1, F, V, FSs2).
PATR II21 Syntaxregeln: PATR II Rule X 0 X 1 X 2 : = s = np = vp = = nom. Rule X 0 X 1 X 2 : = vp = v = np = =. Allgemeines Schema: Rule FS i FS + : G*. (Makros?)
PATR II22 Syntaxregeln: DCG cat(S) --> { S:cat === 'S', NP:cat === 'NP', VP:cat === 'VP', S:subj === VP:subj, S:obj === VP:obj, VP:subj === NP, nom(NP) }, cat(NP), cat(VP). cat(VP) --> { VP:cat === 'VP', V:cat === 'V', NP:cat === 'NP', VP:obj === V:obj, VP:subj === V:subj, VP:obj === NP }, cat(V), cat(NP). Zur Vermeidung von linksrekursiven Loops müssen die Merkmalsstrukturen vor der Verzweigung berechnet werden.
PATR II23 Syntaxregeln: Klauseln cat(S,P0,P2):- S:cat === 'S', NP:cat === 'NP', VP:cat === 'VP', S:subj === VP:subj, S:obj === VP:obj, VP:subj === NP, nom(NP), cat(NP,P0,P1), cat(VP,P1,P2). cat(VP,P0,P2):- VP:cat === 'VP', V:cat === 'V', NP:cat === 'NP', VP:obj === V:obj, VP:subj === V:subj, VP:obj === NP, cat( V,P0,P1), cat(NP,P1,P2).
PATR II24 Lexikon: PATR II Allgemeines Schema: Word String: L*. Beispiele: –Word klaut: = V AccSing. –Word paul: = NP NomSing. –Word bananen: = NP AccPlur.
PATR II25 Lexikon: DCG cat(V) --> {V:cat === 'V', acc_sing(V)}, [klaut]. cat(NP) --> [paul], {NP:cat === 'NP', nom_sing(NP)}. cat(NP) --> {NP:cat === 'NP', acc_plur(NP)}, [bananen].
PATR II26 Lexikon: Klauseln cat(V,[klaut|T],T):- V:cat === 'V', acc_sing(V). cat(NP,[paul|T],T):- NP:cat === 'NP', nom_sing(NP). cat(NP,[bananen|T],T]):- NP:cat === 'NP', acc_plur(NP).
PATR II27 Makros acc(C):- C:agr:cas === acc. nom(C):- C:agr:cas === nom. sing(C):- C:agr:num === sing. plur(C):- C:agr:num === plur. nom_sing(C):- nom(C), sing(C). acc_sing(C):- acc(C), sing(C). acc_plur(C):- acc(C), plur(C).
PATR II28 PATR II-Parser parse:- nl, write('Phrase >> '), read_wordlist(String), nl, parse(String). parse(String):- cat(FS, String, []), print_fsm_(FS).
PATR II29 Parsing-Session
PATR II30 Literatur Shieber, Stuart (1986): An Introduction to Unification-based Approaches to Grammar. CSLI Lecture Notes. Gazdar, Gerald & Chris Mellish (1989): Natural Language Processing in Prolog. Addison Wesley. Covington, Michael A. (1994): Natural Language Processing for Prolog Programmers. Chap. 6: Parsing Algorithms. Prentice-Hall.