Natuurlijke-Taalinterfaces week 5 Lambda-termen en Lambda-conversie Semantische constructie-regels met unificatie • s(Sem) np(X,Scope,Sem), vp(X,Scope). • np(X,Scope,forall(X,human(X) > Scope))) [iedereen]. • Vp(X,slapen(X)) [slaapt]. • Sem wordt geunificeerd tussen hoofd en een dochter, • Hulpvariabelen (+ unificatie) doen de rest… Natuurlijke-Taalinterfaces 2 coordinatie • • • • • • Jan slaapt en Piet slaapt s(Sem) s(C1), c(C1,C2,Sem), s(C2). c(C1,C2, C1 & C2) [en]. np(jan,P,P) [jan]. Jan en Piet slapen np(X,Sc,Sem) np(X,Sc,C1), c(C1,C2,Sem), np(X,Sc,C2). • Probleem: X= jan, X = piet…. • Je wilt een copie van Sc maken, en die met beide NP-betekenissen combineren…. Natuurlijke-Taalinterfaces 3 Coordinatie van NP’s • s(Sem) --> np(X,Scope,Sem), vp(X,Scope). • np(Subj, Sem, Sem & Sem) --> np(Subj), [and], np(Subj). • Het toepassen van een functie op een argument gebeurt door unificatie, • hierdoor kun je nooit twee verschillende copieën van een term maken... Natuurlijke-Taalinterfaces 4 Oplossing: Lambda-calculus • Compositionele semantiek: – Ken aan iedere constituent een betekenis toe, – Betekenis van een grotere constituent is een combinatie van betekenis van de delen. – Methode: lambda-expressies • DCG/unificatie methode is – Theoretisch minder duidelijk, – Een subset van lambda-calculus. Natuurlijke-Taalinterfaces 5 Lambda-calculus • x.F : een functie • x geeft aan wat het argument van de functie is, • de waarde van x.F toegepast op A is F[x/A]: F waarin alle voorkomens van x zijn vervangen door A. • Dit noemen we lambda-conversie. • (x.slaap(x))(jan) = slaap(jan) Natuurlijke-Taalinterfaces 6 Meer voorbeelden • Mark groet Ria • (y. x.groet(x,y)) (r) = x.groet(x,r) • (x.groet(x,r))(m) = groet(m,r) • Iedere man • (P.Q.x(P(x) Q(x))) (y.man(y)) = Q.x((y.man(y)) (x) Q(x)) = Q.x(man(x) Q(x)) Natuurlijke-Taalinterfaces 7 Adjectieven • Aardige man • P. x(aardig(x) & P(x)) (y. man(y)) = x.(aardig(x) & (y. man(y))(x)) = x.(aardig(x) & man(x)) Natuurlijke-Taalinterfaces 8 Regels • Semantiek van een regel is in principe altijd applicatie van een functor op een argument. • S NP VP • N0 A N1 sem: S’ = NP’(VP’) sem: N0’ = A’(N1’) Natuurlijke-Taalinterfaces 9 Lambda-termen vs. Prolog • tv(Y, X, groet(X, Y)) • vp(Subj,Sem) --> tv(Obj,Subj,Sem), np(Obj). • (y. x.groet(x,y)) (r) = x.groet(x,r) Natuurlijke-Taalinterfaces 10 Verschillen ‘s en Prolog • ‘secundaire’ lambda-conversie – (P.Q.x(P(x) Q(x))) (y.man(y)) = Q.x((y.man(y)) (x) Q(x)) = Q.x(man(x) Q(x)) • substitutie vs. unificatie Natuurlijke-Taalinterfaces 11 Coordinatie van NP’s • en : x y P(P(x) & P(y)) • jan en kees: xyP(P(x) & P(y)) (j) (k) = P(P(j) & P(k)) jan en kees slapen : P(P(j) & P(k)) (x.slaap(x)) = (x.slaap(x))(j) & (x.slaap(x))(k) = slaap(j) & slaap(k) Natuurlijke-Taalinterfaces 12 Lambda-termen in Prolog • • • • • s(NP@VP) --> np(NP), vp(VP). vp(Sem) --> iv(Sem). iv(lambda(X,slaap(X))) --> [slaapt]. np(lambda(P,P@jan)) --> [jan]. [jan,slaapt] = – s(lambda(P,P@jan)@lambda(X,slaap(X))) – na conversie: s(slaap(jan)) Natuurlijke-Taalinterfaces 13 Lambda-termen in Prolog • np(Det@N) --> det(Det), n(N). • n(lambda(X,man(X))) --> [man]. • det(lambda(P,lambda(Q, forall(Y,(P@Y) > (Q@Y))))) --> [iedere]. • [iedere,man] = np(la(P,la(Q,forall(Y, (P@Y) > (Q@Y))))@ la(X,man(X))) na conversie (2x): np(la(Q,forall(Y, man(Y) > (Q@Y)))) Natuurlijke-Taalinterfaces 14 Lambda-conversie in Prolog • Moet je na iedere toepassing van een regel lambda-conversie doen? • Ja : – S(Sem) np(NP), vp(VP), {normalize(NP@VP,Sem)}. – Nadeel 1: omslachtig, – Nadeel 2: niet onafhankelijk van parsealgoritme. Natuurlijke-Taalinterfaces 15 Lambda-conversie in Prolog • Moet je na iedere toepassing van een regel lambda-conversie doen? • Nee : – Conversie is een normalisatie-stap (dwz betekenis van de formule verandert niet), – Moment waarop je conversie doet is onbelangrijk (Church-Rosser theorem) – Dus kun je conversie ook achteraf doen, – Bijvoorbeeld in de pretty-printer. Natuurlijke-Taalinterfaces 16 Meer regels • Iedere categorie heeft 1 argument voor de semantiek, • De semantiek van constituenten is altijd applicatie (@). • vp(TV@NP) --> tv(TV), np(NP). • tv(la(P,la(X,P@la(Y,groet(X,Y))))) --> [groet]. Natuurlijke-Taalinterfaces 17 Huiswerk/opdracht • Lees Bouma 99, sectie 1.5 • Lees Blackburn/Bos, sectie 2.1 t/m 2.3. • Opdracht 2: – Verander de grammatica van opdracht 1 zodat er met lambda-termen gewerkt wordt. – Voeg een regel voor NP-coordinatie toe... Natuurlijke-Taalinterfaces 18