INF2820 Datalingvistikk V2014 15. gang, 8.5.2014 Jan Tore Lønning
Språk og grammatikk Språk (formelt): En endelig mengde A Ø En undermengde L A* Grammatikk: En endelig innretning som definerer L Klasser av språk Til være type av grammatikker svarer en klasse språk Et språk kan være i flere klasser Eks: A = {a, b, c,, å} L = {w w er et norsk ord} Eks: Regulære uttrykk Endelige tilstandsautomater Kontekstfrie grammatikker Unifikasjonsgrammatikker Eks: Et språk som er regulært er også kontekstfritt og kan beskrives av en unifikasjonsgrammatikk 7. mai 2014 2
Chomsky-hierakiet J&M, fig. 16.1
Chomsky-hierarkiet J&M, fig. 16.2 Unification grammars (=Feature-based grammars, NLTK) Vi har konsentrert oss om Type 3: Regulære Type 2: Kontekstfrie Unifikasjonsgrammatikker I sin mest generelle form beskriver de type 0-språk
Regulære språk Følgende er ekvivalente: a) L kan beskrives med et regulært uttrykk. b) Det fins en NFA som anerkjenner L. c) Det fins en DFA som anerkjenner L. Definisjon: Alle endelige språk er regulære Hvis M og L er regulære, så er L M, LM og L* regulære Kan bevises: Hvis M og L er regulære, så er L M og A*-L regulære 5
Konsekvenser Hvis L er regulært, så er A*-L regulært. 1. Lag DFA for L 2. Legg til trap state. 3. Reverser aksepterende tilstander Hvis L og M er regulære, så er L M regulært. L M = A*-((A*-L) (A*-M)) 6
Ikke alle språk er regulære Eksempler, A={a,b,c} Regulære L = {w w > 10 000 000} L = {w w inneholder sekvensen abc} L = {w w inneholder 118 a-er} Ikke-regulære L={w w w A*} L={w w R w A*} L={a n b n } 7. mai 2014 7
Er naturlige språk regulære? Jfr. forelesn. 3: pumpelemma for regulære språk Eks.: a n b n ikke regulært Matche ( og ) ikke regulært: ((( ) ( ))( )((( ) ( ))( ))( )) Regulært Ikke regulært 7. mai 2014 8
Center embedding Regulært Barnet smilte. Barnet, som eide hunden, smilte. Barnet, som eide hunden, som elsket katta, smilte. Barnet, som eide hunden, som elsket katta, smilte. Barnet, som eide hunden, som elsket katta, som jagde musa, smilte. NP (, som TV NP,)* VP Ikke regulært Musa rømte. Musa, som katta jagde, rømte. Musa, som katta, som hunden elsket, jagde, rømte. Musa, som katta, som hunden, som barnet eide, elsket, jagde, rømte. NP (, som NP,) n (TV,) n VP Kan dette gjentas for alle n? 9
Kontekstfrie og regulære språk Alle regulære språk er kontekstfrie Det fins kontekstfrie språk som ikke er regulære: L = {a n b n n > 1} S ab S asb 7. mai 2014 10
Fra regulært til kontekstfritt S svarer til starttilstand En ikke-terminal per tilstand: S, A1, A2, A3 En regel per transisjon: S a A1 A1 b A2 A2 b S A2 c A3 A3 c A1 En regel per sluttilstand A3 Ethvert regulært språk kan beskrives av en kontekstfri grammatikk 7. mai 2014 11
Kontekstfrie språk Ikke kontekstfrie: a n b n c n a m b n c m d n ww Noen fakta: Hvis L1 og L2 er kontekstfrie, behøver ikke L1 L2 være kontekstfritt. Hvis L1 er kontekstfritt og L2 er regulært, så må L1 L2 være kontekstfritt. Hvis L1 er kontekstfritt, så er f[l1] kontekstfritt. (Fins et pumpelemma for CF-språk, men ikke ta detaljene her.) 7. mai 2014 12
Er naturlige språk kontekstfrie? 7. mai 2014 13
Figure 16.5 En slik struktur kan avbildes på ww og kan derfor ikke være kontekstfri. Finnes slike strukturer i naturlig språk?
Sveitsertysk Viktig: Ordstilling Kasus Høytysk: wir dem Hans das Haus anstreichen halfen. 7. mai 2014 15
Argumentet Rekursivt: L2 (regulært) ST L2 F[ST L2] = a m b n c m d n er ikke kontekstfritt. Da kan ikke ST L2 være kontekstfritt. Siden L2 er regulært og ST L2 ikke er CF, kan ikke ST være CF 7. mai 2014 16
Er dette viktig? Viktig fordi Chomsky innførte CFG men argumenterte mot dem for naturlige språk (NL) og lagde andre typer grammatikker Men det har vist seg vanskelig å vise at NL ikke er kontekstfrie. Vi har gode parsingalgoritmer for CFG-er Mindre viktig fordi Kraftigere grammatikkformalismer, som LFG og HPSG: Hensiktsmessige for å beskrive NL Langt oppe i Chomskyhierarkiet, men effektive algoritmer for å prosessere dem 7. mai 2014 17
Eksempel: En fcfg for et ikke-kontekstfritt språk a n b n c n S -> A[I=?n] B[I=?n] C[I=?n] A[I=o] -> 'a' B[I=o] -> 'b' C[I=o] -> 'c' A[I=[I=?n]] -> 'a' A[I=?n] B[I=[I=?n]] -> 'b' B[I=?n] C[I=[I=?n]] -> 'c' C[I=?n] May 7, 2014 18