INF2820 Datalingvistikk V2017 8. Gang 6.3 Jan Tore Lønning
I dag CKY-algoritmen fortsatt fra sist Python-implementasjon av CKY Chomsky Normal Form (CNF) Chart-parsing BU-algoritme for chart-parsing 3. mars 2017 2
CKY-parsing CKY/CYK (Cocke Kasami Younger) algoritmen 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 3
Eksempel 3/3/2017 Speech and Language Processing - Jurafsky and Martin 4
Eksempel 3/3/2017 Speech and Language Processing - Jurafsky and Martin 5
Eksempel 3/3/2017 Speech and Language Processing - Jurafsky and Martin 6
CKY Algorithm k i 3/3/2017 j Speech and Language Processing - Jurafsky and Martin 7
I dag CKY-algoritmen fortsatt fra sist Python-implementasjon av CKY Chomsky Normal Form (CNF) Chart-parsing BU-algoritme for chart-parsing 3. mars 2017 8
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): 9
CKY-implementasjon (følger pseudok.) 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 10
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): 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 11
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 12
I dag CKY-algoritmen fortsatt fra sist Python-implementasjon av CKY Chomsky Normal Form (CNF) Chart-parsing BU-algoritme for chart-parsing 3. mars 2017 13
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) Enhver CFG G hvor L(G) er svakt ekvivalent til en G på CNF, dvs L(G)=L(G ) 3. mars 2017 14
Chomsky-normalform (CNF) Enhver CFG G hvor L(G) er svakt ekvivalent til en G på CNF Oppskrift: 1. Erstatt alle regler på formen A 2. Erstatt alle regler på formen A B for B en ikke terminal 3. Erstatt alle regler A, der > 1 og inneholder en eller flere terminaler t 1,, t n 4. Erstatt alle regler A B 1 B 2 B n, der n > 2, : 3. mars 2017 15
Eksempel Grammatikk 1. S a A 2. A a A 3. A a Ab 4. A B 5. B ab c 6. B 3. mars 2017 16
Eksempel Grammatikk 1. S a A 2. A a A 3. A a Ab 4. A B 5. B ab c 6. B Trinn 1 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. A B 5. B a B c 6. stryk 7. S a 8. A a 9. A a b 10.B a c 3. mars 2017 17
Eksempel Grammatikk 1. S a A 2. A a A 3. A a Ab 4. A B 5. B ab c 6. B Trinn 1 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. A B 5. B a B c 6. stryk 7. S a 8. A a 9. A a b 10.B a c Trinn 2 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. stryk 5. B a B c 6. strøket 7. S a 8. A a 9. A a b 10.B a c 11.A a B c 12.A a c 3. mars 2017 18
Eksempel Grammatikk 1. S a A 2. A a A 3. A a Ab 4. A B 5. B ab c 6. B Trinn 1 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. A B 5. B a B c 6. stryk 7. S a 8. A a 9. A a b 10.B a c Trinn 2 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. strøket 5. B a B c 6. strøket 7. S a 8. A a 9. A a b 10.B a c 11.A a B c 12.A a c Trinn 3 I. S XA II. A XA III. A XA Y IV. strøket V. B XB Z VI. strøket VII. S a VIII. A a IX. A XY X. B XZ XI. A XB Z XII. A XZ XIII. X a XIV. Y b XV. Z c 3. mars 2017 19
Eksempel Grammatikk 1. S a A 2. A a A 3. A a Ab 4. A B 5. B a B c 6. B Trinn 1 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. A B 5. B a B c 6. stryk 7. S a 8. A a 9. A a b 10.B a c Trinn 2 E = {A, B} 1. S a A 2. A a A 3. A a Ab 4. stryk 5. B a B c 6. strøket 7. S a 8. A a 9. A a b 10.B a c 11.A a B c 12.A a c Trinn 3 I. S XA II. A XA III. A XA Y IV. strøket V. B XB Z VI. strøket VII. S a VIII. A a IX. A XY X. B XZ XI. A XB Z XII. A XZ XIII. X a XIV. Y b XV. Z c Trinn 4 I. S XA II. A XA III.i A XP III.ii P A Y IV. strøket V.i B XQ V.ii Q B Z VI. strøket VII. S a VIII. A a IX. A XY X. B XZ XI.i A XR X1.ii R B Z XII. A XZ XIII. X a XIV. Y b XV. Z c 3. mars 2017 20
Trinn 1: A Erstatt alle regler på formen A unntatt evt. S 1. Finn mengden E av alle ikke-terminaler A, s.a. A + 2. For hver regel B : Legg til alle regler på formen B, der fremkommer ved å stryke en eller flere ikke-terminaler fra E i. 3. Stryk alle regler på formen A 3. mars 2017 21
Trinn 2: A B for B en ikke-terminal Erstatt alle regler på formen A B for B en ikketerminal: 1. For enhver ikke terminal B: For enhver A s.a. A B eller A + B: For enhver s.a. B : Innfør A, hvis den ikke alt finnes 2. Fjern alle unære regler med ikke terminal høyreside 3. mars 2017 22
Trinn 3 Erstatt alle regler A, der > 1 og inneholder en eller flere terminaler t 1,, t n 1. Innfør nye ikke terminaler T 1,, T n. 2. Erstatt t i med T i i 3. Innfør reglene T i t i for i = 1,, n 3. mars 2017 23
Trinn 4 Erstatt alle regler A B 1 B 2 B n, der n > 2, For hver regel A B 1 B 2 B n, n > 2, : 1. Innfør nye ikke terminaler C 1,, C n 2 og regler 2. A B 1 C 1 3. C i B i+1 C i+1 for i = 1,, n 3 4. C n 2 B n 1 B n 3. mars 2017 24
Sample L1 Grammar 3/3/2017 Speech and Language Processing - Jurafsky and Martin 25
CNF Conversion 3/3/2017 Speech and Language Processing - Jurafsky and Martin 26
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 Hjelp for begge problemene å innføre dotted items og chart-parsing senere i semesteret 3. mars 2017 27
Problemer for tidligere parsere RD: venstrerekursjon SR: regler med tomme høyresider Både RD og SR: Ineffektivitet CKY: bare grammtikker på CNF 3. mars 2017 28
I dag CKY-algoritmen fortsatt fra sist Python-implementasjon av CKY Chomsky Normal Form (CNF) Chart-parsing BU-algoritme for chart-parsing 3. mars 2017 29
Chart-parsing: hovedideer Dotted items, aktive kanter Active chart - datastruktur Fundamentalregelen Bruk av en agenda 30
Dotted items Representerer deler av fraser VP V NP PP En del av VP Inneholder V NP Mangler PP 31
Dotted items Representerer deler av fraser VP V NP PP En del av VP Inneholder V NP Mangler PP VP VNP PP En hel VP frase med antydet struktur 32
Dotted items Representerer deler av fraser VP V NP PP En del av VP Inneholder V NP Mangler PP VP VNP PP En hel VP frase med antydet struktur VP V NP PP Predikerer starten på en VP 33
Kanter Representerer deler av fraser VP V NP PP [2, 5] En del av VP. Fra posisjon 2 til 5 VP VNP PP [2, 9] En hel VP frase med antydet struktur VP V NP PP [2, 2] Predikterer starten på en VP I posisjon 2 34
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 3. mars 2017 35
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] ) 3. mars 2017 36
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 3, 2017 37
Agenda 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 3, 2017 38
I dag CKY-algoritmen fortsatt fra sist Python-implementasjon av CKY Chomsky Normal Form (CNF) Chart-parsing BU-algoritme for chart-parsing 3. mars 2017 39
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: 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 40
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 41
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. (Straegi BU0) Det var alt 42
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 3. mars 2017 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
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) Blandinger av ord (terminaler) og kategorisymboler (ikke-terminaler) på høyresiden i samme regel 3. mars 2017 45