TPI, en metode til forbedring af testproces af Elisabeth Andresen, Sogeti
INF2820 Datalingvistikk – V2016...• Forbedring hvis grammatikk på standardform • Ikke omskriv...
Transcript of INF2820 Datalingvistikk – V2016...• Forbedring hvis grammatikk på standardform • Ikke omskriv...
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
• SNP 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.
24. februar 2016 8
Til ethvert tre generert av grammatikken svarer det • nøyaktig en venstreavledning • og nøyaktig en høyreavledning.
24. februar 2016 9
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
Eksempel: VF og HF
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
Datastruktur 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 # #
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
24. februar 2016 14
Recursive Descent: • Deterministisk • Dybde-først:
Følg det alternativet du har valgt til bunns før du prøver det neste
Demo
• nltk.app.rdparser()
15 24. februar 2016
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 Xt
• og regel Xt t • For enhver regel A α der
lengden av α er ≥ 2: • Skift enhver terminal t i α med
korresponderende ikke- terminal Xt
Eks: • Skift:
• NP NP and NP • Med:
• Xand and • NP NP Xand NP • der Xand er ny ikke-terminal
• Skift: • P ved siden av
• Med • P Xved Xsiden Xav • Xved ved • Xsiden siden • Xav 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.
18 24. februar 2016
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
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
shift
reduce
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
24. februar 2016 26
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
Fra anerkjenner til parser
• La stacken bestå av deltrær • ‘’Shift’’ som før
27
Stack: 4 elements Remaining input
Fra anerkjenner til parser • La stacken bestå av deltrær • ‘’Shift’’ som før • Reduksjon:
• For hver av de n øverste deltrærne t1, t2, …, ti…, tn på stacken:
• Ta merkelappen li på toppnoden • Hvis det finnes en regel
X l1, l2, …, li…, ln • fjern t1,…, ti…, tn fra toppen av stacken • Lag et tre t med:
• X som merke på mora • t1,…, ti…, tn som døtre
• Push t på toppen av stacken
28
Demo
• nltk.app.srparser()
29 24. februar 2016
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