INF2820 Datalingvistikk V2018 9. Gang 13.3 Jan Tore Lønning
I dag to deler A. Trekkstrukturgramatikker Fortsatt fra sist B. Chart-parsing Fortsetter parsing fra for to uker siden 2
TREKKSTRUKTUR- GRAMMATIKKER 3
Del 1 Trekkstrukturgramatikker Litt repetisjon litt mer formelt: Eksempel motivasjon 1. Trekkstrukturer 2. Unifikasjon og subsumpsjon 3. Trekkstrukturgrammatikker 4. Tolkning av trekkstrukturgrammatikker 4
Tysk NP i CFG NP_neut_sg_nom Det_neut_sg_nom N_neut_sg_nom NP_neut_sg_acc Det_neut_sg_acc N_neut_sg_acc NP_neut_sg_gen Det_neut_sg_gen N_neut_sg_gen NP_neut_sg_dat Det_neut_sg_dat N_neut_sg_dat NP_fem_sg_nom Det_fem_sg_nom N_fem_sg_nom NP_fem_sg_acc Det_fem_sg_acc N_fem_sg_acc NP_fem_sg_gen Det_fem_sg_gen N_fem_sg_gen NP_fem_sg_dat Det_fem_sg_dat N_fem_sg_dat NP_mask_sg_nom Det_mask_sg_nom N_mask_sg_nom NP_mask_sg_acc Det_mask_sg_acc N_mask_sg_acc NP_mask_sg_gen Det_mask_sg_gen N_mask_sg_gen NP_mask_sg_dat Det_mask_sg_dat N_mask_sg_dat NP_pl_nom Det_pl_nom N_pl_nom Må i tillegg fordoble NP_pl_acc Det_pl_acc N_pl_acc reglene for å få inn NP_pl_gen Det_pl_gen N_pl_gen forskjellen NP_pl_dat Det_pl_dat N_pl_dat bestemt/ubestemt 5
Tysk med trekkgrammatikk, alt 2 S NP[CASE=nom, AGR=?x] VP[AGR=?x] NP[CASE=?z, AGR=?x] Det[CASE=?z, AGR=?x,] N[CASE=?z, AGR=?x,] VP[AGR=?x] V[SUBC= dtv, AGR=?x] NP[CASE=dat] NP[CASE=acc] Det[CASE=nom, AGR=[NUM=sg, GEN=mask, PERS=3rd]] 'der' N[CASE=nom, AGR=[NUM=sg, GEN=mask, PERS=3rd]] Mann' 6
1. Trekkstrukturer Attribute Value Matrices (AVMs) Directed Acyclic Graphs (DAGs) To alternative notasjoner for det samme 7
Trekkstruktur: deling («Reentrancies») 8
Trekkstrukturer - formelt To endelige mengder F = {f 1, f 2,, f n } A = {a 1, a 2,, a n } En trekkstruktur over F og A er Atomær, dvs et element i A, eller Ikke-atomær. Det er et objekt. Dette inneholder En mengde trekk, dvs en delmengde av F: f 1, f 2,, f j Til hvert av disse trekkene er det en verdi, som igjen er en trekkstruktur (atomær eller ikke-atomær) En trekkstruktur kan ikke inneholde to par av trekk og verdier (f k, a k ), (f p, a p ) der f k = f p, men a k =/= a p To trekkstrukturer som inneholder de samme trekk-verdiparene kan være identiske, men behøver ikke være det 9. mars 2018 (som dictionaries i python) 9
Del 1 Trekkstrukturgramatikker Litt repetisjon litt mer formelt: Eksempel motivasjon 1. Trekkstrukturer 2. Unifikasjon og subsumpsjon 3. Trekkstrukturgrammatikker 4. Tolkning av trekkstrukturgrammatikker 10
Unifikasjon av trekkstrukturer 9. mars 2018 11
2. Subsumpsjon og unifikasjon Subsumpsjon F subsummerer G F er minst like generell som G Hvis og bare hvis: F er atomær og F=G Ellers For hvert trekk x i F: F(x) subsumerer G(x) For alle stier p, q in F: Hvis F(p) = F(q), så G(p) = G(q) Unifikasjon H er unifikasjonen av F og G H = Hvis og bare hvis Og H er den mest generelle slike trekkstrukturen 9. mars 2018 12
NLTK - implementasjon >>> fs1 = nltk.featstruct(tense='past', NUM='sg') >>> fs1 [NUM='sg', TENSE='past'] >>> print(fs1) [ NUM = 'sg' ] [ TENSE = 'past' ] >>> from nltk import FeatStruct >>> fs2 = FeatStruct(CAT='vp', AGR = fs1) >>> print(fs2) [ AGR = [ NUM = 'sg' ] ] [ [ TENSE = 'past' ] ] [ ] [ CAT = 'vp' ] 9. mars 2018 13
NLTK - implementasjon >>> fs3 = fs2.unify(featstruct( "[AGR =?x, SUBJ = [AGR =?x]]")) >>> print fs3 [ AGR = (1) [ NUM = 'sg' ] ] [ [ TENSE = 'past' ] ] [ ] [ CAT = 'vp' ] [ ] [ SUBJ = [ AGR -> (1) ] ] 9. mars 2018 14
Del 1 Trekkstrukturgramatikker Litt repetisjon litt mer formelt: Eksempel motivasjon 1. Trekkstrukturer 2. Unifikasjon og subsumpsjon 3. Trekkstrukturgrammatikker 4. Tolkning av trekkstrukturgrammatikker 15
1. Regler med trekkstrukturer S NP VP NP Det N V serve V serves En ikke-terminal suppleres med en partiell trekkstruktur Mulig deling mellom trekkstrukturene i en regel Terminalene er uendret 9. mars 2018 16
1B. NLTKs format S NP VP S NP[AGR=?x] VP[AGR=?x] NP Det N NP[AGR=?x] Det[AGR=?x] Nom[AGR=?x] V serves V[AGR=[NUM=SG, PERS=3rd]] serves NLTKs format er en implementasjon av denne formalismen Men som vi vil se senere, har implementasjonen en del begrensninger i forhold til formalismen 9. mars 2018 17
En generalisering av formalisme 1 Trekkstrukturgrammatikk Syntaktisk regel: En trekkstr. på v.s Null eller flere t.s. på h.s Deling mellom trekkstr.ene Leksikalsk regel: En trekkstr. på v.s En terminal på h.s. gives 9. mars 2018 18
Del 1 Trekkstrukturgramatikker Litt repetisjon litt mer formelt: Eksempel motivasjon 1. Trekkstrukturer 2. Unifikasjon og subsumpsjon 3. Trekkstrukturgrammatikker 4. Tolkning av trekkstrukturgrammatikker 19
Betingelser på grammatikalitet S, Hvert lokalt tre må tillates av en grammatikkregel NP, VP, DET, N, V, NP, DET, N, the restaurant serves many fish 9. mars 2018 20
Lokalt tre tillatt av regel eks 1 t1: S, Hvert lokalt tre må tillates av en grammatikkregel NP, VP, R1: S NP VP Regelen R1 svarer til et lokalt tre t2 R1 tillater t1 hvis t1 «utvider» t2, Mer formelt: hvis t2 subsummerer t1 9. mars 2018 21
Subsumpsjon av trær Vi kan utvide definisjonen av subsumpsjon fra trekkstrukturer til trær med trekkstrukturer på nodene Et tre T subsummerer et tre T dersom Trekkstrukturen på T subsummerer strukturen på T Inkludert at hvis T har en kategori, så har T samme kategori Hvis T har døtrene D 1, D 2,, D n, så har T like mange døtre D 1, D 2,, D n, der D i subsummerer D i for i = 1, 2,, n, og Alle delinger i T er også delinger i T. 22
Tolkning av grammatikk Et tre T med trekkstrukturer er tillatt av grammatikk G hvis og bare hvis. Hvis t 1, t 2,, t n er alle de lokale trærne i T, så fins det tilsvarende regler i G, si g 1, g 2,, g n s.a.: tre t i er tillatt av regel g i for i= 1, 2,, n Hvis T er et annet tre tillatt av de samme reglene g 1, g 2,, g n, på tilsvarende subtrær og T subsummerer T, så subsummerer T også T. "Det skal ikke være med mer i treet enn det reglene krever. " 9. mars 2018 23
Grammatikker to alternative format 1. Trekkstrukturer i reglene NLTK er et (begrenset) forsøk på å implementere dette formatet 2. Regler + likninger Jurafsky og Martin 9. mars 2018 24
Grammatikker to alternative format 1. Trekkstrukturer i reglene 2. Regler + likninger S NP VP NP Det NOM V serves 9. mars 2018 25
Lokalt tre tillatt av regel eks 1 S, Hvert lokalt tre må tillates av en grammatikkregel NP, VP, J&M-format: Det lokale treet lystrer alle likningene 9. mars 2018 26
Lokalt tre tillatt av regel eks 2 DET, Hvert lokalt tre må tillates av en grammatikkregel the Trekkstr. i regel DET[AGR=[PERS= 3rd ]]-> the DET, Regler + likninger: Det lokale treet lystrer alle likningene the DET the <DET AGR PERS>=3rd 9. mars 2018 27
Sammenlikning av formatene 1. Trekkstrukturer i reglene Utvid ikke-terminaler med partielle trekkstrukturer Variable i trekkstrukturene for deling («reentrancy») Brukt for eksempel i tidlig Head-driven Phrase Structure Grammars (HPSG) 2. Regler + likninger Legg likninger til CFG-reglene En likning mellom To stier, eller En sti og en atomær verdi Inspirert av PATR Lexical-Functional Grammar Blir det samme (før evt utvidelser) 9. mars 2018 28
CHART-PARSING 29
I dag chart-parsing Chart-parsing: hovedideer BU chart-parsing: algoritmen NLTKs ChartParser TD chart-parsing 30
Chart-parsing: hovedideer Dotted items, aktive kanter Active chart - datastruktur Fundamentalregelen Bruk av en agenda 31
Dotted items Representerer deler av fraser VP V NP PP En del av VP Inneholder V NP Mangler PP 32
Dotted items Representerer deler av fraser VP V NP PP En del av VP Inneholder V NP Mangler PP VP V NP PP En hel VP frase med antydet struktur 33
Dotted items Representerer deler av fraser VP V NP PP En del av VP Inneholder V NP Mangler PP VP V NP PP En hel VP frase med antydet struktur VP V NP PP Predikerer starten på en VP 34
«Dotted items»/kanter Representerer deler av fraser VP V NP PP [2, 5] En del av VP. Fra posisjon 2 til 5 VP V NP PP [2, 9] En hel VP frase med antydet struktur VP V NP PP [2, 2] Predikterer starten på en VP I posisjon 2 VP V NP PP A girl gave a bone to the small dog 0 1 2 3 4 5 6 7 8 9 VP V NP PP VP V NP PP 35
Active Chart datastruktur NP Det Nom Nom Nom PP NP Det Nom PP P NP Det Nom, N P NP, PN 0 book 1 the 2 flight 3 through 4 Houston 5 NP Det Nom Nom Nom PP PP P NP NP Det Nom Nom Nom PP PP P NP Partielt snapshot 9. mars 2018 36
Fundamentalregelen NP Det Nom Nom Nom PP 0 book 1 the 2 flight 3 through 4 Houston 5 NP Det Nom Fra (A B, [i,k] ) + (B, [k, j] ) Lag (A B, [i,j] ) 9. mars 2018 37
Active chart-parsing Kombinere 3 typer operasjoner: 1. Lese ordene i setningen inn i chartet 2. Bruke fundamentalregelen når nye kanter legges til chartet 3. Innføre aktive kanter i chartet Ulike strategier for Hvordan aktive kanter innføres Rekkefølgen oppgavene utføres Og dermed: Hvilke aktive kanter som er nødvendige March 9, 2018 38
Aktiv chart-parsing Agenda Chart Når vi legger en kan til chartet kan det skape flere nye kanter som skal legges til chartet: Hver av de kan skape flere nye kanter: Osv. For å holde orden på dette bruker vi en ekstra datastruktur: Agenda Alle nye kanter legges i Agenda Vi flytter en og en kant fra Agenda til Chart Dette gir nye kanter. De legges i Agenda March 9, 2018 39
I dag chart-parsing Chart-parsing: hovedideer BU chart-parsing: algoritmen NLTKs ChartParser TD chart-parsing 40
Active chart-algoritmen,bottom-up Gitt en sekvens av ord w 1 w 2 w n 1. For hver w i og regel på formen A w i for en eller annen A: Legg kanten (A w i, [i-1, i]) til Agenda 2. Fjern en kant e fra Agenda Hvis e ikke er i Chart: 1. Legg e til Chart, og 2. Lag nye kanter med fundamentalregelen og legg til Agenda 3. Hvis e er inaktiv: Lag nye aktive kanter og legg til agenda Gjenta til Agenda er tom 41
2. Nye kanter med fundamentalregelen Når vi legger kanten e til chartet Hvis e er inaktiv, dvs. på formen (A, [i, k]) Finn alle kanter i chartet på formen (B A, [m, i]) for en eller annen m, B, og : Legg (B A, [m, k]) til Agenda Hvis e er aktiv, dvs. på formen (B A, [m, i]) Finn alle kanter i chartet på formen (A, [i, k]) for en eller annen k, og : Legg (B A,[m, k]) til Agenda 42
3. Nye aktive kanter Når vi legger kanten e til chartet Hvis e er inaktiv, dvs. på formen (B, [m,n]) Finn alle A, s.a. A B er en regel og Legg kanten (A B, [m, m]) til agendaen. (Strategi BU0) Det var alt 43
Fotnote: Nye aktive kanter Vi la til aktive kanter ved (strategi BU0, NLTK): Hvis e er inaktiv, dvs. på formen (B, [m,n]) Finn alle A, s.a. A B er en regel og Legg kanten (A B, [m, m]) til agendaen. Alternativt kan en i stedet ved (strategi BU1, J&M): Hvis e er inaktiv, dvs. på formen (B, [m,n]) Finn alle A, s.a. A B er en regel og Legg kanten (A B, [m, n]) til agendaen. Begge deler virker og er fullstendige 44
Eksempel Parse: gi jenta fisk S VP VP IV VP TV NP VP DTV NP NP NP N IV fisk sov TV fisk kjøp DTV gi N jenta fisk 9. mars 2018 45
I dag chart-parsing Chart-parsing: hovedideer BU chart-parsing: algoritmen NLTKs ChartParser TD chart-parsing 46
. gi. jenta. fisk. [-----------].. [0:1] DTV -> 'gi' * >... [0:0] VP -> * DTV NP NP [----------->.. [0:1] VP -> DTV * NP NP. [-----------]. [1:2] N -> 'jenta' *. >.. [1:1] NP -> * N. [-----------]. [1:2] NP -> N * [----------------------->. [0:2] VP -> DTV NP * NP.. [-----------] [2:3] IV -> 'fisk' *.. [-----------] [2:3] TV -> 'fisk' *.. [-----------] [2:3] N -> 'fisk' *.. >. [2:2] NP -> * N.. [-----------] [2:3] NP -> N * [===================================] [0:3] VP -> DTV NP NP * >... [0:0] S -> * VP [===================================] [0:3] S -> VP *.. >. [2:2] VP -> * TV NP.. [-----------> [2:3] VP -> TV * NP.. >. [2:2] VP -> * IV.. [-----------] [2:3] VP -> IV *.. >. [2:2] S -> * VP 9. mars. 2018. [-----------] [2:3] S -> VP * 47
. gi. jenta. fisk. [-----------].. [0:1] 'gi'. [-----------]. [1:2] 'jenta'.. [-----------] [2:3] 'fisk' >... [0:0] DTV -> * 'gi' [-----------].. [0:1] DTV -> 'gi' * >... [0:0] VP -> * DTV NP NP [----------->.. [0:1] VP -> DTV * NP NP. >.. [1:1] N -> * 'jenta'. [-----------]. [1:2] N -> 'jenta' *. >.. [1:1] NP -> * N. [-----------]. [1:2] NP -> N * [----------------------->. [0:2] VP -> DTV NP * NP.. >. [2:2] IV -> * 'fisk'.. >. [2:2] TV -> * 'fisk'.. >. [2:2] N -> * 'fisk'.. [-----------] [2:3] IV -> 'fisk' *.. [-----------] [2:3] TV -> 'fisk' *.. [-----------] [2:3] N -> 'fisk' *.. >. [2:2] NP -> * N.. [-----------] [2:3] NP -> N * [===================================] [0:3] VP -> DTV NP NP * >... [0:0] S -> * VP [===================================] [0:3] S -> VP *.. >. [2:2] VP -> * TV NP.. [-----------> [2:3] VP -> TV * NP.. >. [2:2] VP -> * IV.. [-----------] [2:3] VP -> IV *.. >. [2:2] S -> * VP.. [-----------] [2:3] S -> VP * (Fullstendig NLTK Egentlig følger NLTK samme rekkefølge som oss, men legger inn ordene først uten å slå opp i leksikon. Tillater dermed høyresider med både terminaler og ikketerminaler Men chartet blir større). 9. mars 2018 48
Fotnote: Nye aktive kanter Vi la til aktive kanter ved (strategi BU0, NLTK): Hvis e er inaktiv, dvs. på formen (B, [m,n]) Finn alle A, s.a. A B er en regel og Legg kanten (A B, [m, m]) til agendaen. Alternativt kan en i stedet ved (strategi BU1, J&M): Hvis e er inaktiv, dvs. på formen (B, [m,n]) Finn alle A, s.a. A B er en regel og Legg kanten (A B, [m, n]) til agendaen. Begge deler virker og er fullstendige 49
BU1: 14 kanter, (mot BU0: 21 kanter) In [73]: for t in parser_1_1.parse(sent): t.pretty_print(). gi. jenta. fisk. [-----------].. [0:1] DTV -> 'gi' * [----------->.. [0:1] VP -> DTV * NP NP. [-----------]. [1:2] N -> 'jenta' *. [-----------]. [1:2] NP -> N * [----------------------->. [0:2] VP -> DTV NP * NP.. [-----------] [2:3] IV -> 'fisk' *.. [-----------] [2:3] TV -> 'fisk' *.. [-----------] [2:3] N -> 'fisk' *.. [-----------] [2:3] NP -> N * [===================================] [0:3] VP -> DTV NP NP * [===================================] [0:3] S -> VP *.. [-----------> [2:3] VP -> TV * NP.. [-----------] [2:3] VP -> IV *.. [-----------] [2:3] S -> VP * 9. mars 2018 50
BU chart-parser: egenskaper Behersker: Unære regler Mer enn to symboler på høyresiden i en regel Takler ikke: Tomme høyresider (det vil kreve endringer i algoritmen) NLTKs implementasjon ser ut til å ha tatt høyde for det 9. mars 2018 51
NLTKs chart-parser Lag parser fra grammatikk gi: parser_1_0 = nltk.chartparser(gi) Bruk, f.eks. for t in parser_1_2.parse(sent): t.pretty_print() Det er to nivåer av trace. De må angis når vi konstruerer parser parser_1_1 = nltk.chartparser(gi, trace=1) parser_1_2 = nltk.chartparser(gi, trace=2) Vi har også mulighet til å påvirke parsingstrategien parser_0_1 = nltk.chartparser(gi, nltk.chart.bu_strategy, trace = 1) parser_t_1 = nltk.chartparser(gi, nltk.chart.td_strategy) 52
I dag chart-parsing Chart-parsing: hovedideer BU chart-parsing: algoritmen NLTKs ChartParser TD chart-parsing 53
Top down active chart-parsing Som ved Bottom-UP kombinere 3 typer operasjoner: 1. Lese ordene i setningen inn i chartet 2. Bruke fundamentalregelen når nye kanter legges til chartet 3. Innføre aktive kanter i chartet Og vi bruker agenda på samme måte Forskjellen ligger i punkt 3: Innføring av aktive kanter Punkt 2: bruk av fundamentalregelen blir helt lik Punkt 1: kan gjøres likt eller forskjellig March 9, 2018 54
Top-down active chart-algoritmen Ved intialisering legger vi kanten ( S, [0, 0]) til Agenda Når en aktiv kant (A B, [m, n] ) legges inn i chartet: Finn alle regler som har formen (B ) for en eller annen, og legg kanten (B, [n, n]) til agendaen. (Ikke innfør nye aktive kanter fra regler når inaktive kanter legges til agenda) 55
Eksempel Parse: gi jenta fisk S VP VP IV VP TV NP VP DTV NP NP NP N IV fisk sov TV fisk kjøp DTV gi N jenta fisk 9. mars 2018 56
. gi. jenta. fisk. [-----------].. [0:1] 'gi'. [-----------]. [1:2] 'jenta'.. [-----------] [2:3] 'fisk' >... [0:0] S -> * VP >... [0:0] VP -> * IV >... [0:0] VP -> * TV NP >... [0:0] VP -> * DTV NP NP >... [0:0] DTV -> * 'gi' [-----------].. [0:1] DTV -> 'gi' * [----------->.. [0:1] VP -> DTV * NP NP. >.. [1:1] NP -> * N. >.. [1:1] N -> * 'jenta'. [-----------]. [1:2] N -> 'jenta' *. [-----------]. [1:2] NP -> N * [----------------------->. [0:2] VP -> DTV NP * NP.. >. [2:2] NP -> * N.. >. [2:2] N -> * 'fisk'.. [-----------] [2:3] N -> 'fisk' *.. [-----------] [2:3] NP -> N * [===================================] [0:3] VP -> DTV NP NP * 9. mars [===================================] 2018 [0:3] S -> VP * 57
. gi. jenta. fisk. [-----------].. [0:1] 'gi'. [-----------]. [1:2] 'jenta'.. [-----------] [2:3] 'fisk' >... [0:0] S -> * VP >... [0:0] VP -> * IV >... [0:0] VP -> * TV NP >... [0:0] VP -> * DTV NP NP >... [0:0] DTV -> * 'gi' [-----------].. [0:1] DTV -> 'gi' * [----------->.. [0:1] VP -> DTV * NP NP. >.. [1:1] NP -> * N. >.. [1:1] N -> * 'jenta'. [-----------]. [1:2] N -> 'jenta' *. [-----------]. [1:2] NP -> N * [----------------------->. [0:2] VP -> DTV NP * NP.. >. [2:2] NP -> * N.. >. [2:2] N -> * 'fisk'.. [-----------] [2:3] N -> 'fisk' *.. [-----------] [2:3] NP -> N * [===================================] [0:3] VP -> DTV NP NP * 9. mars [===================================] 2018 [0:3] S -> VP * 58
Fotnote til TD En ren TD-strategi slår ikke opp kategorier for ordene ved initalisering Den foreslår ord TD Da vil en kunne ha regler som blander terminaler og ikke-terminaler på høyresiden i en regel Fint i teorien ekstremt langsomt i praksis Bedre å anta at grammatikken er på standardform og behandle ordene BU (NLTKs TD ser ut som ren TD,men vi ser at det er hypoteser den ikke foreslår, eks N. fisk ) 59
Fordeler med Top-Down? Både BU og TD behersker: Å gi riktig svar på om ordene er en setning Unære regler Mer enn to symboler på høyresiden i en regel Høyrerekursive regler TD: Vil ofte foreslå færre kanter som ikke fører frem enn BU-strategien Har ikke problemer med tomme høyresider 9. mars 2018 60
Earleys algoritme (Som presentert av J&M) Tilsvarer en chart-parser med: TD innføring av aktive/inkomplette kanter Streng venstre mot høyre Egen rutine for leksikalske oppslag (=Scanner) Dermed behøver en bare bruke fundamentalregelen når en legger til inaktive/komplette kanter (og ser mot venstre) (=Completer) (De aktive ser mot høyre og vil ikke se noen inaktive kanter) Når en legger til aktive kanter, må en lage nye aktive kanter (=Predictor) 9. mars 2018 61
Fotnote til Earleys algoritme Som presentert av J&M Fig. 13.13 har en løkke som begynner for each state in chart[i] do og som modifiserer chart[i] Dette kan kreve litt omskrivning ved programmering 9. mars 2018 62