INF2820 Datalingvistikk V2016 6. Gang - 24.2 Jan Tore Lønning
PARSING DEL 1 2
I dag Hva er parsing? Høyre- og venstreavledninger Recursive-Descent parser (top-down) Shift-Reduce parser (bottom-up) Pythonimplementasjon: Shift-Reduce Recognizer Svakheter ved RD- og SR-parsing 24. februar 2016 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 24. februar 2016 4
Ulike typer parsere Back-tracking -parsere Recursive Descent Parser Strategi: Ovenifra og ned ( Top-down ) Shift-Reduce Parser Strategi: Nedenifra og opp ( Bottom-Up ) Tabellparsere CKY Chartparsere Earleys algoritme 5
I dag Hva er parsing? Høyre- og venstreavledninger Recursive-Descent parser (top-down) Shift-Reduce parser (bottom-up) Pythonimplementasjon: Shift-Reduce Recognizer Svakheter ved RD- og SR-parsing 24. februar 2016 6
Eksempel: Avledning S NP VP Det N VP the N VP the dog VP the dog V NP PP the dog saw NP PP the dog saw Det N PP the dog saw a N PP the dog saw a man PP the dog saw a man P NP the dog saw a man in NP the dog saw a man in Det N the dog saw a man in the N the dog saw a man in the park Flere avledninger av samme streng, for eksempel: S NP VP NP V NP PP NP V NP P NP NP V NP P Det N NP V NP P Det park 24. februar 2016 7
Høyre- og venstreavledninger Til hvert tre svarer det mange avledninger. For kontekstfrie grammatikker er forskjellene mellom avledninger som svarer til samme tre uinteressante. En avledning er en venstreavledning ( leftmost derivation ) hvis vi alltid ekspanderer ikke-terminalen lengst til venstre. Høyreavledning defineres tilsvarende. Til ethvert tre generert av grammatikken svarer det nøyaktig en venstreavledning og nøyaktig en høyreavledning. 24. februar 2016 8
Eksempel: VF og HF Venstreavledning: S NP VP Det N VP the N VP the dog VP the dog V NP PP the dog saw NP PP the dog saw Det N PP the dog saw a N PP the dog saw a man PP the dog saw a man P NP the dog saw a man in NP the dog saw a man in Det N the dog saw a man in the N the dog saw a man in the park 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 24. februar 2016 9
I dag Hva er parsing? Høyre- og venstreavledninger Recursive Descent parser (top-down) Shift-Reduce parser (bottom-up) Pythonimplementasjon: Shift-Reduce Recognizer Svakheter ved RD- og SR-parsing 24. februar 2016 10
Recursive Descent parser Lager en venstreavledning Bygger et tre: Fra toppen ( top-down ) Fra venstre mot høyre Merk Tilstrekkelig å bare se på venstreavledninger fordi de svarer til trær Streber mot tidligst mulig å sjekke mot input-data Et trinn er ikke-deterministisk: Velg en regel! Dette gir et søkerom å holde orden på 24. februar 2016 11
Venstreavledning S NP VP Det N VP the N VP the dog VP the dog V NP PP the dog saw NP PP the dog saw Det N PP the dog saw a N PP the dog saw a man PP the dog saw a man P NP the dog saw a man in NP the dog saw a man in Det N the dog saw a man in the N the dog saw a man in the park S the dog saw a man in the park Datastruktur 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 # # 24. februar 2016 12
Algoritme ikke-deterministisk Struktur: Frontier: De symbolene det gjenstår å finne Words: Resten av input som så langt ikke er prosessert Intialisering Words:= Inputordene Frontier:= list( S ) Løkke: Hvis Frontier=Words=ε: stopp med suksess! Hvis first(words)=first(frontier): Words:=rest(Words), Frontier:=rest(Frontier) Hvis first(frontier) er en ikke-terminal B, velg en regel B β, og la Frontier:= β + rest(frontier) 24. februar 2016 13
Søkerom Recursive Descent: Deterministisk Dybde-først: Følg det alternativet du har valgt til bunns før du prøver det neste 24. februar 2016 14
Demo nltk.app.rdparser() 24. februar 2016 15
En underklasse av CFG-er I lingvistikk er det vanlig å skille mellom 1. Leksikon: ordene og deres egenskaper 2. Syntaktiske regler: relaterer syntaktiske kategorier Modelleres i CFG ved å bare ha regler av to typer 1. Høyresiden består av en terminal: Det the 2. Høyresiden inneholder bare ikke-terminaler: S NP VP De fleste CFG-grammatikker vi vil se har denne formen I mangel av et bedre navn vil vi si at en slik grammatikk er på Standardform 16
Egenskaper Til enhver CFG G1 fins en CFG G2 på standardform s.a. L(G1) = L(G2) Fremgangsmåte, gitt G1: For enhver terminal t innfør ny ikke-terminal X t og regel X t t For enhver regel A α der lengden av α er 2: Skift enhver terminal t i α med korresponderende ikke- terminal X t Eks: Skift: NP NP and NP Med: X and and NP NP X and NP der X and er ny ikke-terminal Skift: P ved siden av Med P X ved X siden X av X ved ved X siden siden X av av Tilsv. for alle regler 17
En noe forbedret algoritme Med mange (f.eks. 20 000) regler på formen N cat, N dog, N man, etc. blir algoritmen svært langsom. Forbedring hvis grammatikk på standardform Ikke omskriv de leksikalske reglene X w For et ord w først i Words, se på alle regler av formen X w, for en eller annen X: (typisk max 10) Er X først i Frontier? I så fall fjern w fra Words og X fra Frontier og fortsett. 24. februar 2016 18
Algoritme grammatikk standardform Struktur: Frontier: De symbolene det gjenstår å finne Words: Resten av input som så langt ikke er prosessert Intialisering Words:= Inputordene Frontier:= list( S ) Løkke: Hvis Frontier=Words=ε: stopp med suksess! Hvis first(words)=w, first(frontier)=f og det fins en leksikalsk regel F w: Words:=rest(Words), Frontier:=rest(Frontier) Hvis first(frontier) er en ikke-terminal B, velg en (ikkeleksikalsk) regel B β, og la Frontier:= β + rest(frontier) 24. februar 2016 19
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 24. februar 2016 20
I dag Hva er parsing? Høyre- og venstreavledninger Recursive-descent parser (top-down) Shift-Reduce parser (bottom-up) Pythonimplementasjon: Shift-Reduce Recognizer Svakheter ved RD- og SR-parsing 24. februar 2016 21
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 # 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 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 24. februar 2016 22
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 24. februar 2016 23
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) 24. februar 2016 24
I dag Hva er parsing? Høyre- og venstreavledninger Recursive-descent parser (top-down) Shift-reduce parser (bottom-up) Pythonimplementasjon: Shift-Reduce Recognizer Svakheter ved RD- og SR-parsing 24. februar 2016 25
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 24. februar 2016 26
Fra anerkjenner til parser La stacken bestå av deltrær Shift som før Stack: 4 elements Remaining input 27
Fra anerkjenner til parser La stacken bestå av deltrær Shift som før Reduksjon: For hver av de n øverste deltrærne t 1, t 2,, t i, t n på stacken: Ta merkelappen l i på toppnoden Hvis det finnes en regel X l 1, l 2,, l i, l n fjern t 1,, t i, t n fra toppen av stacken Lag et tre t med: X som merke på mora t 1,, t i, t n som døtre Push t på toppen av stacken 28
Demo nltk.app.srparser() 24. februar 2016 29
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 Hvis grammatikken er på standardform, kan algoritmen gjøres noe mer effektiv: Hver gang vi shifter et ord over på stacken, må vi redusere, Mao. Det eneste stedet på stacken vi tillater en terminal er på toppen. 24. februar 2016 30
I dag Hva er parsing? Høyre- og venstreavledninger Recursive Descent parser (top-down) Shift-Reduce parser (bottom-up) Pythonimplementasjon: Shift-Reduce Recognizer Svakheter ved RD- og SR-parsing 24. februar 2016 31
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? 32
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 24. februar 2016 33