INF2820 Datalingvistikk V Gang 2.3 Jan Tore Lønning

Like dokumenter
INF2820 Datalingvistikk V Gang 26.2 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 27.2 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 2.3 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 2.3 Jan Tore Lønning

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 Datalingvistikk V2012

2/24/2012. Context-Free Grammars. I dag. Avledning. Eksempel: grammar1 PARSING. Jan Tore Lønning

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF2820 Datalingvistikk V gang, 27.2 Jan Tore Lønning

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 Datalingvistikk V Gang 6.3 Jan Tore Lønning

2/20/2012. I dag. Parsing. Recursive descent parser SÆRLIG TABELLPARSING. Venstre- og høyreavledning. Jan Tore Lønning

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V2012. Jan Tore Lønning

2/22/2011. Høyre- og venstreavledninger. I dag. Chomsky-normalform (CNF) Chomsky-normalform (CNF) PARSING. Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V Gang 4.5 Jan Tore Lønning

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF2820 Datalingvistikk V gang, Jan Tore Lønning

INF2820 Datalingvistikk V Gang 9.3 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 9.3 Jan Tore Lønning

2/24/2012. Dynamic Programming. I dag. Example. Example PARSING. Jan Tore Lønning

INF2820 Datalingvistikk V Gang 13.3 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 19.3 del 1 Jan Tore Lønning

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V Gang 9.3 Jan Tore Lønning

INF2820 Datalingvistikk V2012. Jan Tore Lønning

3/1/2011. I dag. Recursive descent parser. Problem for RD-parser: Top Down Space. Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

INF 2820 V2015: Obligatorisk innleveringsoppgave 3

INF2820 Datalingvistikk V Gang Jan Tore Lønning

3/5/2012. Chart alternativ datastruktur. Fundamentalregelen. Chart-parsing. Bottom-up FORMELL SPRÅKTEORI. Jan Tore Lønning

INF5830, H2009, Obigatorisk innlevering 2. 1 Oppgave: Unære produksjoner i CKY

Oppgave 2. Eksamen INF2820, 2015, oppgave 2. La gramatikk G være:

3/8/2011. I dag. Dynamic Programming. Example. Example FORMELLE EGENSKAPER VED SPRÅK (KAP. 16) Jan Tore Lønning & Stephan Oepen

INF 2820 V2016: Obligatorisk innleveringsoppgave 3

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF2820 Datalingvistikk V Gang 13.3 Jan Tore Lønning

Oppgave 1. La G1 være grammatikken med hovedsymbol S og følgende regler:

INF2820 Datalingvistikk V gang, Jan Tore Lønning

Eksamen INF2820 Datalingvistikk, H2018, Løsningsforslag

Spørsmål 1.1 (10%) Lag en ikke-deterministisk endelig tilstandsautomat (NFA) som beskriver dette språket.

UNIVERSITETET I OSLO

INF2820-V2018 Oppgavesett 10 Gruppe 18.4

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Oppgave 1 Vi har gitt følgende grammatikk for noe vi kan kalle speilengelsk :

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

INF2820 V2017 Oppgavesett 5 arbeidsoppgaver

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 V2017 Oppgavesett 5 Gruppe 21.2

INF 2820 V2016: Innleveringsoppgave 3 hele

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

INF2820 Datalingvistikk V Gang 16.3 Jan Tore Lønning

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 Datalingvistikk V2014. Forelesning 4, 6.2 Jan Tore Lønning

1/26/2012 LITT PYTHON. INF2820 Datalingvistikk V2012. Hvorfor Pyhton. Python syntaks. Python er objektorientert. Python datatyper.

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

INF2820 Datalingvistikk V2016. Jan Tore Lønning

2/6/2012. Begrensninger ved regulære språk. INF2820 Datalingvistikk V2012. Formelle språk som ikke er regulære KONTEKSTFRIE GRAMMATIKKER.

INF2820 Datalingvistikk V2014. Jan Tore Lønning

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2016. Jan Tore Lønning

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

INF3110 Programmeringsspråk

INF2820 Datalingvistikk V2017 Forelesning 1.2 Jan Tore Lønning

INF2820 Datalingvistikk V2015. Jan Tore Lønning

INF2820 Datalingvistikk V gang, Jan Tore Lønning

INF2820 Datalingvistikk V Gang 6.4 Jan Tore Lønning

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Oppgave 1 (samlet 40%)

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Kap. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) INF / Stein Krogdahl Ifi, UiO

INF2820 Datalingvistikk V2017 Forelesning 2, 23.1 Jan Tore Lønning

Oppgave 1. Spørsmål 1.1 (10%) Gitt det regulære uttrykket: a((bcd)+(cd))*cd

INF2820 Datalingvistikk V2015. Jan Tore Lønning

INF2820 Datalingvistikk V2015. Jan Tore Lønning

Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

Bottom up parsering (nedenfra-og-opp) Kap. 5 del 1 Intro til parsering nedenfra-og-opp samt LR(0) og SLR(1) grammatikker INF5110 v2006

INF2820 Datalingvistikk V forelesning, 30.1 Jan Tore Lønning

Syntax/semantics - I INF 3110/ /29/2005 1

Oppgave 2. INF5110 oppgave 2 på eksamen v04 med teori. FirstMengder. Arne Maus Ifi. Eks. 4.9 Beregning av First-mengde. terminal

INF2820 Datalingvistikk V Gang 23.3 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 5.3 Jan Tore Lønning

INF2820 Datalingvistikk V Gang 30.3 Jan Tore Lønning

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

INF2820 Datalingvistikk V Gang 16.3 Jan Tore Lønning

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

INF2820 Datalingvistikk V Gang 6.4 Jan Tore Lønning

Kap.4 del 2 Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

1/31/2011 SAMMENHENGER FSA OG REGULÆRE UTTRYKK. Regulære språk. Fra FSA til RE. Fra regulært uttrykk til NFA REGULÆRE UTTRYKK I DATALINGVISTIKK DEL 2

Stoff som i boka står i kap 4, men som er. 10. Februar Ifi, UiO

Kap. 4: Ovenfra-ned (top-down) parsering

INF 5110, 3. februar Dette foilheftet: Kapittel 3

INF2820 Datalingvistikk V Gang 13.4 Jan Tore Lønning

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Transkript:

INF2820 Datalingvistikk V2015 7. Gang 2.3 Jan Tore Lønning

PARSING DEL 2 2

I dag Recursive-descent parser, kort repetisjon Shift-reduce parser (bottom-up) Algoritme for anerkjenning Eksempelimplementasjon Svakheter ved RD- og SR-parsing CKY Algoritme Implementasjon 25. februar 2015 3

Parsing Gitt en grammatikk G og streng s Spm1: Er s L(G) Spørsmål om anerkjennelse ( recognition ) Spm2: Hvorfor er s L(G)? Hva er frasestrukturen til s i G? Finn alle trær i T(G) som har s som utkomme ( yield ) Parsing 25. februar 2015 4

Recursive descent parser S the dog saw a man in the park NP VP the dog saw a man in the park Det N VP the dog saw a man in the park the N VP the dog saw a man in the park N VP dog saw a man in the park dog VP dog saw a man in the park VP saw a man in the park V NP PP saw a man in the park saw NP PP saw a man in the park NP PP a man in the park Det N PP a man in the park a N PP a man in the park N PP man in the park man PP man in the park PP in the park P NP in the park in NP in the park NP the park Det N the park the N the park N park park park # # 25. februar 2015 5

Recursive descent parser Lager en venstreavledning Det samme som å bygge et tre: Fra toppen ( top-down ) Fra venstre mot høyre I utgangspunktet er dette en ikkedeterminsitisk prosess: Hvilken grammatikkregel skal vi velge? Recursive descent-algoritmen gjør dette deterministisk Prøver alle alternativ ved et dybde-først søk Enkelt å implementere gjenkjenning, f.eks. i Python, ved rekursiv programmering Litt mer fiklete å programmere en parser som lager trær. 25. februar 2015 6

I dag Recursive-descent parser, kort repetisjon Shift-reduce parser (bottom-up) Algoritme for anerkjenning Eksempelimplementasjon Svakheter ved RD- og SR-parsing CKY Algoritme Implementasjon 25. februar 2015 7

Datastruktur Høyreavledning S NP VP NP V NP PP NP V NP P NP NP V NP P Det N NP V NP P Det park NP V NP P the park NP V NP in the park NP V Det N in the park NP V Det man in the park NP V a man in the park NP saw a man in the park Det N saw a man in the park Det man saw a man in the park the dog saw a man in the park Datastruktur reduce shift S # NP VP # N V NP PP # N V NP P NP # NP V NP P Det N # NP V NP P Det park # NP V NP P Det park NP V NP P the park NP V NP P the park NP V NP in the park NP V NP in the park NP V Det N in the park NP V Det man in the park NP V Det man in the park NP V a man in the park NP V a man in the park NP saw a man in the park NP saw a man in the park Det N saw a man in the park Det dog saw a man in the park Det dog saw a man in the park the dog saw a man in the park # the dog saw a man in the park 25. februar 2015 8

Bottom-up: Shift reduce parser Struktur: Words: en liste av ord (terminaler) Stack: en stack av symboler (terminaler og ikketerminaler) Vanlig notasjon: Stack Words (toppen av stacken til høyre i Stack) Start: Words:= ordene i setningen som skal analyseres Stack:= tom Løkke: Hvis Words=[] og Stack=[S]: stopp med suksess! Hvis mulig, gjør en av følgende: (Shift:) Hvis Words=/=[], La Stack:=Stack+ first(words) og Words:=rest(Words) (Reduce:) Hvis det fins α, β, B, en regel B β og Stack= α + β: la Stack= α + B 25. februar 2015 9

Bottom-up: Shift reduce parser ε Kim saw the girl with the telescope NP V Det girl with the telescope NP V Det girl with the telescope (SHIFT) NP V Det N with the telescope (REDUCE) NP V NP with the telescope (REDUCE) Merk: Det er bare toppen av stacken (det lengst til høyre) som kan reduseres i hvert trinn 25. februar 2015 10

def recognize(grammar, stack, rwords, trace): if rwords==[] and len(stack)==1 and stack[0]==grammar.start(): return True else: for p in grammar.productions(): rhs = list(p.rhs()) n = len(rhs) if stack[-n:] == rhs: newstack = stack[0:-n] newstack.append(p.lhs()) if recognize(grammar, newstack, rwords,trace): return True if not len(rwords) == 0: newstack = stack[:] newstack.append(rwords[0]) if recognize(grammar, newstack, rwords[1:], trace): return True return False 25. februar 2015 11

Fra anerkjenner til parser La stacken bestå av deltrær Hodet i deltreet er symbolet for algoritmen Stack: 4 elements Remaining input 12

def parse(grammar, stack, rwords): trees = [] if rwords == [] and len(stack)==1 and stack[0].node ==grammar.start(): return [stack[0]] else: for p in grammar.productions(): rhs = list(p.rhs()) n = len(rhs) top = [top_of[node] for node in stack[-n:]] if top == rhs: newst = stack[0:-n] newst.append(tree(p.lhs(), stack[-n:])) newtrees = parse(grammar,newst,rwords) trees = trees + newtrees if not len(rwords) == 0: newstack = stack[:] newstack.append(rwords[0]) newtrees = parse(grammar,newstack, rwords[1:]) trees = trees + newtrees return trees 25. februar 2015 13

def top_of(element): if type(element) is str: t = element else: t = element.node return t 25. februar 2015 14

SR-algoritme ikke-deterministisk To plasser for valg/ikke-determinisme: Skal vi flytte eller redusere? Hva skal vi velge når vi har flere valg for reduksjon? Eks: NP DET N NP N En implementasjon vil følge en fast strategi her. Hvis hver regel i grammatikken har en høyreside som består av nøyaktig en terminal (leksikalsk regel), eller som består av bare ikketerminaler, så kan algoritmen gjøres mer effektiv: Hver gang vi shifter et ord over på stacken, reduserer vi (Men fremdeles eksponetiell!) 25. februar 2015 15

I dag Recursive-descent parser, kort repetisjon Shift-reduce parser (bottom-up) Algoritme for anerkjenning Eksempelimplementasjon Svakheter ved RD- og SR-parsing CKY Algoritme Implementasjon 25. februar 2015 16

Problemer spesielt for Shift-Reduce Unære produksjonsregler: Shift-Reduce kan tillate disse, men en må sjekke at det ikke er cykler av unære regler i grammatikken: A B B A Tomme produksjonsregler: NP DET N PPS PPS PP PPS PPS # Når skulle vi foreslå dem? Hvor mange? Iterasjon? 17

Problemer for RD-parsing 1. Venstrerekursjon: Hvordan takler parseren N AP N N N PP? 2. Dobbeltarbeid: Som en del av en overordnet gal analyse kan den finne riktige deler, men disse blir glemt 3. Prøving og feiling som er litt blind 25. februar 2015 18

Problem for både RD og SR Ineffektivitet RD: Eksempel: S NP VP Noen valg under NP Noen valg under VP Vi foretar valgene for VP på nytt for hvert alternativ under NP Tilsvarende for SR For hvert valg vi foretar må vi se på alle muligheter for resten av strengen på nytt 25. februar 2015 19

I dag Recursive-descent parser, kort repetisjon Shift-reduce parser (bottom-up) Algoritme for anerkjenning Eksempelimplementasjon Svakheter ved RD- og SR-parsing CKY Algoritme Implementasjon 25. februar 2015 20

Dynamisk programmering I en beregning kan det inngå delberegninger som må foretas flere ganger Med DP tar vi vare på resultatet av disse beregningene underveis slik at Vi slipper å gjøre delberegningene flere ganger Øker effektiviteten, F.eks. i noen tilfeller fra eksponentiell til polynomisk tid Kan lagre flertydige strukturer med felles deler Vi skal se på CKY-parser, nå Chartparser, senere 21

Chomsky-normalform (CNF) CKY algoritmen forutsetter at grammatikken er på Chomsky-normalform En grammatikk er på Chomsky-normalform hvis alle reglene er på en av følgende former: A B C (ikketerminaler) A t (t en terminal) Vi skal senere se at: Enhver CFG G hvor ε L(G), er svakt ekvivalent til en G på CNF. Altså L(G) = L(G ) 25. februar 2015 22

CKY-parsing Hovedide: 1. For hvert segment [i, j] av ord i input, bestem hvilke ikke-terminaler som disse ordene kan avledes fra 2. Bottom-up 3. Kortere segmenter før lengre segmenter 23

CKY-parsing, forts. Hvilke kategorier har ord j, dvs segment [j-1,j]? Betrakt alle regler: A w j for en eller annen A Lagr disse A-ene i tabell[j-1, j] Se så på segmenter av to ord, [i, i + 2]: For å legge en ikke-terminal, A, i tabell[i, i+2] må det Finnes en regel A B C for en eller annen B og C B må utspenne [i, i+1] C må utspenne [i+1, i+2] 24

CKY-parsing ff. Deretter se på tre-ordsfragmenter [i, i+3]: For å legge en ikke-terminal, A, i tabell[i, i+3] må det Finnes en regel A B C for en eller annen B og C B må utspenne [i, i+1] og C må utspenne [i+1, i+3], eller B må utspenne [i, i+2] og C må utspenne [i+2, i+3] I det generelle tilfellet [i, j]: Det må finnes en regel A B C for en eller annen B og C B må utspenne [i, k] og C må utspenne [k, j], for en eller annen k, hvor i<k<j 25

Example 2/25/2015 Speech and Language Processing - Jurafsky and Martin 26

Example 2/25/2015 Speech and Language Processing - Jurafsky and Martin 27

Example Hvordan fylle søyle 5 2/25/2015 Speech and Language Processing - Jurafsky and Martin 28

Example 2/25/2015 Speech and Language Processing - Jurafsky and Martin 29

Example 2/25/2015 Speech and Language Processing - Jurafsky and Martin 30

Example 2/25/2015 Speech and Language Processing - Jurafsky and Martin 31

Example 2/25/2015 Speech and Language Processing - Jurafsky and Martin 32

CKY Algorithm 2/25/2015 Speech and Language Processing - Jurafsky and Martin 33

I dag Recursive-descent parser, kort repetisjon Shift-reduce parser (bottom-up) Algoritme for anerkjenning Eksempelimplementasjon Svakheter ved RD- og SR-parsing CKY Algoritme Implementasjon 25. februar 2015 34

CKY-implementasjon (følger pseudok.) def cky(words, cfg): tabl = [[set([]) for j in range(len(words)+1) ] for i in range(len(words))] for j in range(len(words)): tabl[j][j+1] = set([p.lhs() for p in cfg.productions() if p.rhs() == (words[j],)]) for i in range(j-1,-1,-1): for k in range(i+1, j+1, 1): tabl[i][j+1] = tabl[i][j+1].union( [p.lhs() for p in grammar.productions() if (p.rhs()[0] in tabl[i][k] and p.rhs()[1] in tabl[k][j+1])]) return tabl 35

CKY-implementasjon (mer prosedyrell) def cky(words, cfg): tabl = [[[] for j in range(len(words)+1) ] for i in range(len(words))] for j in range(len(words)): tabl[j][j+1] = [p.lhs() for p in cfg.productions() if p.rhs() == (words[j],)] for i in range(j-1,-1,-1): for k in range(i+1, j+1, 1): for p in grammar.productions(): if (p.rhs()[0] in tabl[i][k] and p.rhs()[1] in tabl[k][j+1]): if not p.lhs() in tabl[i][j+1]: tabl[i][j+1].append(p.lhs()) return tabl 36

Properties Grammar: S NP VP NP Det Nsg NP Npl VP IV VP TV NP Det en NP en Nsg fisker maler Npl fisker maler snurrer IV fisker maler snurrer TV fisker maler en fisker maler snurrer Det NP NP S Nsg Npl NP IV VP TV S S VP Nsg Npl NP IV VP TV S S S VP Npl NP IV VP 37

Properties Grammar: S NP VP NP Det Nsg NP Npl VP IV VP TV NP Det en NP en Nsg fisker maler Npl fisker maler snurrer IV fisker maler snurrer en fisker maler snurrer Det NP Det kan være vilkårlig mange TV kategorier fisker maler i en celle. NLTK s har en mangelfull implementasjon av wfst der en celle bare har rom for et symbol NP S Nsg Npl NP IV VP TV S S VP Nsg Npl NP IV VP TV S S S VP Npl NP IV VP 38

Begrensninger i CKY 1. Grammatikken må være på CNF 2. Det foreslås strukturer som holder lokalt, men ikke globalt: Løsninger baserer seg på å kombinere TD og BU En løsning til 1 er å omforme grammatikken til CNF: Neste gang Hjelp for begge problemene å innføre dotted items og chart-parsing senere i semesteret 25. februar 2015 39