Parsning i Granska Ola Knutsson Språkteknologikursen ht 2001 Föreläsningens innehåll Inspiration och förebilder Målsättningar, designval Granskas regelsyntax Regler och tillämpningar Inspiration och förebilder Constraint Grammar (Karlsson et al, 1995) Finite-state parsing (Karttunen et al, 1997) Frasstruktur med särdrag med värden konstituenter, konkatenering, en del av helheten helst inga träd Granskas uppbyggnad Tokeniseraren Taggaren Lexikon (SUC & SAOL) Statistik (SUC) Regelmatcharen Regler (300 regler) Ordböjningsfunktion Grafiskt gränssnitt Interaktion med användaren Regelmatchning/parsning Varje regel kan appliceras var som helst i texten. Toppen-ner, djupet-först, vänster-höger Stannar så fort något regelelement ej matchar Optimerad matchning med statistiska medel. Reglerna förhandsgranskas och ett regelankare väljs ut. Binder regler till taggbigram och de ord som finns i reglerna, detta sparas på disk. Optimeringen ger 6 ggr snabbare matchning. Granskas regelspråk Regelsyntax Granskningsregler Hjälpregler Andra tillämpningar än språkgranskning 1
Granskas regelsyntax Några viktiga operatorer: & logiskt och logiskt eller! logiska negation = lika med!= inte lika med := tilldelningsoperator, matchningsvariabelsavskiljare konsekvenspil, avskiljer regelns vänster- och högerled Matchning av ord Matchningsvariabler: X Y Z osv. Orden ses som objekt med attribut och metoder. Textattribut: text= ord Särdragsatrribut Särdragsvärden wordcl=ordklass dt, nn, jj, gender= genus utr, neu num=numerus sin, plu, sin/plu spec=species ind, def, ind/def vbf=verbform prs, prt, sup X() matchar godtyckligt token Matchar bilen med en viss redundans: X(text= bilen & lem= bil & wordcl=nn & gender=utr & num=sin & spec=def & case=nom) Punktnotation X.särdragsattribut=värde undef värde saknas X.gender!=Y.gender (X.gender!=undef & Y.gender!=undef & X.gender!=Y.gender) Unifiering eller attributjämförelser x:[gen=gen], y:[gen=gen] X(), Y(gender=X.gender) Optionella sekvenser? Noll eller ett ord (hjälpregel) * Noll eller flera ord + Minst ett ord eller flera 2
Namngivning av regelkategori och regler category regelkategori info( namngivning ) link( www namn på länk ) regelnamn@regelkategori X() action(regeltyp) Vänsterledets syntax Följande måste finnas med i vänsterledet: regelnamn@regelkategori regelbörjan X minst en matchningsvariabel Xn optionella matchningsvariabler konsekvenspilen Jag ser en bil. Jag ser den lilla bilen. Jag ser ett stort hus. X1(wordcl=dt), X2(wordcl=jj & gender=x1.gender & num=x1.num & spec=x1.spec), X3(wordcl=nn & gender=x2.gender & num=x2.num & spec=x2.spec) en litet bil ett liten hus X1(wordcl=dt), X2(wordcl=jj & num=x1.num & spec=x1.spec), X3(wordcl=nn & gender!=x2.gender & gender=x1.gender & num=x2.num & spec=x2.spec) Högerledet Högerledets syntax mark corr jump info action link det som skall markeras i texten korrektion av det som har matchats hopp i regelsamlingen eller förbi ord kommentar om felet vilken regeltyp det är, scrutinizing/help ev. länk till mer info om felet Följande element måste finnas med: action(regeltyp) 3
Några viktiga metoder Viktiga funktioner no_of_tokens Returnerar antalet ord som en matchningsvariabel innehåller smart_concat (X, Y) spell_ok (ord) form(särdrag:=särdragsvärde, ) Returnerar en ny ordform spell_corr (felstavat_ord) Reglernas syntax regelnamn@regelkategori X() action(regeltyp) Hjälpregler Npmin@ X(wordcl=dt wordcl=ps)?, Y(wordcl=jj)*, Z(wordcl=nn wordcl=pm) action(help, gender:=z.gender, num:=z.num, if X.wordcl=ps then spec:=def else spec:=z.spec end, case:=z.case) Npkonj@ (Npmin/X)(), Y(wordcl=kn), (Npmin/Z)() action(help, num:=plu) Rekursiva hjälpregler En effektiv beskrivning/implementation av NP kräver rekursion. Vänsterrekursiva regler är ej tillåtna NP@ Npkonj action(help); ; Npmin action(help) 4
En minigrammatik, del 1 NP@ (NPmin)() action(help); % stoppvillkor för PP (NPmPP)() action(help) En minigrammatik, del 2 NPmin@ % NP (DT PS) (JJ) NN X(wordcl=dt wordcl=ps)?, % optionell determinerare eller possessiv Y(wordcl=jj)*, % noll eller flera adjektiv Z(wordcl=nn) % ett substantiv action(help) NPmPP@ (NPmin )(), (PP)() action(help) En minigrammatik, del 3 % NP NPmin PP % det går inte att anropa NP här, då hade % regeln blivit vänsterrekursiv eftersom NP % NPmPP. % en eller flera prepositionsfraser Kontextkänsliga regler Man vill tjuvkika på kontexten Bygga CG-liknande regler Statisk vänsterkontext PP@ % PP pp NP X(wordcl=pp), % en preposition (NP/Y)() % NP som kan innehålla 1 el. n PP action(help) En kontextkänslig regel A@ vänsterkontext, ENDLEFTCONTEXT, B(), BEGINRIGHTCONTEXT, högerkontext action(help) % A, regelhuvud % LC % B, regelkropp % RC Tillämpningar Omtaggningar Transformeringar Fras- och satsreduktion Högre nivå av taggning, t.ex. syntaktiska funktioner, satsadverbial NP-detektion, och andra fraser Satsgränsigenkänning Satstypigenkänning 5
Omtaggning, taggaren gör ibland fel DT_WRONG@ X(wordcl!=dt), endleftcontext, Y(wordcl=dt), beginrightcontext, Z(wordcl!=dt & wordcl!=rg & wordcl!=ro & wordcl!=pc & wordcl!=jj & wordcl!=nn) action(help, wordcl:=pn, pnf:=sub, gender:=y.gender, num:=y.num, spec:=y.spec) Satsgränsigenkänning Varför är det bra att känna igen satser? Ejerheds experiment och algoritmer Text-till-tal Minskar sökrymden för granskningsreglerna Förbättrar precisionen hos NP-regler Koordineringsflertydighet [Gamla hundar eller katter] äter [fisken och köttet] [[Gamla hundar] eller [katter]] äter [fisken] och [köttet]. [Hunden äter köttet] och [katten äter fisken] [Hunden äter [köttet och katten]] [äter fisken] Regler för satsgränsigenkänning eva11@ V(sed!=sen & text!="som" & wordcl!=sn), X((wordcl=pn & pnf=sub) (wordcl=pm & case=nom) (wordcl=nn & case=nom & V.case!=gen) wordcl=ab), ---ENDLEFTCONTEXT---, Y(wordcl=kn), ---BEGINRIGHTCONTEXT---, Y2(((wordcl=pn & pnf=sub) (wordcl=pm & case=nom) (wordcl=nn & case=nom) wordcl=ab) & wordcl=x.wordcl), Z(wordcl=vb & (vbf=prs vbf=prt vbf=imp)) % vbf=sup)) action(help, wordcl:=y.wordcl) Satsgränser Autentiskt exempel Ett förhållande som stark försvårar personvalet till riksdagen för kandidater som är bosatta inom en valkrets är när partier, utöver en lista som upptar deras namn, går fram med ytterligare en lista med samma namn i samtliga valkretsar i riket. [Ett ] [<clbegin> (clbegin@clrecog)] [när ] [<clbegin> (clbegin@clrecog)] [, ] [<clbegin> (clbegin@clrecog)] [är ] [<clend> (clend@clrecog)] [namn] [<clend> (clend@clrecog)] [riket] [<clend> (clend@clrecog)] 6
Adjektivfraser [ytterligare ] [ab (ab_chain1@abrecog)] [bosatta inom en valkrets ] [jj utr/neu plu ind/def nom (jjexternal@jjrecog)] [stark ] [jj utr sin ind nom (jjinternal@jjrecog)] Prepositionsfraser [för kandidater som är ] [ab (pp_2a@pprecog)] [för kandidater som är bosatta inom en valkrets ] (pp_2a@pprecog)] [ab [ytterligare ] [jj utr/neu sin/plu ind/def nom (jjinternal@jjrecog)] [samtliga ] [jj utr/neu plu ind nom (jjinternal@jjrecog)] [utöver en lista som upptar ] [ab (pp_2a@pprecog)] [utöver en lista som upptar deras namn] [ab (pp_2a@pprecog)] [till riksdagen ] [ab (pp_2b@pprecog)] [när ] [ha (qn_word@qnrecog)] Prepositionsfraser [med ytterligare ] [ab (pp_2b@pprecog)] [med ytterligare en lista ] [ab (pp_2b@pprecog)] [personvalet till riksdagen ] [nn neu sin def nom undef (np_pp@nprecog)] [i samtliga valkretsar i riket] [ab (pp_2b@pprecog)] [en lista med samma namn ] (np_pp@nprecog)] [nn utr sin ind nom undef [samtliga valkretsar i riket] [nn utr plu ind nom undef (np_pp@nprecog)] NP med relativsats [kandidater som är ] [nn utr plu ind nom undef (np_relclause@nprecog)] [kandidater som är bosatta inom en valkrets ] [nn utr plu ind nom undef (np_relclause@npre [en lista som upptar ] [nn utr sin ind nom undef (np_relclause@nprecog)] Minimala NP [ytterligare ] [nn utr plu def nom undef (np_jj@nprecog)] [Ett förhσllande ] [nn neu sin def nom undef (np_min@nprecog)] [kandidater ] [nn utr plu def nom undef (np_min@nprecog)] [en valkrets ] [nn utr sin def nom undef (np_min@nprecog)] [partier] [nn neu plu def nom undef (np_min@nprecog)] [en lista som upptar deras namn] (np_relclause@nprecog)] [nn utr sin ind nom undef [en lista ] [nn utr sin def nom undef (np_min@nprecog)] [deras namn] [nn neu sin def nom undef (np_min@nprecog)] 7
Verbkedjor [försvårar ] [vb prs akt (vb_chain4@vbrecog)] [är ] [vb prs akt (vb_chain4@vbrecog)] [är ] [vb prs akt (vb_chain4@vbrecog)] Fras- och satsreduktion Den gamle mannen letar efter sin gamla hatt med det blå bandet. Mannen letar efter hatten. [upptar ] [går fram ] [vb prs akt (vb_chain4@vbrecog)] [vb prs akt (vb_chain4@vbrecog)] Jag känner popstjärnan som står där borta vid baren. Jag känner popstjärnan vid baren. Jag känner popstjärnan. minnp@reduc X(wordcl=dt wordcl=ps), Y(wordcl=jj)*, Z(wordcl=nn) corr(x.delete() Y.delete() Z.form(spec:=def)) action(scrutinizing) Jämförelse med CG ( <ett> =s!@err) (1C N-UTR)) cg1@kong X(text= ett ), Y(A(lex.wordcl=nn & lex.gender=utr)) corr(x.form(gender:=utr)) action(scrutinizing) Finite-state parsning för grammatikkontroll Cooper & Sofkova 1998 % Den grova regeln (Broad grammar) define NP [dt jj* nn]; % de finare reglerna define Npdef[dt_def jj_def* nn_def]; define Npind[dt_ind jj_ind* nn_ind]; % Den felaktiga frasen skall finnas i NP men inte i Npdef eller Npind: NP [Npdef Npind]; Jämförelse med finite-state grammars NP@ X1(wordcl=dt), X2(wordcl=jj)*, X3(wordcl=nn) action(help) % Hjälpregel 2: NPunion@ X1(wordcl=dt), X2(wordcl=jj & spec=x1.spec)*, X3(wordcl=nn & spec=x1.spec) action(help) % Granskningsregeln: (NP)() ~ (NPunion)() info( kommentar ) 8