Folket har makten över ordet Ett ordboksredigeringssystem för allmänheten PATRIK LILJA Examensarbete Stockholm, Sverige 2011
Folket har makten över ordet Ett ordboksredigeringssystem för allmänheten PATRIK LILJA Examensarbete i datalogi om 30 högskolepoäng vid Programmet för datateknik Kungliga Tekniska Högskolan år 2011 Handledare på CSC var Viggo Kann Examinator var Stefan Arnborg TRITA-CSC-E 2011:071 ISRN-KTH/CSC/E--11/071--SE ISSN-1653-5715 Kungliga tekniska högskolan Skolan för datavetenskap och kommunikation KTH CSC 100 44 Stockholm URL: www.kth.se/csc
Referat Att ta fram ett lexikon är en dyr och tidskrävande process. Det är också en process som aldrig tar slut eftersom naturliga språk hela tiden utvecklas. I denna rapport presenteras ett system som låter anonyma Internetanvändare redigera ett tvåspråkigt lexikon, Folkets lexikon. Lexikonet kommer sedan att kunna laddas ner för fri användning. Detta system är ämnat att vara självgående och saknar helt dedikerade granskare. För att hålla kvalitén på lexikonet hög, låter vi istället slutanvändarna bli granskare av lexikonet. När en ändring inkommer till systemet så delas den upp i mindre delar. Varje del presenteras sedan som en fråga i en omröstning som avgör ifall ändringen ska genomföras eller förkastas. För att omröstningarna ska vara giltiga så bör en användare inte kunna rösta mer än en gång på samma fråga. Risken för detta hålls nere genom att omröstningar slumpas fram ifrån en stor mängd frågor. Vidare gör vi en ansträngning för att automatiskt plocka bort dåliga förslag och i synnerhet potentiellt stötande sådana.
Abstract The People s Dictionary a dictionary editing system for the public Developing a dictionary is an expensive and time consuming task. It s also a never ending process as natural languages are always evolving. In this thesis we present a system that lets anonymous Internet users edit a bilingual dictionary, The People s Dictionary. The dictionary will be made available for download to use freely. The system is meant to be automatic and is completely lacking any dedicated editors. To keep the quality of the dictionary high, we instead let the end users survey each other. When a contribution arrives to the system it is split into smaller parts. Each part is presented as a question in a poll, that decides whether the change should be carried out or be discarded. For the voting procedure to be valid, a user shouldn t be allowed to vote more than one time on the same question. This risk is minimized by having a large set of questions and picking new questions at random from this set. We also make an effort to automatically filter out bad contributions, especially those that may potentially be offensive.
Innehåll 1 Introduktion 1 1.1 Problemdefinition............................. 2 1.2 Mål.................................... 2 1.3 Avgränsningar............................... 2 2 Bakgrund 3 2.1 Lexikografi................................ 3 2.1.1 Ordboksredigeringssystem.................... 3 2.2 Ordklasstaggare.............................. 5 2.2.1 Övervakade och oövervakade metoder............. 5 2.2.2 Stokastiska ordklasstaggare................... 5 2.2.3 Regelbaserade ordklasstaggare................. 6 2.2.4 Okända ord............................ 6 2.2.5 Att utvärdera ordklasstaggare.................. 7 2.3 Spam................................... 7 2.3.1 Stoppordlista........................... 7 2.3.2 Naive Bayes-klassificerare.................... 8 2.3.3 Stödvektormaskiner....................... 8 2.3.4 C4.5................................ 9 3 Det ursprungliga systemet 11 3.1 Ett ord i Folkets lexikon......................... 12 3.2 Tagguppsättning............................. 13 4 Hantering av skräp 14 4.1 Data.................................... 14 4.2 En ansats för att bli av med de vanligaste skräpsvaren........ 14 4.3 Weka.................................... 15 4.4 Egenskaper hos fälten i lexikonet.................... 16 5 Val av ordklasstaggare 17 5.1 Vad krävs av taggaren?......................... 17 5.2 Träningsdata............................... 18 5.3 Taggare som testats........................... 21
5.3.1 Hunpos.............................. 21 5.3.2 Stanford POS tagger....................... 21 5.3.3 TreeTagger............................ 21 5.4 Resultat.................................. 21 5.4.1 Diskussion............................. 22 6 Ett kollaborativt ordboksredigeringssystem 26 6.1 Krav på systemet............................. 26 6.2 Gränssnitt................................. 27 6.3 Att presentera lexikonändringar som frågor.............. 28 6.3.1 Tvetydighet............................ 29 6.3.2 Vilka ord bör stå med?..................... 29 6.3.3 Problematisk indata....................... 30 6.3.4 Konflikter bland ändringar................... 30 6.3.5 Beroende mellan ändringar................... 30 7 Diskussion 31 7.1 Framtida arbete.............................. 31 7.1.1 Vad finns kvar att göra med Folkets lexikon?......... 31 7.1.2 Hur kommer lexikonet att se ut?................ 31 7.1.3 Går det att återanvända samma princip?........... 32 7.1.4 Att stimulera användning.................... 33 7.2 Slutsats.................................. 33 Litteraturförteckning 34 Bilagor 35 A BNC tagset 36 A.1 A List of Ambiguity Tags........................ 39 B Mappning från BNC:s tagguppsättning till Folkets tagguppsättning 40
Tack Jag vill passa på att tacka min handledare, Viggo Kann, utan vars hjälp detta arbete aldrig hade varit möjligt. Jag har mycket svårt att tänka mig en bättre handledare. Vidare vill jag tacka Joachim Hollman som varit delaktig i detta projekt ända från början. Jag vill också tacka Pernilla Rydmark och Stiftelsen för Internetinfrastruktur som finansierat detta projekt. Slutligen vill jag dedikera denna rapport till mina föräldrar som tålmodigt stöttat mig under hela min studietid.
Kapitel 1 Introduktion Folkets lexikon 1 är ett engelsk-svenskt webbaserat lexikon som tanken är att vem som helst ska kunna förbättra. När en ny post har föreslagits så får andra användare granska den genom att rösta på dess kvalité. När tillräckligt många har godkänt ändringen så kan den föras in i lexikonet. Röstningsmodellen påminner om den som används i Folkets synonymlexikon 2 [13]. Systemet är utvecklat av Viggo Kann och Joachim Hollman på Algoritmica AB och stöds finansiellt av Stiftelsen för Internetinfrastruktur. KTH stöder också projektet genom att tillhandahålla servern som driver systemet. Själva lexikonet bygger på Språkrådets lexikon Lexin och är även tänkt att ersätta detta lexikon. Möjligheten att översätta mellan svenska och engelska i Lexin togs bort i november 2010. Anledningen till detta är att man valt att prioritera minoritetsspråk då det redan finns många lexikon mellan svenska och engelska fritt tillgängliga. Systemet bakom Folkets lexikon är under utveckling men tanken är att detta examensarbete ska vara den sista biten. Lexikonet är uppdelat i en engelsk-svensk och en svensk-engelsk del, där den engelsk-svenska innehåller mer detaljerad information på engelska och den svensk-engelska tvärtom. Den engelsk-svenska delen har sedan 2009 kunnat laddas ner för fri användning. Tanken är att det så småningom även ska kunna gå att ladda ner den svensk-engelska delen. Innan detta arbete påbörjades fanns det inget gränssnitt för att föreslå nya översättningar till Folkets lexikon och inte heller för att redigera befintliga sådana. Däremot kunde man rösta på översättningsförslag som framtagits med automatiska metoder. Man kunde även föreslå bättre översättningar till befintliga förslag. Det är just denna redigeringsmöjlighet som är kärnan i detta examensarbete. 1 http://folkets-lexikon.csc.kth.se 2 http://folkets-lexikon.csc.kth.se/synlex.html 1
1.1 Problemdefinition Då utvecklingen av Folkets lexikon drivs av vanliga Internetanvändare så ställer det höga krav på hanteringen av ändringar. Gränssnittet måste vara tillräckligt lättanvänt för att nya användare ska ta sig tid att lära sig det. Samtidigt har varje ord en mängd attribut som exempelvis översättningar, ordklass, böjningar och exempel som gör gränssnittet komplicerat. Det är önskvärt att så många som möjligt av dessa attribut görs redigerbara utan att användarvänligheten blir lidande. För att underlätta för användarna är det önskvärt om det vid inmatning av nya ord automatiskt ges förslag på ordklass och böjningar. Det faktum att vem som helst kan föreslå ändringar innebär också att lexikonet blir sårbart för folk som vill förstöra. Detta problem måste hanteras. Så som gränssnittet såg ut innan detta arbete så kunde man endast bedöma regelrätta översättningsförslag. Om man ska tillåta användare att föra in fullständiga översättningar, med ordklass, böjningar och så vidare, så måste även dessa kunna bedömas. Då majoriteten av användare kommer att vara flyktiga besökare, som är där för att slå upp ett ord, så är det viktigt att dessa frågor ställs på ett enkelt sätt så att så många som möjligt väljer att rösta. Att det är många som röstar är en av hörnstenarna för att röstningsmodellen ska fungera. 1.2 Mål Målet detta examensarbete har varit att utveckla Folkets lexikon så att användare kan föreslå nya ord och redigera befintliga sådana. I detta ingick att: Ta fram ett användargränssnitt för att föreslå och ändra ord till Folkets lexikon Föreslå och implementera en metod för att sålla bort skräpförslag Välja ut en lämplig ordklasstaggare för ändamålet Ge användaren förslag på ordklass och, om möjligt, böjningar när denne föreslår ett nytt ord Dela upp ett förslag till en lexikonändring i mindre delar som enkelt kan betygsättas 1.3 Avgränsningar Detta arbete resulterar i ett system som bland annat innehåller ett grafiskt användargränssnitt. Dock läggs ingen vikt vid hur detta gränssnitt bör läggas upp för att det ska bli så användarvänligt som möjligt. 2
Kapitel 2 Bakgrund Detta kapitel presenterar den teoretiska bakgrunden för de metoder som använts i detta arbete. 2.1 Lexikografi Lexikografi är läran om ordböcker och brukar delas in i två delar, praktisk och teoretisk lexikografi. Den praktiska lexikografin behandlar framställandet av ordböcker medan den teoretiska delen behandlar ordböcker på ett teoretiskt plan, både vad avser utformning av ordböcker men även vilka krav som ställs av användare på ordböcker. 2.1.1 Ordboksredigeringssystem Ett ordboksredigeringssystem är ett system som används för att framställa ordböcker. Med hjälp av det kan många repetitiva moment förenklas eller helt automatiseras [16]. Detta gör också att det blir lättare att hålla lexikonet enhetligt. Betrakta exempelvis följande utdrag ur onlineversionen av Svenska Akademiens ordlista 1 : 1 stilla adv. o. adj. oböjl. orörlig(t); lugn(t) och tyst; sitta s.; en s. önskan 2 stilla v. -de lugna, dämpa; s. sig Om detta hade skrivits i en vanlig ordbehandlare så hade lexikografen behövt veta vilka förkortningar som ska användas för olika ordklasser. Dessutom måste han veta i vilken ordning posten ska läggas upp, i detta fall uppslagsord-ordklass-böjningarbeskrivning-exempel-idiom. 1 http://www.svenskaakademien.se/web/ordlista.aspx 3
Figur 2.1: Skärmdump ifrån det fria ordboksredigeringssystemet Mātāpuna. Bilden har klippts i nederkant för att få plats. Några av fälten syns därför inte. 4
Figur 2.1, som visar en skärmdump ur ordboksredigeringssystemet Mātāpuna, illustrerar hur ett ordboksredigeringssystem kan lösa sådana problem. Utmaningen ligger i att designa gränssnittet så att det det blir effektivt att jobba i men även enkelt att lära sig. 2.2 Ordklasstaggare Att ordklasstagga en mening innebär att man för varje ord i meningen tilldelar en ordklasstagg. I vanliga fall taggar man även skiljetecken. Det som gör problemet icke-trivialt är det faktum att många ord kan tillhöra flera ordklasser. Ta till exempel ordet såg som kan vara antingen ett substantiv eller ett verb i preteritum 2 : Han kapade brädan med en såg. Jag såg den nya Bond-filmen igår. Här framgår det klart av sammanhanget vilken ordklass som är den korrekta. Ju finkornigare ordklasstaggar man använder desto vanligare blir det att det finns flera möjliga taggar för ett ord. En del taggare sätter flera taggar för ett ord om systemet inte kan avgöra vilken som är den korrekta taggen. 2.2.1 Övervakade och oövervakade metoder Det går att dela in ordklasstaggare i två typer, övervakade och oövervakade. En övervakad metod använder sig av en färdigtaggad korpus 3 med tillhörande uppsättning taggar för att ta fram en taggare medan en oövervakad metod automatiskt tar fram en uppsättning taggar utifrån en otaggad korpus. Oövervakade metoder är framförallt användbara då det inte finns någon färdiguppmärkt korpus eller ordlista med möjliga taggar att tillgå. I denna rapport intresserar vi oss bara för övervakade ordklasstaggare. 2.2.2 Stokastiska ordklasstaggare Stokastiska ordklasstaggare går generellt sett ut på att för varje ord i en mening välja den mest sannolika taggen för det ordet. I den naiva varianten räknar man ut vilken tagg som det är vanligast att varje ord har. Detta görs exempelvis med hjälp av en handtaggad korpus. Sedan väljer man helt enkelt den vanligaste taggen för varje ord. Mer avancerade taggare tittar även på i vilken omgivning ordet står. En populär metod, som bland annat används, i en utbyggd variant för att tagga ord i KTH:s grammatikgranskningsprogram Granska[4], är att använda sig av dolda markovmodeller, så kallade HMM 4. Dolda markovmodeller har precis som vanliga markovmodeller ett antal tillstånd och övergångssannolikheter. Skillnaden 2 Tidigare användes termen imperfekt för preteritum i svenska. 3 En korpus är en stor uppsättning text. 4 Engelska: Hidden Markov Model 5
är att i en dold markovmodell kan vi inte se vilket tillstånd vi befinner oss, däremot kan vi se observationer som beror på i vilket tillstånd vi befinner oss. I fallet med ordklasstaggning är tillstånden, som är dolda, ordklasstaggarna och observationerna är själva orden. Problemet är att utifrån observationerna räkna ut den mest sannolika sekvensen av tillstånd. Vi vill välja taggar så att följande formel maximeras för varje ord: P (ord tagg) P (tagg föregående n taggar) (2.1) Se [12] för en motivering av denna formel. Vi är dock intresserade av taggföljden för hela meningen och inte bara för varje enskilt ord. Om vi låter n = 2, vilket är vanligt i praktiken, innebär det att 2.1 expanderas till följande produkt: n n P (t 1 )P (t 2 t 1 ) P (t i t i 1 t i 2 ) P (w i t i ) (2.2) i=3 Vi ska alltså välja den taggföljd T = {t 1,t 2,...,t n } som maximerar denna formel för ordföljden W = {w 1,w 2,...,w n }. Det kan vi göra effektivt med hjälp av Viterbis algoritm [9]. De enskilda sannolikheterna approximerar vi genom frekvensräkning i en korpus. 2.2.3 Regelbaserade ordklasstaggare Regelbaserade ordklasstaggare fungerar generellt så att de först taggar en mening genom att slå upp alla ordklasser varje ord kan ha i en ordbok. Sedan används en uppsättning regler för att avgöra vilken tagg som är den korrekta, i detta sammanhang, för de ord som kan tillhöra flera ordklasser. Ett exempel på en sådan regel skulle kunna vara: Regel 1: Om ordet kan vara antingen ett substantiv eller ett verb och föregående ord är ett pronomen som ej är i genitivform, då är ordet ett verb. Det är vanligt att stokastiska metoder även används i regelbaserade ordklasstaggare. Till exempel så använder Brill [2], i sin klassiska taggare, en korpus för att automatiskt ta fram regler. 2.2.4 Okända ord Ett problem uppstår då ordklasstaggaren stöter på ett helt okänt ord. Det vill säga ett ord som den inte sett förut och som inte finns med i träningsdatat. Hur bör ett sådant ord taggas? Den enklaste ansatsen är att anta att ordet kan tillhöra alla öppna ordklasser 5 med lika stor sannolikhet och använda denna statistik till att tagga ordet som 5 Ordklasser som prepositioner, pronomen och artiklar är slutna och innehåller ett finit antal ord medan ordklasser som substantiv, verb och adjektiv är öppna och hela tiden utökas med nya ord. 6 i=3
vilket ord som helst. En bättre metod är att titta på ord som förekommer en gång i träningsdatat och använda denna statistik som en approximering för ord som inte förekommer alls. En annan framgångsrik metod är att titta på ordens morfologi, det vill säga deras utseende. Framförallt av intresse är deras ändelse och huruvida de är kapitaliserade eller ej. Till exempel så är ett svenskt ord som slutar med -ning förmodligen ett substantiv. 2.2.5 Att utvärdera ordklasstaggare En nyckelprincip när man jämför ordklasstaggare är att behandla varje taggare så lika som möjligt. Det är därför naturligt att för varje taggare använda samma uppsättning taggar, tokenisering, träningsdata och testdata. Testdatat ska vara skilt från träningsdatat för att undvika överanpassning. Det är även lämpligt att testdatat har taggats av människor, förslagsvis av lingvister, så att man är någorlunda säker på att den är helt korrekt. Att jämföra med människor på detta vis brukar kallas att jämföra med the Gold Standard. Om taggaren endast tillåter en tagg per ord så är det naturliga måttet att mäta dess: antal korrekt taggade ord korrekthet = (2.3) antal ord När man mäter korrekthet så kan det vara intressant att ha en nedre och övre gräns för vad som är acceptabelt och vad som är uppnåeligt. Som nedre gräns kan man ta den triviala metoden att tagga varje ord med dess vanligaste tagg. Som övre gräns tittar man på hur ofta människor kan enas om en taggning. 2.3 Spam Alla som regelbundet använder e-post har förmodligen stött på skräppost någon gång. Detta riskerar också Folkets lexikon att göra. För epost finns en mängd tekniker att motverka skräp. Många av dessa är dock endast applicerbara på epost, eftersom de utnyttjar specifika detaljer i protokollet för epostkommunikation. Här presenterar vi ett antal generella metoder för textklassificering som går att applicera på Folkets lexikon. 2.3.1 Stoppordlista En enkel lösning på problemet är att använda en stoppordlista där man listar ord som man tror att misstänkt spam kommer att innehålla. Ett problem med denna metod är att den är oförlåtande mot legitimt användning av sådana ord. Ett annat problem är att det är svårt att skriva en fullständig sådan ordlista som fångar allt skräp. 7
2.3.2 Naive Bayes-klassificerare En naive Bayes-klassificerare använder Bayes teorem för att klassificera meddelanden. Låt x = (x 1, x 2,..., x n ) vara en vektor med egenskaper X 1, X 2,... X n för ett dokument. Dessa egenskaper kan i princip vara vad som helst men enklast är kanske att tänka sig dem som de ord som dokumentet innehåller. Låt vidare C = {c 1, c 1,..., c m } vara de klasser som dokumentet kan tillhöra. Vi använder Bayes teorem för att uttrycka sannolikheten för att meddelandet tillhör klass c k : P (c k x ) = P (c k) P ( x c k ) P ( x ) (2.4) Eftersom P ( x c k ) och P ( x ) är i det närmaste omöjliga att estimera så gör vi det naiva, därav namnet, antagandet att egenskaperna X 1, X 2,... X n är oberoende händelser. 2.4 kan då uttryckas som: n P (c k ) P (x i c k ) P (c k i=1 x ) n P (x i ) i=1 (2.5) Observera att nämnaren inte beror av c k utan är konstant för ett dokument. Detta medför att: argmax k P (c k x ) = argmax k n P (c k ) P (x i c k ) (2.6) i=1 där P (x i c k ) kan estimeras genom frekvensräkning i träningsdatat. Vi kan alltså göra en klassificering genom att välja den klass för vilken täljaren i 2.5 har sitt maximala värde. 2.3.3 Stödvektormaskiner En metod som visat sig fungera väldigt bra för textklassificering och spamklassificering är stödvektormaskiner, se exempelvis [19] och [7]. Hädanefter hänvisar vi till stödvektormaskiner med den vedertagna förkortningen SVM, från dess engelska namn Support Vector Machines. Låt oss antaga att vi har ett antal dokument klassificerade i två klasser. Varje dokument har n stycken egenskaper. Om vi tänker oss dokumentegenskaperna som punkter i rymden, vad SVM då gör är att hitta ett hyperplan 6 som delar denna punktrymd mellan de två klasserna på ett optimalt sätt. Med optimalt här så menar vi det hyperplan som ligger mitt emellan de två parallella hyperplan som båda separerar punktmängderna och som ligger på maximalt avstånd ifrån varandra (se figur 2.2 för ett exempel). 6 ett plan av dimension n 1 8
Maximal marginal Optimalt hyperplan Figur 2.2: Ett exempel på hur SVM gör en uppdelning mellan två punktmängder. När ett hyperplan som delar testdatat har hittats så kan nya dokument klassificeras genom att undersöka vilken sida av hyperplanet som dokumentet ligger på. Det går att anpassa metoden, se exempelvis [5], så att den även kan hantera fall då punktmängderna ej är linjärt separabla. Observera att en SVM-klassificerare endast tillåter klassificering av två klasser. Ifall man vill generalisera metoden till flera klasser kan man exempelvis göra parvisa klassificeringar tills man uteslutit alla klasser utom en. Observera också att ifall man behöver uppdatera en befintlig klassificerare med ny träningsdata så måste man börja om från början och hitta ett nytt hyperplan. 2.3.4 C4.5 C4.5 bygger upp beslutsträd utifrån testdatat som sedan används för att klassificera nya dokument [14]. Tanken är att försöka minimera trädets storlek, därför använder man mängden vunnen information (se nedan) som kriterium när man skapar förgreningar i trädet. För att mäta mängden information använder man måttet entropi som beskrivs nedan. Algoritmen i pseudokod är: 9
Algorithm 1: CreateTree Data: mängd S av klassificerade dokument med egenskaper x 1, x 2,..., x n Result: Ett beslutsträd baserat på C4.5 begin 1. Om basfall returnera löv 2. Hitta egenskap x med högst informationsvinstkvot 3. Skapa beslutsnod i trädet baserad på egenskap x. 4. För varje delmängd av S som fås genom att splittra med avseende på x, anropa CreateTree Ett basfall har vi då alla testfall som tillhör S tillhör samma kategori, alternativt att S är tom. Informationsvinsten fås genom att beräkna entropin för S samt för erhållna delmängder. Antag att egenskap X i delar S i delmängderna S 1, S 2,..., S r, då gäller: där, Informationsvinst(S, X i ) = Entropi(S) Entropi(S X i ) r S i = Entropi(S) S Entropi(S i) (2.7) Entropi(S) = c {c 1,c 2,...,c m} Antal(S, c) S i=1 ( ) Antal(S, c) log S (2.8) där {c 1,c 2,...,c m } är de klasser som dokumentet kan tillhöra. För att inte favorisera sådana attribut som delar trädet i många delträd så delar vi informationsvinsten med entropin för partitionen av trädet och får informationsvinstkvoten: Entropi(Partition(S)) = Informationsvinstkvot(S, A) = r i=1 ( ) S i S log Si S Informationsvinst(S, A) Entropi(Partition(S)) (2.9) (2.10) 10
Kapitel 3 Det ursprungliga systemet Innan detta arbete påbörjades så fanns redan uppslagningsdelen av lexikonet på plats. Denna har inte ändrats. Ett exempel på hur en uppslagning ser ut finns i figur 3.1. Gränssnittet är utvecklat med Google Web Toolkit 1, vilket innebär att det är Javascript-baserat och att de flesta funktioner reagerar direkt utan att sidan behöver laddas om. Gränssnittet är tvåspråkigt så att det ska kunna användas både av personer som har svenska som bästa språk och personer som föredrar engelska. Utöver uppslagningsgränssnittet fanns dessutom en stor uppsättning översättningsförslag generade. Att det finns många frågor är viktigt så att risken för att samma person får svara på samma fråga mer än en gång är liten. Frågorna ställs till användaren som får bedöma hur bra förslaget är utifrån en uppsättning fasta svarsalternativ, se figur 3.2 för ett exempel. Svarsalternativen för att bedöma ett förslags kvalité är riktigt dålig, ganska dålig, ganska bra, riktigt bra. Ett förslag är godkänt när det har fått tillräckligt många 1 Google Web Toolkit gör det möjligt att utveckla webbsidor i Java och kompilera dem till Javascript. Läs mer på adressen http://code.google.com/webtoolkit/ Figur 3.1: Ett exempel på uppslagning av ett ord 11
Figur 3.2: Ett exempel på en förbättringsfråga i det ursprungliga systemet. ganska bra- eller riktigt bra-röster. Utöver dessa finns dessutom alternativen vet inte och olämpligt/skräp. Vet interöster ignoreras och gör att användaren kan underlåta att rösta när denne är osäker. Ett förslag är underkänt när det har fått tillräckligt många ganska dåligt-, riktigt dåligt- eller olämpligt/skräp-röster. Dessutom finns möjligheten att ange ett eget förslag i fritext om man tror sig veta en bättre översättning än den föreslagna. Notera, i figur 3.2, att det inte är uttryckt i klartext vilket språk detta förslag förväntas vara på. Detta måste istället härledas ifrån frågan. Detta har inneburit att det kommit in ganska många förslag som är på fel språk. 3.1 Ett ord i Folkets lexikon Varje ord i lexikonet har en mängd fält. Somliga av dessa illustreras av figur 3.1. Andra syns inte eftersom ordet stol, som exemplet illustrerar, inte har värden för alla fält. Ett ord i Folkets lexikon består av följande fält: Rubrik (själva ordet) Ordklass Översättningar Böjningar 2 Definition (kan ha översättning) Förklaring (kan ha översättning) Exempel (kan ha översättning) Idiom (kan ha översättning) Sammansättningar (kan ha översättning) Variantformer Uttal (fonetisk skrift) Länkar Synonymer Användning Relaterade ord De flesta av dessa delar kan dessutom ha ytterligare metadata såsom kommentarer, ursprung, datum och så vidare. 2 Böjningar kan dessutom delas upp i böjningsmönster för de ord där det är relevant. Ett exempel på ett sådant ord är dålig som har två böjningsmönster; dålig, sämre, sämst och dålig, dåligare, dåligast. 12
3.2 Tagguppsättning Uppsättningen taggar som används för ordklasstaggning i Folkets lexikon listas i tabell 3.1. Utöver dessa finns det även grammatikkommentarer som kan ge mer detaljerad grammatisk information. Tabell 3.1: Tagguppsättning i Folkets lexikon Tagg ab abbrev article compound ha hs hp ie in jj kn nn pc pm pn pp prefix ps rg ro sn suffix Ordklass adverb förkortning artikel sammansättning frågande/relativt adverb frågande/relativ posessiv frågande/relativt pronomen infinitivmärke interjektion adjektiv konjunktion substantiv particip egennamn pronomen preposition förled possessiv grundtal ordningstal subjunktion suffix verb 13
Kapitel 4 Hantering av skräp Ingenting kommer att föras in i lexikonet innan det har godkänts av tillräckligt många användare. Därför behöver inte vår skräphantering vara felfri. Däremot finns det en risk att förbättringsfrågorna inte kommer att tas på allvar om de håller en alltför låg kvalité. Vidare så vill vi sålla bort eventuella stötande förslag som riskerar att sänka tjänstens trovärdighet. 4.1 Data Ett problem var att det inte fanns något färdiguppmärkt träningsdata. Att märka upp de cirka 36 000 erhållna förbättringsförslagen för hand var knappast aktuellt. Vad gjorde saken värre är att texten på knappen som användaren kan använda för att märka upp skräp är olämpligt/skräp och det är ganska vanligt att denna används bara för att förslaget är riktigt dåligt, snarare än att det är skräp. En säkrare text att skriva på den knappen hade kunnat vara stötande, vilket har mindre risk att misstolkas. Den texten skulle dock ändra knappens innebörd och den skulle inte längre användas till alla skräpsvar. På grund av dessa anledningar bedömdes det som meningslöst att träna upp en klassificerare med uppgift att sålla bort skräp. 4.2 En ansats för att bli av med de vanligaste skräpsvaren Vi gör dock ändå en ansats för att bli av med den allra vanligaste typen av skräp. Vi låter ett ordfilter plocka bort alla förslag som innehåller ord ifrån en stopplista, detta för att få bort vanliga skräpförslag så som svordomar och könsord. Vidare tränar vi upp en klassificerare för att kunna skilja på språk och ickespråk. Detta för att kunna filtrera bort förslag som består av att någon bara tryckt på måfå på tangentbordet men också förslag som består av att någon förlängt ett befintligt ord (fan ffffffaaaaaannnnn). Som träningsdata för detta använder vi oss av Folkets lexikon. Icke-språket genererar vi, dels ifrån slumpdata och dels 14
genom att förlänga orden från vårt ordfilter. Som egenskaper till denna klassificerare använder vi detta: Andel tecken som inte är bokstäver Andel mellanslag Andel upprepande bokstäver Stränglängd Bokstavsfrekvens Bigramsfrekvens Prefix av längd fyra Suffix av längd fyra 4.3 Weka För att utföra klassificeringen använder vi oss av programmet Weka 1 [11]. Weka tillhandahåller implementationer av flera klassificeringsalgoritmer, däribland alla som presenterats under 2.3. För detta ändamål använder vi oss av en SVM-klassificerare. Den presterar marginellt bättre än C4.5 vilket illustreras av tabell 4.1. C4.5 har visserligen fördelen att den kan ge ett mått på hur säker klassificeringen är, vilket inte Wekas implementation av SVM kan göra. C4.5 är dessutom den snabbaste algoritmen, se tabell 4.2. Dock är C4.5 så långsam att träna upp, när träningsdatat är stort, att den blir opraktisk att använda, ifall vi skulle vilja träna om klassificeraren. Att Naive-Bayes presterade så mycket sämre beror gissningsvis på egenskaperna vi tränar den på är alltför beroende av varandra. Tabell 4.1: Resultat språkklassificering. Träningsstorlek 30 000, teststorlek 30 000. Algoritm Språk missklassificerat (%) Icke-språk missklassificerat (%) NaiveBayes 2,0 2,0 SVM 0,7 0,4 C4.5 1,0 0,8 Tabell 4.2: Prestanda språkklassificering. Träningsstorlek 30 000, teststorlek 30 000. Algoritm Meddelanden klassificerade/sekund NaiveBayes 20 SVM 188 C4.5 262 1 http://www.cs.waikato.ac.nz/ml/weka/ 15
4.4 Egenskaper hos fälten i lexikonet Istället för en spamklassificerare försöker vi att finna ett mönster i hur varje värde ser ut i lexikonet för att på så sätt kunna sålla bort dåliga förslag. Instinktivt så tror man kanske att de flesta fält i ett lexikon ser ungefär likadana ut för varje ord. Åtminstone om man avser sådana saker som stränglängd, antal mellanslag, antal specialtecken och så vidare. Detta visade sig också vara sant, i Folkets lexikon, för de flesta ord, men inte för alla. En del ord har till exempel ingen direkt översättning utan istället står en förklaring av ordet på det andra språket som översättning: Exempel bospara : save (money in the bank) towards a house (flat, etc.) of one s own Detta gör det svårt att sätta handfasta begränsningar för många fält i lexikonet. En sak som däremot håller för så gott som alla ord är att rubriken (själva ordet) inte innehåller många mellanslag, om den gjorde det vore det ju inte ett ord utan flera. De enstaka poster som finns i lexikonet med fler än ett ord i rubriken är framförallt olika skolor och myndighetsnamn, till exempel Royal Academy of Fine Arts (Konstakademien) och National Agency for Higher Education (Verket för högskoleservice). Att stoppa införandet av fler sådana ord borde inte innebära någon större begränsning. Vad vi däremot kan säga med säkerhet är att exempel, idiom och sammansättningar alltid måste innehålla antingen själva ordet eller någon av dess böjningar. Detta följer av definitionen av dessa fält. Språkklassificeraren vi nyss konstruerade kan dessutom användas för att kontrollera att enskilda värden är på det språk som vi förväntar oss att de ska vara på. Dock är det vanskligt att använda den på enskilda ord, exempelvis på synonymer. Dessa kan ju i vissa fall se likadana ut både på svenska och engelska (exempelvis aluminium) och klassificeraren presterar således inte så bra på dessa. 16
Kapitel 5 Val av ordklasstaggare Varje ordpost i Folkets lexikon kan ha en ordklasstagg. När en användare föreslår ett nytt ord så kan han också kunna välja vilken ordklass ordet tillhör. Det är dock rimligt att tro att många användare inte har sin skolgrammatik färskt i minne och därför kan ha svårt att välja rätt ordklass. Därför låter vi en automatisk ordklasstaggare hjälpa användaren med detta val. För ordklasstaggning av svenska ord använder vi oss av Granska tagger [4] som är en del av KTH:s grammatikgranskningsprojekt Granska [6]. Detta faller sig naturligt eftersom taggaren är utvecklad på KTH och dessutom har en dedikerad server som kan användas för detta ändamål. För engelsk ordklasstaggning finns det däremot inget självklart val utan det ingick i arbetet att välja ut en lämplig taggare. Detta avsnitt behandlar detta val. 5.1 Vad krävs av taggaren? När en användare föreslår ett nytt ord och vill ha hjälp med att välja ordklass, så vet vi inte vilket sammanhang ordet brukar uppträda i. I vissa fall skulle man visserligen kunna använda sig av informationen som finns under exempel och idiom. Detta är dock inte helt okomplicerat. Det förutsätter att användaren fyller i dessa fält innan han ber om en ordklasstaggning. Vidare blir det än mer komplicerat ifall användaren använder sig av en annan böjning av ordet än den som står som ordets rubrik. På grund av detta så väljer vi att inte leta efter taggare som är bra på att tagga ord i meningar, utan att istället leta efter taggare som är bra på att tagga ord utan kontext. Om man taggar ett ord utan kontext som taggaren känner till så kommer det ordet med stor sannolikhet att få den tagg som det oftast har i träningsdatat, oberoende av vilken taggare man använder. Därför är vi mest intresserade av hur bra taggaren presterar på helt okända ord. Vi väljer därför att undersöka hur bra olika taggare presterar på okända ord utan kontext. 17
5.2 Träningsdata Som träningsdata använder vi oss av British National Corpus (BNC) [3], som består av 100 miljoner ord. 90 % av korpusen består av skriven text medan resten består av talat språk. För denna utvärdering använder vi oss endast av de delar som består av skrivet språk. Se appendix A för en lista över de taggar som används i BNC. Det finns, i BNC, cirka 22 000 ord som har taggats mellan 10 och 50 gånger med samma tagg alla gånger och dessutom tillhör en öppen ordklass. Av dessa väljer vi ut 10 000 ord och sedan plockar vi bort alla meningar ur träningsdatat som innehåller något av dessa ord. Dessa ord utgör vårt testdata. Tanken bakom detta är att det är säkrare än den klassiska ansatsen, att titta på de ord som uppträder i testdatat men inte i träningsdatat. Eftersom vi inte tittar på kontext så kan ju dessa ord eventuellt ha andra taggar i andra sammanhang och det är därför inte helt säkert att det finns något rätt svar för dessa ord. De ord som vi har valt däremot, verkar alltid ha samma tagg. Det går därför att säga huruvida taggaren svarar korrekt eller ej oavsett vilken kontext dessa ord står i. Eftersom dessa ord, som alltid har samma tagg, sällan är verb och ovanligt ofta är grundtal eller främmande ord (se tabell 5.1 och tabell 5.2) så viktar vi urvalet för att försöka jämna ut denna olikhet. Det finns dock alldeles för få verb som alltid har samma tagg för att det ska gå att välja 10 000 ord med samma distribution av taggar som i hela korpusen. Därför väljer vi även en mindre testmängd om 5000 ord där vi inte särskiljer mellan olika former av verb och inte heller mellan olika typer av substantiv, annat än egennamn. Denna testmängd har samma tagguppsättning som Folkets lexikon plus taggen UNC för okända ord och fördelning av taggar är densamma som i BNC. Se appendix B för en beskrivning av hur BNC:s taggar konverteras till Folkets lexikons taggar. För att skilja testmängderna åt så väljer vi att kalla den testmängd med samma taggar som BNC för testmängd 1. Testmängden med samma taggar som i Folkets lexikon kallar vi för testmängd 2. Fördelningen av taggar för dessa testmängder finns i tabell 5.3 och tabell 5.4. För att även göra det möjligt för ordklasstaggaren att utnyttja huruvida orden är kapitaliserade eller ej så valdes för varje ord den kapitalisering som var vanligast för just det ordet. Om två olika kapitaliseringar var lika vanliga så valdes den som inleddes med liten bokstav. 18
Tabell 5.1: Taggfördelning över öppna ordklasser i hela BNC tagg taggfrekvens procent AJ0 5892446 13,6 AJC 184596 0,4 AJS 87314 0,2 AV0 4054598 9,3 CRD 1637191 3,8 ITJ 105927 0,2 NN0 1044179 2,4 NN1 12693550 29,2 NN2 4889206 11,3 NP0 4002042 9,2 ORD 309660 0,7 UNC 185974 0,4 VVB 944946 2,2 VVD 1660722 3,8 VVG 1128087 2,6 VVI 2141860 4,9 VVN 1752066 4,0 VVZ 627652 1,4 ZZ0 114125 0,3 Tabell 5.2: Taggfördelning i BNC för ord som alltid har samma tagg tagg ordfrekvens procent AJ0 3274 15,0 AJC 83 0,4 AJS 107 0,5 AV0 1069 4,9 CRD 3120 14,3 ITJ 24 0,1 NN0 1377 6,3 NN1 3110 14,3 NN2 3286 15,1 NP0 4251 19,5 ORD 88 0,4 UNC 1549 7,1 VVB 14 0,1 VVD 14 0,1 VVG 49 0,2 VVI 23 0,1 VVN 13 0,1 VVZ 213 1,0 ZZ0 93 0,4 19
Tabell 5.3: Taggfördelning för testmängd 1, samma tagguppsättning som i BNC tagg ordfrekvens procent AJ0 1805 18,1 AJC 53 0,5 AJS 65 0,7 AV0 567 5,7 CRD 434 4,3 ITJ 9 0,1 NN0 741 7,4 NN1 1722 17,2 NN2 1788 17,9 NP0 2365 23,6 ORD 46 0,5 UNC 32 0,3 VVB 14 0,1 VVD 14 0,1 VVG 49 0,5 VVI 23 0,2 VVN 13 0,1 VVZ 213 2,1 ZZ0 47 0,5 Tabell 5.4: Taggfördelning för testmängd 2, samma tagguppsättning som i Folkets lexikon, samma fördelning som BNC tagg ordfrekvens procent AJ 709 14,2 AV 466 9,3 CR 189 3,8 IT 12 0,2 NN 2144 42,9 NP 462 9,2 OR 35 0,7 UN 21 0,4 VV 949 19,0 ZZ 13 0,3 20
5.3 Taggare som testats 5.3.1 Hunpos Hunpos 1 [10] är en HMM-taggare skapad av open source-rörelsen. Den är en omimplementation av Torsten Brants TnT-taggare [1] vars källkod är sluten. Hunpos är skriven i OCaml och har ett terminalbaserat gränssnitt. Den rapporterade prestandan för okända ord på engelska är 86,90% [10]. 5.3.2 Stanford POS tagger Stanford POS tagger är en hybridtaggare som använder både regler och stokastiska metoder [18], [17]. När man utvecklade den så gjorde man en extra ansats för att få den att prestera bra på okända ord. Man rapporterar att den klarar att tagga 89,04% av okända ord på engelska korrekt [17]. Detta gör den på förhand till favorit bland taggarna. Dessutom är den skriven i Java vilket innebär att den skulle vara lätt att integrera i Folkets lexikon. 5.3.3 TreeTagger Treetagger använder en metod liknande C4.5 (se 2.3.4) och skapar beslutsträd för att avgöra hur taggning av ord går till [15]. TreeTagger är den enda testade taggaren vars källkod är sluten. Den är istället släppt under en akademisk licens som tillåter användning för akademiska ändamål. Gränssnittet är terminalbaserat men det finns wrappers skrivna i Python, Perl och, av intresse för oss, även i Java. Ingen rapporterad prestanda för okända ord är på förhand given. 5.4 Resultat Taggarna tränades och testades på träningsdatan och testmängderna som beskrivits. Resultaten visas i tabell 5.5 och tabell 5.6. Tabell 5.5: Korrekthet i procent för taggare tränade på BNC. Stanfords taggare var för tidskrävande för att träna på hela BNC. Se istället tabell 5.6. Taggare Testmängd 1 Tesmängd 2 Hunpos 81 76 TreeTagger 73 64 Stanford POS tagger?? 1 http://code.google.com/p/hunpos/ 21
Tabell 5.6: Korrekthet i procent för taggare tränade på en tiondel av BNC eller cirka 10 miljoner ord. Taggare Testmängd 1 Testmängd 2 Hunpos 83 77 TreeTagger 78 68 Stanford POS tagger 87 85 Tabell 5.7: Antal ord taggade per sekund för respektive taggare. Tid för initiering av taggaren och eventuell uppstartning av JVM borträknade. Taggare ord/sekund Hunpos 40 000 TreeTagger 160 000 Stanford POS tagger 1100 5.4.1 Diskussion Träning av en taggare innebär oftast en möjlighet att ställa in flera parametrar. För Hunpos och för TreeTagger var alternativen så få att en mer eller mindre uttömmande sökning kunde göras. För Stanford däremot var alternativen så många att detta inte var möjligt. Vad gjorde saken värre var att många av alternativen är odokumenterade vilket innebär att man får gissa sig fram. Ovanpå detta så var dessutom Stanfords taggare den mest tidskrävande att träna. Den var så tidskrävande att det inte gick att träna den på hela BNC, därav de uteblivna värdena i tabell 5.5. Det finns alltså en möjlighet att prestandan för Stanfords taggare går att höja ytterligare med bättre inställningar. Stanfords taggare presterar trots detta klart bäst på båda testmängderna, se tabell 5.6. I synnerhet på testmängd 2 som förmodligen är mest intressant är den överlägsen. Den är dock betydligt långsammare än de andra två taggarna, se tabell 5.7. Det är dock knappast troligt att den kommer att vara utsatt för så hög belastning att 1100 ord per sekund inte skulle räcka till. Anledningen till att TreeTagger presterar så mycket sämre än de andra två har troligtvis att göra med att den inte tillåter inställning av hur få gånger ett ord måste förekomma för att betraktas som sällsynt. Detta var nämligen en av de parametrar som gjorde störst skillnad för prestandan för de andra två taggarna. Detta förklarar också varför den presterar bättre på en mindre korpus (se tabell 5.6), där ju fler ord förekommer få gånger. Varför Hunpos presterar bättre efter träning på en mindre korpus än på hela BNC är dock svårare att svara på. Undersöker vi förväxlingsmatriserna för taggare tränade på respektive korpus (se tabell 5.8 och tabell 5.9) så finner vi att den största skillnaden utgörs av prestandan för ord med taggen NN0 (substantiv med neutralt 22
numerus). Tittar man på hur dessa ord ser ut i träningsdatat så finner man att en majoritet av dem är på formen siffra+enhet, till exempel 10kg eller 42. Man förstår ganska enkelt varför dessa förväxlas med räknetal och okända ord. Att de inte gör det lika ofta när taggaren tränats på den mindre korpusen, kan vi gissa att det beror på slumpen. På grund av att den presterar klart bäst på okända ord och dessutom har ett Java-interface så använder vi oss av Stanfords taggare i Folkets lexikon. 23
Tabell 5.8: Förväxlingsmatris Hunpos, testmängd 1 tränat på hela BNC. Cellen på rad i, kolumn j visar andelen gånger, i procent, som ett ord borde fått tagg i men fick tagg j. Kolumner med endast nollor har utelämnats. # fel AJ0 AV0 CRD NN0 NN1 NN2 NP0 UNC VVB VVD VVG VVN slutna AJ0 1805 21-2 0 0 4 0 3 1 0 1 2 6 0 AJC 53 79 8 8 0 0 57 0 2 4 0 0 2 0 0 AJS 65 46 2 0 0 0 42 0 0 2 2 0 0 0 0 AV0 567 5 0-0 0 2 0 1 1 0 0 0 0 1 CRD 434 3 0 0-0 0 0 0 3 0 0 0 0 0 ITJ 9 56 0 0 0 0 22 0 33 0 0 0 0 0 0 NN0 741 63 0 0 14-2 0 14 32 0 0 0 0 0 NN1 1722 12 4 1 0 0-1 2 2 0 0 2 0 1 NN2 1788 7 0 0 1 0 1-5 1 0 0 0 0 0 NP0 2365 15 0 0 0 0 13 0-2 0 0 0 0 0 ORD 46 11 0 2 2 0 2 0 0 4 0 0 0 0 0 UNC 32 25 0 0 6 3 0 0 12-3 0 0 0 0 VVB 14 71 0 7 0 7 43 0 14 0-0 0 0 0 VVD 14 71 21 0 0 0 29 0 0 0 7-0 14 0 VVG 49 0 0 0 0 0 0 0 0 0 0 0-0 0 VVI 23 100 4 0 0 0 52 0 0 0 43 0 0 0 0 VVN 13 46 38 0 0 0 0 0 0 0 0 8 0-0 VVZ 213 86 0 0 0 0 0 85 2 0 0 0 0 0 0 ZZ0 47 96 0 0 19 0 0 0 13 64 0 0 0 0 0 24
Tabell 5.9: Förväxlingsmatris Hunpos, testmängd 1 tränat på 1/10 av BNC. Cellen på rad i, kolumn j visar andelen gånger, i procent, som ett ord borde fått tagg i men fick tagg j. Kolumner med endast nollor har utelämnats. # fel AJ0 AV0 CRD NN0 NN1 NN2 NP0 UNC VVB VVD VVG VVN slutna AJ0 1805 24-2 0 0 6 0 4 0 0 1 2 7 0 AJC 53 83 4 11 0 0 58 0 4 2 0 0 2 2 0 AJS 65 55 2 0 0 0 54 0 0 0 0 0 0 0 0 AV0 567 7 1-0 0 2 1 2 0 0 0 0 0 1 CRD 434 3 0 0-0 1 0 1 1 0 0 0 0 0 ITJ 9 67 0 0 0 0 22 0 44 0 0 0 0 0 0 NN0 741 41 0 0 14-2 1 15 7 0 0 0 0 1 NN1 1722 12 3 1 0 1-1 2 0 0 0 2 0 2 NN2 1788 7 0 0 0 1 1-5 0 0 0 0 0 0 NP0 2365 9 0 0 0 0 9 0-0 0 0 0 0 0 ORD 46 4 0 2 0 0 2 0 0 0 0 0 0 0 0 UNC 32 56 3 0 6 16 3 0 19-3 0 0 0 6 VVB 14 79 7 7 0 7 36 0 21 0-0 0 0 0 VVD 14 79 14 0 0 0 43 0 0 0 0-0 21 0 VVG 49 2 0 0 0 0 0 0 0 0 0 0-0 2 VVI 23 100 9 0 0 0 65 0 0 0 26 0 0 0 0 VVN 13 38 31 0 8 0 0 0 0 0 0 0 0-0 VVZ 213 92 0 0 0 0 0 90 2 0 0 0 0 0 0 ZZ0 47 96 0 0 34 30 6 0 23 2 0 0 0 0 0 25
Kapitel 6 Ett kollaborativt ordboksredigeringssystem Detta kapitel beskriver de påbyggnader av det ursprungliga systemet som är resultatet av detta arbete. 6.1 Krav på systemet Utöver problematiken med spam och skräp, som behandlats i tidigare kapitel, så finns det ett antal mer subtila problem som kan försämra kvaliten på lexikonet om de inte hanteras. Figur 6.1 illustrerar en del av problematiken. Det kan som synes finnas flera innebörder av ett ord, som var och en motsvarar en post i lexikonet. I vissa fall kan dessutom en eller flera betydelser av ett ord saknas. Detta innebär att vi måste tillåta användare att lägga in ord som redan finns i lexikonet vilket i sin tur innebär att vi måste kunna skilja på dubbletter som är legitima och sådana som inte är det. Dubbletter finns inte bara på ordnivå utan även flera av de enskilda fälten, så som synonymer, böjningar, exempel och översättningar, kan rymma dubbletter. Här finns det generellt sett ingen legitim användning dock, förutom för böjningar, så dessa kan vi filtrera bort direkt. För ord som är tvetydiga, måste vi dessutom för alla fält kunna skilja ut vilken innebörd av ordet som åsyftas. Ett annat problem är användare som skriver in korrekt, eller nästan korrekt, information men inte på det format som vi vill ha den. Ett exempel på detta är ifall användaren kastar om språken och således fyller i engelska där vi förväntar oss svenska och tvärtom. Det finns en risk för att sådana fel slinker igenom röstningsproceduren ifall användaren inte läser frågan ordagrant utan bara tittar på de två relevanta orden och ser att de passar ihop. Vidare så behövs någon metod för att hantera den problematik som inträffar då två användare redigerar samma ord samtidigt, eller då en användare redigerar ett ord som har en eller flera innestående ändringar som ännu inte har godkänts. 26
Figur 6.1: Skärmdump som visar uppslagning av ordet vara i Folkets lexikon. 6.2 Gränssnitt Gränssnittet är designat med en epostklient som inspirationskälla. Förhoppningsvis är detta något som de flesta är bekanta med. En skärmdump av gränssnittet finns i figur 6.2. Användaren tillåts navigera med en meny till vänster. Under varje menyalternativ finns en area för editering av en specifik del av ett ord. Nedanför denna area finns en förhandsgranskning som visar hur ordet kommer att se ut i lexikonet. Detta är implementerat i Javascript med hjälp av Google Web Toolkit. En begränsning med detta är att det inte fungerar för användare som har inaktiverat Javascript i sin webbläsare. 27
Figur 6.2: Skärmdump av redigeringsgränssnittet 6.3 Att presentera lexikonändringar som frågor Som redan nämnts så måste frågorna som ställs till användarna vara enkla för att användarna ska ta sig tid att svara. Om frågorna är allt för omfattande kanske det inte ens finns något rätt svar med det begränsade antalet svarsalternativ som finns. När ett ändringsförslag inkommer till systemet så väljer vi därför att dela upp det i så finkorniga delar som möjligt, med den begränsningen att varje del ändå svarar mot en ändring i lexikonet. Ett undantag till denna princip är böjningar, där ställs det istället en enda fråga för alla böjningar av ett ord. Detta ger en något krångligare fråga men gör det möjligt, att på ett enkelt sätt att bedöma om en användning av samma böjning mer än en gång är legitim. Exempel En användare föreslår att ordet inanimate tillsammans med översättningen livlös ska läggas till i lexikonet. Användaren märker också upp ordet som ett 28
adjektiv och anger nonliving som en synonym. Detta resulterar i följande frågor: Är det svenska ordet livlös en bra översättning av det engelska ordet inanimate? Tycker du att det engelska ordet inanimate borde stå med i lexikonet? Håller du med om att det engelska ordet inanimate tillhör ordklassen adjektiv? Är nonliving en synonym till inanimate? 6.3.1 Tvetydighet Ett av de största problemen som identifierades bland kraven på systemet i 6.1 var hanterandet av tvetydighet, både på ordnivå, men även ordens egenskaper såsom översättningar, exempel och idiom. Det som används, i lexikonet, för att identifiera ett ords betydelse är definitioner och förklaringar. Vid tvetydiga ord så tvingas användaren att ange åtmistone ett av dessa värden. Innan vi lägger in ny innebörd av ett ord i lexikonet så måste vi verifiera att det verkligen är en ny innebörd, och inte en som redan finns. Detta åstadkommer vi genom att presentera alla olika par av definitioner och förklaringar tillsammans med frågan om dessa är unika i innebörd. För varje ändring av en del av ett tvetydigt ord så presenteras också dess definition och förklaring för att kunna urskilja om frågan är sann för en viss innebörd. 6.3.2 Vilka ord bör stå med? Oavsett hur många ord som läggs in i lexikonet så kommer det alltid att finnas ord som saknas. I synnerhet är detta sant för svenska, där nya ord kan bildas genom sammansättning av befintliga ord. Ibland är dessa ord så vanliga att vi vill ha med dem i lexikonet. Andra gånger kan de vara så ovanliga att deras medverkan endast skulle göra lexikonet svårläst och kanske till och med upplevas som löjligt. Exempel Ordet bokryggstextlayout med översättningen layout of the text of the spine of a book Det är mycket möjligt att ordet bokryggstextlayout med översättningen ovan skulle godkännas av användarna. För att den typen av ord inte ska införas i lexikonet så inför vi därför en extra fråga innan ett nytt ord läggs till i lexikonet: Tycker du att ordet bokryggstextlayout borde stå med i lexikonet? Detta innebär att det är helt upp till användarna att avgöra vilka ord som bör stå med i lexikonet, vilket ju är passande med tanke på att lexikonet heter Folkets lexikon. Den enda kontroll som görs är den som bedömer om ordet är stötande. Detta innebär att det är fritt fram att lägga in exempelvis slanguttryck. Dock måste andra användare rösta för att dessa bör införas i lexikonet. 29
6.3.3 Problematisk indata Det finns ett antal ändringar som användare kan föreslå som resulterar i frågor som riskerar att få ett positivt svar trots att ändringen inte borde genomföras. Dubbletter bland översättningar är ett sådant exempel, eftersom frågorna ställs för enskilda översättningar så går det inte att se på frågan att det är en dubblett. För översättningar kan vi dock enkelt lösa detta problem genom att helt enkelt filtrera bort dubbletter. För Idiom och exempel blir detta lite knepigare då mindre ändringar som exempelvis en ändrad ordföljd kanske bör ses som en dubblett ena gången men inte en annan gång. På grund av tidsbrist så finns det ingen mer avancerad hantering av detta än att exakta dubbletter filtreras bort. Det är även viktigt att skilja på vad som ska vara på svenska och vad som ska vara på engelska. Till exempel så ska förklaringar i det svensk-engelska lexikonet vara på svenska och i det engelsk-svenska lexikonet vara på engelska. Som redan nämnts i 4.4 så kan vi använda vår språkklassificerare till detta ändamål. Det är dock vanskligt att använda denna på enskilda ord så som i översättningar, sammansättningar och så vidare. Därför uttrycker vi klart i frågorna vilket språk vi förväntar oss att värdet ska ha. 6.3.4 Konflikter bland ändringar Problemet med användare som redigerar ord som har innestående ändringsförslag togs upp i 6.1. För att lösa detta problem använder sig Folkes lexikon av tidsstämplar. Innan ett förslag kan genomföras så görs en kontroll ifall det attribut som förslaget avser har ändrats sedan förslaget skapades. Ifall förslaget är nyare än attributet så kan det genomföras, annars förkastas det. Denna lösning introducerar en risk för att förbättringsförslag föreslås för saker som redan har korrigerats, men ännu inte har godkänts. Att istället låsa ord eller attribut med innestående ändringar bedömdes vara ett dåligt alternativ, eftersom det istället skulle innebära det motsatta. Att det finns en risk för att saker som inte har korrigerats inte kan korrigeras. Detta eftersom de kan vara låsta av ett annat dåligt förslag som ännu inte har underkänts. 6.3.5 Beroende mellan ändringar När vi delar upp ett bidrag i små förbättringsfrågor så introducerar vi beroenden mellan frågorna. När till exempel ett nytt ord föreslås så är alla förbättringsfrågor till det ordet beroende av att användarna accepterar ordet som ett bra ord att lägga in i lexikonet. För att inga röster ska avläggas i onödan väljer vi att inte presentera några frågor för användaren förrän deras eventuella beroende frågor har blivit godkända. 30