Parsing: Top-down en bottom-up

19
Parsing: Top-down en bottom-up Natuurlijke taalverwerking week 6

description

Parsing: Top-down en bottom-up. Natuurlijke taalverwerking week 6. Bomen. een lokale boom bestaat uit een moeder en een willekeurig aantal dochters Dochters kunnen zelf weer bomen zijn of een woord. m. d1. ……. d n. slaapt. d11. d12. Bomen. boom(m,[D1,…,Dn]) woord(dn,slaapt). m. - PowerPoint PPT Presentation

Transcript of Parsing: Top-down en bottom-up

Page 1: Parsing: Top-down en bottom-up

Parsing:Top-down en bottom-up

Natuurlijke taalverwerkingweek 6

Page 2: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 2

Bomen

m

d1 dn

d11 d12slaapt

• een lokale boom bestaat uit een moeder en een willekeurig aantal dochters

•Dochters kunnen zelf weer bomen zijn of een woord.

……...

Page 3: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 3

Bomen

m

d1 dn

d11 d12slaapt

•boom(m,[D1,…,Dn])

• woord(dn,slaapt)

……...

b(m,[b(d1,[b(d11,_),b(d12,_)]),…,w(dn,slaapt)])

Page 4: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 4

DCG met bomen

• s(b(s,[NP,VP])) --> np(NP), vp(VP).• vp(b(vp,[V])) --> v(V).• np(w(np,jan)) --> [jan].

• ?- s(Boom,[jan,slaapt],[]).• Boom = b(s,[w(np,jan),b(vp,[w(v,slaapt)])])

Page 5: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 5

DCG’s en links-recursie

• Prolog gebruikt een top-down zoek-strategie.

• Deze is niet geschikt voor links-recursie.• an eet en jan slaapt• s --> s, [en], s.• kaartje met korting• n --> n, pp.

Page 6: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 6

Links-recursie: meer voorbeelden

• Peter’s (broer’s) huis.• np --> det, n.• det --> np, [s].

• een (erg) aardig kind• n -> a, n.• a -> int, a.• int --> [erg] ; [heel] ; [].

Page 7: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 7

Oplossing 1: aanpassen grammatica

• n --> n, pp• is equivalent aan

• n --> n_wrd, pp_ster. • n_wrd --> [kaartje].• pp_ster --> pp, pp_ster.• pp_ster --> [].• pp --> p, np.

Page 8: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 8

Nadelen Oplossing 1

• wel dezelfde strings, niet dezelfde bomen

n

n

n

n

n

pp

n ppn pp

pp

pp*

pp*

Page 9: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 9

Parsing

• scheid regels (data) en parser (algoritme)

• Grammatica-regels:

regel(s,[np,vp]).regel(np,[det,n]).woord(det,de).

•Dit zijn eenvoudige Prolog-feiten.

Page 10: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 10

Top-down parser in Prolog

top_down(Cat,P0,P1) :- regel(Cat,Dochters), vind_ds(Dochters,P0,P1).top_down(Cat,[Woord|Wn],Wn) :- woord(Cat,Woord).

vind_ds([D1|Ds],P0,P2) :- top_down(D1,P0,P1), vind_ds(Ds,P1,P2).vind_ds([],P0,P0).

Page 11: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 11

Shift-reduce parsing

• Bottom-up parsing!• Begin bij de woorden in de input, en

probeer deze samen te voegen tot zinsdelen.

• Probeer zinsdelen samen te voegen tot een zin.

• Bottom-up parsers hebben geen last van links-recursie!

Page 12: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 12

bottom-up parsing

• de hond snurkt• DET hond snurkt• DET N snurkt• NP snurkt• NP V• NP VP• S

Page 13: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 13

shift-reduce algoritme

• Stapel/Stack: hierop staan tussenresultaten.

• Shift-actie : Verwijder het meest linkse woord uit de invoer, en plaats de categorie van het woord op de stapel

• Reduce-actie: Vervang C1…Cn op de stapel door C0 als er een regel C0 --> C1…Cn bestaat.

Page 14: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 14

Shift-reduce algoritme

String Stapel actie regel

1 de hond snurkt [] sh w(det,de)

2 hond snurkt [det] sh w(n,hond)

3 snurkt [det,n] red r(np,[det,n])

4 snurkt [np] sh w(v,snurkt)

5 [np,v] red r(vp,[v])

6 [np,vp] red r(s,[np,vp])

7 [s]

Page 15: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 15

Shift-reduce in Prolog

sr(Invoer,Stapel) :- reduce(Stapel,NwStapel), sr(Invoer,NwStapel).sr(Invoer,Stapel) :- shift(Invoer,RestInvoer), sr(RestInvoer,[Cat|Stapel]).sr([],[s]).

Page 16: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 16

Shift in Prolog

shift([Woord|Invoer],Invoer,Cat) :- woord(Woord,Cat).

Page 17: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 17

Reduce in Prolog I

reduce(Stapel,[M|NwStapel]) :- reduce_regel(M,Dochters), append(Dochters,NwStapel,Stapel).

reduce_regel(s,[vp,np]).

N.B. volgorde van de dochters is omgekeerd!

Page 18: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 18

Reduce in Prolog II

reduce([vp,np|Stapel],[s|Stapel]).reduce([n,det|Stapel],[np||Stapel).

voordeel: geen append.nodig: automatisch omzetten van regelsin reduce-predicaten.

Page 19: Parsing: Top-down en bottom-up

Natuurlijke Taalverwerking 19

Bottom-up

• voordeel: links-recursie is geen probleem, omdat je vanuit de woorden begint. Het aantal woorden is altijd eindig…

• nadeel: epsilon-regels (det --> e)• shift(Invoer,Invoer,det).• Je kunt eindeloos categorieën aan de

stapel toevoegen, zonder dat de invoer korter wordt…...