INF2820 Datalingvistikk V2014 9. gang, 13.3.2014 Jan Tore Lønning
I dag Chart parsing Implementasjon (Earley s algoritme) Parsing vs anerkjenning For CKY og chart Trekkbaserte ( feature-based )grammatikker Motivasjon: begrensninger i kontekstfrie grammatikker for naturlige språk Eksempler 2
Struktur En kant representeres som: <edge> = (<dotted item>,<span>) <dotted item> = (<lhs>,<rhs found>,<rhs to find>) <span> = (<begin>,<end>) Eksempler: (S ->. NP VP, [0,0]) as ((S,[],[NP, VP]),(0,0)) (S -> NP. VP, [0,3]) as ((S,[NP],[VP]),(0,3)) (S -> NP VP., [0,5]) as ((S,[NP, VP],[]),(0,5)) 3
BU: Initialiser def make_chart(words, grammar, strategy='td'): agenda = [] chart = [] for i in range(len(words)): for p in grammar.productions(): if len(p.rhs()) == 1 and p.rhs()[0] == words[i]: agenda.append(((p.lhs(),list(p.rhs()),[]), (i, i+1))) 4
Add to chart while agenda: edge = agenda.pop() if edge not in chart: chart.append(edge) ((mother, found, to_find),(start, end)) = edge if to_find: # active edge 5
Fundamental rule if to_find: # active edge pivot = to_find[0] for edge2 in chart: ((mother2, found2, to_find2),(start2, end2)) = edge2 if mother2 == pivot and to_find2==[] and end==start2: newfound = found[:]+[pivot] agenda.append(((mother, newfound, to_find[1:]), (start, end2))) else: # inactive edge for edge2 in chart: ((mother2, found2, to_find2),(start2, end2)) = edge2 if to_find2 and to_find2[0]==mother and end2==start: newfound = found2[:]+[mother] agenda.append(((mother2, newfound, to_find2[1:]), (start2, end))) 6
BU: Make predictions if not to_find: for p in grammar.productions(): if p.rhs()[0] == mother: agenda.append(((p.lhs(), [mother], list(p.rhs())[1:]), (start, end))) return chart 7
TD: Initialize def make_chart(words, grammar, strategy='td'): agenda = [] chart = [] if strategy == 'td': top = grammar.start() for p in grammar.productions(): if p.lhs() == top: agenda.append(((p.lhs(), [], list(p.rhs())), (0, 0))) for i in range(len(words)): for p in grammar.productions(): if len(p.rhs()) == 1 and p.rhs()[0] == words[i]: agenda.append(((p.lhs(),list(p.rhs()),[]), (i, i+1))) 8
TD Add to chart Fundamental rule Same as BU 9
Make predictions: TD vs BU if strategy == 'td' and to_find: for p in grammar.productions(): if p.lhs() == to_find[0] and p.is_nonlexical(): agenda.append(((p.lhs(), [], list(p.rhs())), (end, end))) elif strategy == 'bu0' and not to_find: for p in grammar.productions(): if p.rhs()[0] == mother: agenda.append(((p.lhs(), [], list(p.rhs())), (start, start))) elif strategy == 'bu1' and not to_find: for p in grammar.productions(): if p.rhs()[0] == mother: agenda.append(((p.lhs(), [mother], list(p.rhs())[1:]), (start, end))) return chart 10
Egenskaper Merk Unære regler Mer enn to symb. på høyreside Dette går fint Venstrerekursjon ikke noe problem Tomme prod. OK ved TD-strategi, Problem ved BU 12. mars 2014 11
I dag Chart parsing Implementasjon (Earley s algoritme) Parsing vs anerkjenning For CKY og chart Trekkbaserte ( feature-based )grammatikker Motivasjon: begrensninger i kontekstfrie grammatikker for naturlige språk Eksempler 12
Earleys algoritme Som presentert av J&M Tilsvarer en chart-parser med: TD innføring av aktive/inkomplette kanter Streng venstre mot høyre Litt 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) 12. mars 2014 13
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 12. mars 2014 14
I dag Chart parsing Implementasjon (Earley s algoritme) Parsing vs anerkjenning For CKY og chart Trekkbaserte ( feature-based )grammatikker Motivasjon: begrensninger i kontekstfrie grammatikker for naturlige språk Eksempler 15
CKY Parsing og Chart parsing Er dette egentlig en parser? Strengt tatt: Nei! Det er en anerkjenner Hvordan kan vi lage en parser som følger denne algoritmen? 3/12/2014 Speech and Language Processing - Jurafsky and Martin 16
Alternativ Alt 1: Bygg trær underveis og legg dem i chartet S S S S a Med en flertydig grammatikk kan chartet/tabellen vokse eksponensielt 17
Example (0) a (1) a (2) a (3) a (4) --------------------------------------------------------------------------- 0) (Sa) (S(Sa)(Sa)) (S(S(Sa)(Sa))(Sa)) (S(S(S(Sa)(Sa))(Sa))(Sa)) (S(Sa)(S(Sa)(Sa))) (S(S(Sa)(S(Sa)(Sa)))(Sa)) (S(S(Sa)(Sa))(S(Sa)(Sa))) (S(Sa)(S(S(Sa)(Sa))(Sa))) (S(Sa)(S(Sa)(S(Sa)(Sa)))) --------------------------------------------------------------------------- 1) (Sa) (S(Sa)(Sa)) (S(S(Sa)(Sa))(Sa)) (S(Sa)(S(Sa)(Sa))) --------------------------------------------------------------------------- 2) (Sa) (S(Sa)(Sa)) --------------------------------------------------------------------------- 3) (Sa) --------------------------------------------------------------------------- March 12, 2014 18
Et bedre alternativ Ikke bygg hele trær Men inkluder i strukturen informasjon som gjør det mulig å konstruere alle trær. (Merk: Hvis vi vil skrive ut alle trær får vi uansett en eksponensiell algoritme fordi antallet trær til en streng kan være eksponensielt i lengden av inputt.) 19
Example (0) a (1) a (2) a (3) a (4) ------------------------------------------------------------------------------------ 0) (1,S,'a') (3,S,[(1,2)]) (6,S,[(1,5),(3,4)]) (10,S,[(1,9),(3,8),(6,7)]) ------------------------------------------------------------------------------------ 1) (2,S,'a') (5,S,[(2,4)]) (9,S,[(2,8),(5,7)]) ------------------------------------------------------------------------------------ 2) (4,S,'a') (8,S,[(4,7)]) ------------------------------------------------------------------------------------ 3) (7,S,'a') ------------------------------------------------------------------------------------ 20
I dag Chart parsing Implementasjon (Earley s algoritme) Parsing vs anerkjenning For CKY og chart Trekkbaserte ( feature-based )grammatikker Motivasjon: begrensninger i kontekstfrie grammatikker for naturlige språk Eksempler 21
Agreement (no: samsvar) By agreement, we have in mind constraints that hold among various constituents that take part in a rule or set of rules For example, in English, determiners and the head nouns in NPs have to agree in their number. This flight Those flights *This flights *Those flight Speech and Language Processing - Jurafsky and Martin 22 3/12/2014
Verb Phrases English VPs consist of a head verb along with 0 or more following constituents which we ll call arguments. Speech and Language Processing - Jurafsky and Martin 23 3/12/2014
Subcategorization But, even though there are many valid VP rules in English, not all verbs are allowed to participate in all those VP rules. We can subcategorize the verbs in a language according to the sets of VP rules that they participate in. This is a modern take on the traditional notion of transitive/intransitive. Modern grammars may have 100s or such classes. Speech and Language Processing - Jurafsky and Martin 24 3/12/2014
Subcategorization Sneeze: John sneezed Find: Please find [a flight to NY] NP Give: Give [me] NP [a cheaper fare] NP Help: Can you help [me] NP [with a flight] PP Prefer: I prefer [to leave earlier] TO-VP Told: I was told [United has a flight] S Speech and Language Processing - Jurafsky and Martin 25 3/12/2014
Possible CFG Solution Possible solution for agreement. Can use the same trick for all the verb/vp classes. SgS -> SgNP SgVP PlS -> PlNp PlVP SgNP -> SgDet SgNom PlNP -> PlDet PlNom PlVP -> PlV NP SgVP ->SgV Np 3/12/2014 Speech and Language Processing - Jurafsky and Martin 26
Hvorfor ikke? F.eks. NLTK ch.9, ex. 8 S NP_SG VP_SG S NP_PL VP_PL NP_SG Det_SG N_SG NP_PL Det_PL N_PL VP_SG V_SG VP_PL V_PL Det_SG 'this' Det_PL 'these' N_SG 'dog' N_PL 'dogs' V_SG 'runs' V_PL 'run' Problem Eksplosjon av regler NP DET N 16 regler i tysk (4 kasus*(3 genus i sg + pl) NPs: 1., 2., 3. person Manglende generalisering: De 16 reglene har mye felles March 12, 2014 27
I dag Chart parsing Implementasjon (Earley s algoritme) Parsing vs anerkjenning For CKY og chart Trekkbaserte ( feature-based )grammatikker Motivasjon: begrensninger i kontekstfrie grammatikker for naturlige språk Eksempler 28
Trekk ( features ) trinn for trinn NLTK ch.9, ex. 8 S NP_SG VP_SG S NP_PL VP_PL NP_SG Det_SG N_SG NP_PL Det_PL N_PL VP_SG V_SG VP_PL V_PL Det_SG 'this' Det_PL 'these' N_SG 'dog' N_PL 'dogs' V_SG 'runs' V_PL 'run' Kategorier og trekk S NP[NUM=sg] VP[NUM=sg] S NP[NUM=pl] VP[NUM=pl] NP[NUM=sg] Det[NUM=sg] N[NUM=sg] NP[NUM=pl] Det[NUM=pl] N[NUM=pl] VP[NUM=sg] V[NUM=sg] VP[NUM=pl] V[NUM=pl] Det[NUM=sg] 'this' Det[NUM=pl] 'these' N[NUM=sg] 'dog' N[NUM=pl] 'dogs' V[NUM=sg] 'runs' V[NUM=pl] 'run' March 12, 2014 29
Trekk trinn for trinn 2 Kategorier og trekk S NP[NUM=sg] VP[NUM=sg] S NP[NUM=pl] VP[NUM=pl] NP[NUM=sg] Det[NUM=sg] N[NUM=sg] NP[NUM=pl] Det[NUM=pl] N[NUM=pl] VP[NUM=sg] V[NUM=sg] VP[NUM=pl] V[NUM=pl] Saml sammen likheter S NP[NUM=?x] VP[NUM=?x] NP[NUM=?x] Det[NUM=?x] N[NUM=?x] VP[NUM=?x] V[NUM=?x] Det[NUM=sg] 'this' Det[NUM=pl] 'these' N[NUM=sg] 'dog' N[NUM=pl] 'dogs' V[NUM=sg] 'runs' V[NUM=pl] 'run' Det[NUM=sg] 'this' Det[NUM=pl] 'these' N[NUM=sg] 'dog' N[NUM=pl] 'dogs' V[NUM=sg] 'runs' V[NUM=pl] 'run' March 12, 2014 30
Intuitiv tolkning CFG S NP VP Med trekk S NP[NUM=?x] VP[NUM=?x] Hvis words[i,j] er en NP og words[j,k] er en VP Så kan words[i,k] være en S Hvis words[i,j] er en NP og words[j,k] er en VP og NP sin NUM = VP sin NUM Så kan words[i,k] være en S March 12, 2014 31
Mot en formalisering Formelt: Kan en kategori ha flere enn ett trekk? Hvilke verdier kan et trekk ta? Hva er de mulige grammatikkreglene? Hvordan skal vi tolke grammatikkreglene? Anvendelser: Hvordan skal en grammatikk med trekk for et gitt naturlig se ut? Hva mer kan trekk brukes til? Generaliseringer Grammatikker for språk som ikke er kontekstfrie Semantiske representasjoner Komputasjonelt: Hvordan kan trekkgrammatikker parses? March 12, 2014 32
Flere enn ett trekk i en kat., eks: tysk S NP[CASE=nom, NUM=?x, PERS=?y] VP[NUM=?x, PERS=y?] NP[CASE=?z,NUM=?x, PERS=3rd] Det[CASE=?z,NUM=?x, GEN=?u] N[CASE=?z,NUM=?x, GEN=?u] VP[NUM=?x] V[SUBC= dtv, NUM=?x] NP[CASE=dat] NP[CASE=acc] Det[NUM=sg, CASE=nom, GEN=mask] 'der' 33