Granska - ett effektivt hybridsystem för svensk grammatikkontroll

 

Rickard Domeij & Ola Knutsson

Nada, KTH

Här beskrivs hur Granska - ett ytgrammatiskt system för att kontrollera svensk grammatik - är implementerat. Med hjälp av särskilda granskningsregler kan ett antal grammatiska fel i svenskan detekteras och förses med korrektionsförslag. Systemet kombinerar probabilistiska och regelbaserade metoder för att uppnå optimal effektivitet och robusthet. Detta är en nödvändig förutsättning för en grammatikkontroll som ska fungera i realtid i direkt interaktion med användaren (t.ex. Kukich, 1992). Vi hoppas visa att Granska med högre effektivitet kan nå samma eller bättre resultat i granskningen än andra system som enbart baseras på regelbaserad parsning. Vi belyser särskilt hur särskrivna sammansättningar och nominalfrasinkongruens hanteras i reglerna. Granska (Domeij, Eklundh, Knutsson, Larson & Rex, 1998) är utvecklat på institutionen för datalogi på KTH i Stockholm i samarbete med datorlingvister från Stockholms universitet och med stöd från NUTEK/HSFR.

Taggning och lexikon

Granska använder en gömd markovmodell (Carlberger & Kann, 1999) för att göra en grundläggande språklig analys och taggning av texten. Varje ord tilldelas en tagg som beskriver ordets ordklass och morfologiska särdrag. Taggningen görs på basis av ett lexikon på 674 000 ordformer som är konstruerat utifrån en handtaggad korpus på 1 miljon ord (SUC – Stockholm Umeå Korpus) och kompletterat med ord från SAOL (Svenska akademiens ordlista). Okända ord taggas med hjälp av probabilistisk ordslutsanalys. Systemet innehåller också en rättstavningsmodul som kan hantera svenska sammansättningar (Kann, Domeij, Hollman & Tillenius 1998).

Granskningsregler

Granska har särskilda granskningsregler som genomsöker resultatet från taggningen på jakt efter grammatiska felaktigheter. Eftersom markovmodellen även taggar morfosyntaktiskt avvikande ord med endast en tagg behöver i normalfallet ingen ytterligare disambiguering göras i granskningsreglerna för att detektera t.ex. ett kongruensfel som en hus. Detta är ett förfarande som skiljer sig från de flesta regelbaserade system vilka vanligtvis använder relaxerade regler för att hitta morfosyntaktiska avvikelser (t.ex. Sågwall-Hein 1998). En granskningsregel i Granska för att finna kongruensfelet en hus ser ut på följande sätt:

kong22@inkongruens

{

X(wordcl=dt),

Y(wordcl=jj)*,

Z(wordcl=nn & (gender!=X.gender | num!=X.num | spec!=X.spec))

-->

mark(X Y Z)

corr(X.get_form(gender:=Z.gender, num:=Z.num, spec:=Z.spec) Y Z)

info("Artikeln" X.text "stämmer inte överens med substantivet" Z.text)

action(granskning)

}

Regeln har två led som avskiljs med en pil. Det första ledet innehåller ett matchningsvillkor, det andra ledet specificerar den åtgärd som utlöses när villkoret uppfylls. I exemplet uppfylls villkoret när en determinerare följs av ett nomen (ev. föregånget av ett adjektiv) som skiljer sig i genus, numerus eller species från determineraren. I åtgärdsledet anges först att den felaktiga frasen i texten ska markeras. Sedan anropas en ordböjningsfunktion som med hjälp av lexikonet och ett antal regler genererar ett ersättningsförslag som kongruerar med substantivet. Denna presenteras som korrektionsförslag för användaren tillsammans med en diagnostisk text som förklarar felets art.

I de allra flesta fall klarar taggern av att tilldela det avvikande ordet den korrekta taggen i grundanalysen (i exempelfallet ART NEU SING OBEST). I vissa fall, när det är känt att taggern gör fel, kan meningen taggas om med hjälp av granskningsreglerna så att taggningen blir korrekt. Därmed används en kombination av probabilistiska och regelbaserade metoder redan i den grundläggande disambigueringen av texten.

Med speciella hjälpregler går det att definiera frastyper som kontextvillkor i granskningsreglerna. För att spåra inkongruens i predikativ används t.ex. följande regel som anropar två hjälpregler (subrutiner i exemplet) för att ange att kopula ska föregås av ett NP (ev. följt av ett eller flera PP) som ska kongruera med adjektivet:

pred2@predikativ
{
T(wordcl!=pp),
(NP),
(PP)+, % 1 till n PP
V3(wordcl=ab)?,
V(wordcl=vb)?,
X(wordcl=vb & vbt=kop),
Y(wordcl=jj & (gender!=NP.gender | num!=NP.num)),
Z(wordcl!=jj & wordcl!=nn)
-->
mark(*)
corr(T NP PP V3 V4 X if NP.spec=def then
Y.get_form(gender:=NP.gender, num:=NP.num, spec:=ind) else
Y.get_form(gender:=NP.gender, num:=NP.num) end Z)
info("Substantivfrasen" NP.text "stämmer inte överens med
"adjektivet" Y.text)
action(granskning)
}

NP@

{

X/wordcl=dt/?,

Y/wordcl=jj*/,

Z/wordcl=nn/

-->

action(hjälp, gender:=Z.gender, num:=Z.num, spec:=Z.spec, case:=Z.case)

}

PP@

{

X(wordcl=pp),

(NP)

-->

action(hjälp)

}

Med hjälpreglerna närmar sig analysen en frasstrukturgrammatik. Poängen med hjälpreglerna är att det går att göra en ytsyntaktisk frasanalys lokalt, utan att systemet behöver analysera de delar av satsen som inte är relevanta för lokaliseringen av den aktuella feltypen. Därmed bevaras systemets höga effektivitet samtidigt som den språkliga analysen får det djup som behövs i det enskilda fallet.

Särskrivningar och inkongruens

Inkongruens och felaktiga särskrivningar är två feltyper som ofta förekommer i svenska texter. Hittills har vi i första hand koncentrerat oss på att detektera kongruensfel i enkla nominalfraser och i särskrivningar av typen nomen+nomen. Lokalisering av särskrivna sammansättningar där det första ledet är ett sammansättningsled som inte kan stå själv, till exempel skid åkning, görs helt enkelt genom uppslagning i en förledsordlista. I övriga fall utgår strategin för att hitta felaktiga särskrivningar ifrån att två nomen sällan står intill varandra. Om det dessutom går att sätta samman dessa två nomen så att de bildar en godkänd sammansättning som passar i kontexten finns ytterligare skäl att tro att det faktiskt rör sig om ett fel. Här följer ett exempel på en regel som hittar felaktiga särskrivningar som Han såg de stora sten bumlingarna:

sär2@särskrivning

{

X1(wordcl=dt),

X10(wordcl=ab)*,

X2(wordcl=jj | wordcl=pc)*,

X3(wordcl=nn & (gender!=X1.gender | num!=X1.num | spec!=X1.spec) &

text!="slags" & text!="sorts"),

X4(wordcl=nn & gender=X1.gender & num=X1.num & spec=X1.spec &

correctly_spelled(concat(X3.text, text)))

-->

mark(X3 X4)

corr(X1 X10 X2 concat(X3.text, X4.text))

info("Särskrivningsfel, sätt ihop" X3 X4 "till " concat(X3.text, X4.text))

action(granskning)

}

Ibland kan två fel interagera, som i exemplet ett cykel ställ. För att inte systemet ska tolka detta fel som ett kongruensfel behöver granskningsreglerna ordnas så att särskrivningsreglerna får företräde framför kongruensreglerna i fall som det ovan. Än så länge är en sådan prioritetsordning mellan reglerna inte implementerad. I stället presenteras nu båda möjligheterna som fel, vilket allt som oftast är den bästa metoden.

Många fel kan var svåra att hitta på grund av flertydigheter som ibland inte går att avgöra med hjälp av kontexten, ett exempel är en egen exekverings enhet. Ett annat problem är falska fel som råkar slinka med i vissa fall, till exempel Den katt kvinnan såg var svart där det utelämnade relativpronomenet ställer till problem. Ett annat exempel på falskt alarm vid kongruens är: Samtidigt utgör den nya hot mot de utrotningshotade arterna.

Resultat

Taggningsmodulen arbetar med en hastighet av 22 600 ord i sekunden på en SUN Sparcstation Ultra 1. Hela 97 procent av orden i en okänd text taggas korrekt, ett resultat som står sig väl i en internationell jämförelse. De okända orden taggas med 92 procents korrekthet. Granskningssystemet i sin helhet granskar ungefär 600 ord per sekund inklusive lexikonladdning och taggning. Det är svårt att jämföra prestandan med andra system eftersom resultaten sällan redovisas, men vår uppskattning är att vi redan uppnått en jämförelsevis hög prestanda.

Vi är fortfarande i arbete med att ytterligare optimera prestandan och att förbättra reglerna i programmet. Preliminära tester med granskningsreglerna visar att vi för närvarande har en täckning på 60 % och en precision på 97 % när det gäller kongruensfel, och en täckning på 58 % och en precision på 96 % när det gäller felaktiga särskrivningar. Hittills är resultaten mycket lovande, men trots allt är det orealistiskt att tro att systemet kommer att få full täckning och precision. Därför är det viktigt att utveckla ett lättanvänt och instruktivt gränssnitt och i praktiken testa programmet på användare för att se vilka effekterna blir på språk och språkförmåga (se Domeij 1997, 1998). Än så länge går Granska bara att köra under Unix men ett grafiskt gränssnitt för PC beräknas vara klart före årsskiftet. Användartesterna ska slutföras under våren år 2000.

Referenser

Carlberger, J. & Kann, V. (1999). Implementing an efficient part-of-speech tagger. In: Software, Practice and Experience, to appear, 1999.

Domeij, R. (1997). Datorn och språkriktigheten. I: O. Josephson (ed.) Svenskan och IT-samhället. Hallgren & Fallgren.

Domeij, R., Eklundh, K., Knutsson, O., Larsson, S. & Rex, Å. (1998). Granskaprojektet 1996-1997. Technical Report NADA, KTH.

Domeij, R (1998). Detecting, diagnosing and correcting low-level problems when editing with and without computer aids. In TEXT Technology, vol 8, no. 1. Wright State University, Celina, USA.

Kann, V., Domeij, R., Hollman, J., & Tillenius, M. (1998). Implementaion aspects and applications of a spelling correction algorithm. In: Journal of Quantitative Linguistics.

Kukich, K. (1992). Techniques for automatically correcting words in text. ACM Computing Surveys, Vol. 24, No. 4, pp. 377-439.

Sågwall-Hein, A. (1998). A chart-based framework for grammar checking. Nodalida-98.