Granska Ola Knutsson knutsson@nada.kth.se Föreläsningens innehåll 1. Granskas regelspråk 2. Parsning i Granska 3. Språkgranskning i Granska 4. Granska-laborationen 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 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 1
En exempelregel - ett bil exregel@exempelregler X(text="ett"), Y(wordcl=nn & gender=utr) corr(x.form(gender:=y.gender)) mark(x Y) action(scrutinizing) 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 & lemma= bil & wordcl=nn & gender=utr & num=sin & spec=def & case=nom) Unifiering eller attributjämförelser Punktnotation X.särdragsattribut=värde undef värde saknas X.gender!=Y.gender (X.gender!=undef & Y.gender!=undef & X.gender!=Y.gender) x:[gen=gen], y:[gen=gen] X(), Y(gender=X.gender) 2
Optionella sekvenser? Noll eller ett ord (hjälpregel) * Noll eller flera ord + Minst ett ord eller flera 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) mark corr jump info action link Högerledet 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 3
Högerledets syntax Följande element måste finnas med: action(regeltyp) Viktiga metoder för ersättningsförslag insert (Y) tar Y som text, t.ex. Y.text och sätter in det före det angivna objektet, X.insert(Y) join (Y) tar Y som text enligt: X.join(Y.text) och sätter ihop dem till en textsträng (ord) delete tar bort det angivna objektet, enligt: X.delete(). replace(y) tar Y som text, Y.text, och ersätter det angivna objektet med Y, enligt X.replace(Y.text) Några viktiga metoder no_of_tokens Returnerar antalet ord som en matchningsvariabel innehåller form(särdrag:=särdragsvärde, ) Returnerar en ny ordform Generering av ersättningsförslag Här ligger några trevligt restauranger. Problem: Om varje ord i lexikonet kopplas explicit till alla dess böjningsformer blir lexikonet väldigt stort. Lösning: Basformen trevlig slås upp i lexikonet. Varje basform i lexikonet har en böjningsregel. Med hjälp av böjningsregeln för trevlig hittas den rätta formen trevliga. Viktiga funktioner smart_concat (X, Y) spell_ok (ord) spell_corr (felstavat_ord) Reglernas syntax regelnamn@regelkategori X() action(regeltyp) 4
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) NP@ Npkonj action(help); ; Npmin action(help) Rekursiva hjälpregler En effektiv beskrivning/implementation av NP kräver rekursion. Vänsterrekursiva regler är ej tillåtna. 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 PP@ % PP pp NP X(wordcl=pp), % en preposition (NP/Y)() % NP som kan innehålla 1 el. n PP action(help) 5
Kontextkänsliga regler Man vill tjuvkika på kontexten Bygga CG-liknande regler Statisk vänsterkontext En kontextkänslig regel A@ vänsterkontext, ENDLEFTCONTEXT, B(), BEGINRIGHTCONTEXT, högerkontext % A, regelhuvud % LC % B, regelkropp % RC action(help) 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 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] 6
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) Autentiskt exempel Visst hade vi våra funderingar, han har inte tävlat sedan 5 januari, han har inte som Johann Mühlegg laddat länge på hög höjd. <clause> <ph type="ab" pos="2">visst</ph> <ph type="vb" pos="3">hade</ph> <ph type="npmin" pos="4">vi</ph> <ph type="npmin" begin="5" end="6" repr="nn.utr.plu.def.nom">våra funderingar</ph> </clause> <clause> <ph type="mid" pos="7">,</ph> <ph type="npmin" pos="8">han</ph> <ph type="vb" begin="9" end="11" repr="vb.prt.akt">har inte tävlat</ph> <ph type="ab" pos="12">sedan</ph> <ph type="ab" pos="13">5 januari</ph> </clause> <clause> <ph type="mid" pos="14">,</ph> <ph type="npmin" pos="15">han</ph> <ph type="vb" pos="16">har</ph> <ph type="ab" pos="17">inte</ph> <ph type="kn" pos="18">som</ph> <ph type="nppm" begin="19" end="20" repr="pm.nom">johann Mühlegg</ph> <ph type="vb" pos="21">laddat</ph> <ph type="ab" pos="22">länge</ph> <ph type="pp" begin="23" end="25" repr="ab">på hög höjd</ph> <ph type="mad" pos="26">.</ph> </clause> Fras- och satsreduktion Den gamle mannen letar efter sin gamla hatt med det blå bandet.! Mannen letar efter hatten. 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. 7
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 ) Behov av språklig granskning Datorn är det viktigaste skrivverktyget Det är enkelt att producera text som ser bra ut, men problemen med formuleringar av innehållet kvarstår Det är enkelt att producera mycket text mer skrivande - mindre läsning och granskning Kraftfulla redigeringsmöjligheter ger upphov till att språkfel uppstår Datorn som språkgranskare Fördelar: outtröttlig tillgänglig snabb Men: fragmentarisk ger falska alarm 8
Vad tillför forskning om automatisk språkgranskning? Kommersiella program långt ifrån kompletta eller perfekta Många problem fortfarande olösta Kunskap om verktygens användning och effekter på språk och skrivande Forskningsbakgrund Språkliga datorstöd för skrivande, Kerstin Severinson Eklundh (1992) Stavningskontroll med Stava, Kann & Hollman (1992) Plita (1994) Granska (1996) Granska + Stava = sant (1998) Språkgranskning och skrivprocessen Revisionsprocessen Skrivprocessen enligt Flower & Hayes (1981) Planering Textproduktion Granskning/revision Skribenten rör sig mellan processerna ny textproduktion kräver ny granskning osv. Detektion Diagnos Revision Felet markeras Felet förklaras Ersättningsförslag presenteras Metoder för grammatikkontroll 1. Grammatisk analys av texten 2. Fenomenbaserad granskning 3. En kombination av 1 och 2 Granskas angreppssätt Specifika felregler Mer omfattande grammatisk analys endast när det behövs Statistisk analys i botten för hantering av oförutsägbara konstruktioner, t.ex. texter med många fel i. 9
Två olika användare av Granska länsstyrelsen Skribenten en vuxen person med svenska som modersmål Regelkonstruktören/lingvisten den som konstruerar reglerna i Granska Granskas mest eftersökta feltyper Inkongruens i nominalfraser: ett villa Särskrivna sammansättningar: en hus bil Inkongruens i predikativ: Mannen är glada Andra feltyper som Granska detekterar Felaktiga sammansättningar: undertiden Objektsform efter preposition: skicka brev till de Fel i verbfras: Vi kommer spela en låt Ordföljdsfel: De sjöng trots att han spelade inte låten längre. Inkongruens i nominalfraser I Hon bor i det gröna villan. Språkgranskning är en av språkteknologins viktigaste tillämpningsområden Han hade fickorna fylld med guld. Inkongruens i nominalfraser: problem Han var motståndare till ett gatans parlament i staden. I går utlöste den nya hot Semantisk kongruens: Statsrådet själv vs. Statsrådet självt Paul Weller är en av undantagen 10
en litet bil ett liten hus kong1@kong 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) action (scrutinizing) corr (X2.form(gender:=X3.gender)) Särskrivna sammansättningar I En ljus hårig sjuk sköterska satt vid en bar disk. Mellan 12 och 16 kollar vi glykolhalt och spolar vatten och olja på din bil. Jag har köpt en ny rygg säck. Han dömdes för miss handel av hovrätten. Särskrivna sammansättningar II en mans röst vs. en mansröst Du kan få älgen som del betalning. delbetalning Men inte: Hon tog det som en del betalning. Vi jagade en del älg. Särskrivna sammansättningar: några lösningar Utnyttja kongruens/inkongruens: ett cykel ställ Stava: cykelställ är en godkänd sammansättning Satsgränsigenkänning (Ejerheds algoritm) Accepterande regler Taggning av felaktiga konstruktioner Här taggas hylla som nomen: Vi har köpt en bok hylla sa Per. Här taggas hylla som verb: Vi har köpt en bok hylla på IKEA sa Per. Hur man skriver regler för att hitta felaktiga särskrivningar I grova drag för t.ex. språk granskning eller signal detektionsteori: 1. Leta upp två substantiv i obestämd form som står i följd. Korrekta detektioner: I grova drag för t.ex. språk granskning eller signal detektionsteori Anpassa sig till taggaren? Tillgång till fler tolkningar av ordet + lexikal sannolikhet Falska alarm: Jag kan tänka mig att en massa bedömare har gjort en rad studier i ämnet. 11
3. Använd Stava 2. Ta bort så många falska alarm som möjligt. Ställ ytterligare krav på matchningen. språk språkgranskning granskning Viktigaste kravet: det första substantivet får inte tillhöra gruppen substantiv som kan utgöra en måttapposition, t.ex. grupp, antal, rad, massa. Felstavat! Stava Rättstavat! Inget alarm Felet signaleras Särskrivningsregel saer3@särskrivning X(wordcl=substantiv & spec=ind & case=nom & nntype!= set & nntype!=dat), Y(wordcl=substantiv & spec=ind & spell_ok(smart_concat(x.text, Y.text)) mark(x Y) corr(x.join(y.text)) info( Felaktig särskrivning ) Inkongruens i predikativ I Mannen är glada Mannen är glad/männen är glada Problemet med den kommunala fördelningen från inkomstskatter för säsongsanställda är svår att lösa inom befintligt skattesystem. Inkongruens i predikativ: problem Längre beroenden som är svåra att analysera Strukturella flertydigheter Inkongruens kan vara det riktiga Gröt är gott Gröt är god En ny utrikesminister vore inte så dum En ny utrikesminister vore inte så dumt Inkongruens i predikativ: några dellösningar Omfattande nominalfrasanalys Hittar fler fel, men ger också nya falska alarm Godkänna många konstruktioner: Gröt är gott gröt är bränt Många olösta problem Feltypen kräver i många fall semantisk analys 12
Hjälpregler En liten by NPmin@ X(wordcl=dt), Y(wordcl=jj)*, Z(wordcl=nn) action(help, gender:=z.gender, num:=z.num) System av hjälpregler en liten by en liten by på landet NP@ (NPmin)() action(help); (NPmPP) action(help) Den gamle mannen är glada Den gamle mannen på bänken är glada predex@pred (NP)(), X(wordcl=vb & vbt=kop), Y(wordcl=jj & num!=np.num) corr(y.form(num:=np.num)) Utvärdering av Granska på fem texttyper Problem med utvärderingar: Hur mycket text behövs? I vilket skick är texten? Mycket manuellt arbete Människor hittar inte alla fel och gör felbedömningar Ersättningsförslag svåra att bedöma utan användare Täckning och precision Täckning = antal korrekta alarm/alla fel 100 % täckning = 10 av 10 fel upptäcks Precision = antal korrekta alarm/alla alarm 100 % precision = 10 av 10 felrapporter är korrekta Dragkamp mellan täckning och precision Vad vill användaren ha? Andra utvärderingar Critique (Jensen et al) 39-70 % korrekta alarm beroende på användarkategori Birns utvärdering av Grammatifix: Täckning 35 % och precision 70 % (nyhetstext). Bredenkamp et al utvärderade två mänskliga granskare: upptäcker 7 resp. 8 av 10 fel 13
Fem texttyper Sportnyheter 63 568 ord Utrikesnyheter 20 881 ord Myndighetstexter 36 667 ord Populärvetenskap 32 386 ord Gymn.- och högskoleuppsatser 47 517 ord -------------------------------------------------------- 201 019 ord (400 A4) Felfrekvenser Fel i verbkedjan 21 % Särskrivna sammansättningar 18 % Inkongruens i nominalfraser 17 % Inkongruens i predikativ 4 % Stavfel med gram-sem konsekvens 13 % Jag har hjort läxan Ord saknas 13 % Han kör? grön bil Några resultat Begränsad undersökning I populärvetenskaplig text upptäcktes 9 av 10 fel, 5 av 10 felrapporter var korrekta Gymn.- och högskoletexter upptäcktes 4 av 10 fel, 7 av 10 felrapporter var korrekta Utvärdering med användare Försöksuppgift: Granska en preparerad text med Granska och Words GK Observationer: Ersättningsförslag Felaktig diagnos Falska alarm Flera olika diagnoser och ersättningsförslag diagnos ersättningsförslag ett cykel ställ särskrivning ett cykelställ ett cykel ställ kongruensfel en cykel ställ Utvärdering med användare Falska alarm: Stavfel vållade inga problem (i denna undersökning) Mer komplicerade feltyper fick användarna att ändra i texten Språkligt skickliga skribenter nöjer sig med detektionen av felet, diagnos och ersättning utförs på egen hand. 14
Utvärdering med användare Ersättningsförslagen är viktiga för att ställa rätt diagnos. Vid flera alternativ, valde användarna i nästan samtliga fall ett korrekt. Lärdomar: Svårt att följa användare som granskar med s.k. kontinuerlig granskning Intressantare om användarna får arbeta med sina egna texter Framtida arbete Olika fel har olika lång bearbetningstid för användaren, gäller även falska alarm. Ett falskt alarm från stavningskontrollen går snabbt att avfärda. Det finns många fel kvar att detektera! Stavfel med grammatisk/semantisk konsekvens och Ord saknas Granska en experimentell miljö En öppnare arkitektur för experiment med olika tokeniserare, lexikon, taggare, hjälpregelsamlingar osv. Mer grundläggande analys behövs, t.ex. algoritmer för igenkänning av syntaktiska funktioner Användaranpassning av Granska Andraspråksinlärare och användare med speciella behov Andra behov av språklig hjälp Om en mening innehåller många fel är den synnerligen svår att analysera Nya krav på gränssnitt och innehåll 15