Laboration 3:
SnålGranska

Jonas Sjöbergh

Syfte

Syftet med denna labb är att få en inblick i hur det kan gå till när man skapar ett (litet) språkgranskningsverktyg.

Uppgift

Uppgiften är att på egen hand skapa ett språkgranskningsverktyg, med hjälp av maskininlärningsmetoder.

Material

En stor samling text (till exempel Parole-korpusen), ett maskininlärningspaket (till exempel fnTBL), en text med lite fel i att testa på kan också vara bra att ha.

Hjälp

För ytterligare hjälp, skicka e-post till Jonas (jsh at nada.kth.se), men det kan emellanåt ta lång tid innan man får svar.

Redovisning

Lösningar skickas per e-post till Jonas (jsh at nada.kth.se). Sista redovisningsdag är 30 november 2005.

Relaterad litteratur

Det finns en artikel om SnålGranska som man kan läsa om man är intresserad. Det behövs dock inte för att klara labben.

Översikt, läs detta

I denna labb ska vi göra en enkel grammatikgranskare med minimal egen arbetsinsats. Tanken är att det är lätt att få tag på 1) färdiga maskininlärningspaket, 2) oannoterad text, 3) enkla verktyg som PoS-taggare. Det är dessutom enklare att skriva ett litet program som inför halvrealistiska fel än att försöka hitta riktiga fel. Med detta i bakhuvudet skapar vi vår grammatikgranskare.

Vi betraktar här grammatikgranskning som ett taggningsproblem, d.v.s. vi vill ha något som detta:

För att få detta tränar vi helt enkelt ett färdigt maskininlärningspaket på text annoterad på detta vis. Eftersom det är hejdlöst jobbigt att annotera tillräckligt stora mängder text med denna typ av information så fuskar vi till det lite. Vi annoterar helt enkelt allting som "OK" och stoppar in lite syntetiska fel som vi samtidigt annoterar med "ERROR". För att maskininlärningspaketet ska få lite mer information att basera sin beslut på kan vi även automatannotera våra texter med mer information, till exempel PoS, så länge det finns färdiga program för detta som vi inte behöver skriva själva.

Resurser

Det mesta man behöver för denna labb går att få tag på från många olika källor. Gör man labbarna inloggad på Nadas datorer finns det dock en hel del redan tillgängligt, så man inte ens behöver ladda ned dem. Här finns till exempel flera olika PoS-taggare, flera olika textkorpusar, program för stavningskontroll, stemming, uppdelning av sammansättningar, lemmatisering, m.m. Skicka ett mail till någon av lärarna på kursen om du vill använda någon speciell resurs.

Saker att göra

Bestäm feltyp

Vi nöjer oss här med att försöka detektera en enda sorts fel (även om det är fritt fram att attackera fler feltyper för den som vill). Bestäm först vilken typ av fel som vore roligast, exempel kan vara särskrivningar, kongruensfel, ordföljdsfel, fel verbtempus, prepositionsanvändning m.m.

Samla text

Skaffa en större textmängd, åtminstone en miljon ord vore bra. Man kan be att få använda SUC, ladda ned Parole m.m. vilket är fritt fram för akademiker. Man kan också plocka hem webbsidor eller liknande (dock kan det förekomma ganska mycket fel i webbsidetext, vilket vi helst vill undvika här).

Generera fel

Skriv ett enkelt program för att införa fel i texten och samtidigt annotera texten. Ett exempel kan vara ett program som tar en text och märker alla ord med "OK", sen slumpvis väljer ungefär var tionde ord och byter plats på detta och föregående ord. Dessa två markeras då istället med "ORDFÖLJDSFEL". Nu har vi en annoterad korpus att träna på. Det är också lämpligt att skicka med en oförstörd kopia av all text också (annoterad med bara "OK"), för att visa hur det borde ha sett ut.

Skaffa verktyg

Vilken typ av information kan tänkas vara användbar för detektion av den feltyp vi letar efter, och samtidigt lätt att skaffa fram? Ofta kan en part-of-speech taggare ge intressant information. Om vi till exempel vill hitta felaktig användning av prepositioner kan det vara värt att låta maskininlärningspaketet veta vilket närmast föregående verb är, samt hur långt bort det ligger. Då behöver vi automatannotera texten med information om åtminstone var verben finns. PoS-taggare finns att ladda ned fritt från många olika ställen, till exempel Nada.

Skaffa inlärningspaket

Ladda ned ett maskininlärningspaket som kan hantera den typ av information du tänkt basera feldetektionen på. I den ursprungliga SnålGranska användes fnTBL som är fritt att använda för akademiker. Där skickar man in ett ord per rad, med en kolumn för varje typ av information (ordet, PoS-tagg, genus i PoS-taggen, osv.). Sen anger man att det är fritt fram att använda till exempel hela aktuell rad + genus från föregående och ordet på nästkommande rad för att gissa "OK" / "ORDFÖLJDSFEL" på denna rad. Det finns en uppsjö liknande verktyg man kan använda, välj vilket du vill (till exempel något du använt förr).

Sätt ihop allting

Automatannotera korpusen med övrig information, till exempel PoS. Kör maskininlärningspaketet på detta träningsdata. Nu är det klart och vi har en grammatikgranskare. I nästa labb ska vi utvärdera och se hur bra det blev. Det är förstås också möjligt att växla mellan denna labb och nästa, om man tycker att det gick dåligt och ser ett uppenbart sätt att göra det bättre kan man ju lätt gå tillbaka och ändra.

Redovisa

Labben redovisas genom att man skriver ned (kortfattat) vilken feltyp man letade efter, huvuddragen i hur man genererar sådana fel, vad man gav för information till sitt inlärningssystem och annan information av intresse. Redovisningen kombineras helst med nästa labb, där man utvärderar hur bra systemet fungerade.


Sidansvarig: Jonas Sjöbergh <jsh@nada.kth.se>