Natuurlijke-Taalinterfaces

advertisement
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:
xyP(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
Download