SpråkpolisenBot analyserar kommentarer på /r/sweden och upptäcker automatiskt
felaktig användning av de
och dem
. Botten bygger i grunden på en maskininlärningsmodell
som tränats upp att kunna skilja på de
och dem
.
Idén för SpråkpolisenBot kom till efter att ha märkt hur ivriga användare på Sweddit generellt var att korrigera andra användares språkbruk. De vanligast rättelserna handlade om förväxlingar av de
och dem
, tätt följt av särskrivningar. Även om kommentarer innehållande rättelser generellt uppröstades av andra användare, var de inte alltid särskilt konstruktiva upplevelser för den felande användaren. Fokus låg mestadels på att påpeka fel snarare än försöka avhjälpa källan till felen.
SpråkpolisenBot är en AI-modell som försöker råda bot på detta. Modellens syfte är förvisso fortfarande att rätta förväxlingar av de
och dem
, men med en ytterligare ambition att ge användare feedback på hur man kan tänka för att göra rätt. Detta sker främst genom att
SpråkpolisenBot är baserad på en typ av neurala nätverk som kallas “Transformers” (Devlin et al. 2018). Sådana modeller grundtränas på stora mängder text för att uppnå en “generell språkförståelse”. Under grundträningen matas modellerna med texter där vissa ord har maskerats, och får till uppgift att prediktera vilka ord som ligger bakom “maskerna”. De utmanas även att prediktera huruvida en textsekvens följer direkt efter en annan (next sentence prediction). Dessa grundtränade modeller kan sedan finjusteras till att lösa specifika uppgifter (exempelvis klassificera dokument till kategorier, automatiskt besvara frågor, m.m.)
Kungliga biblioteket har tränat en sådan språkförståelsemodell på cirka 20GB svensk text KB-BERT (Malmsten, Börjeson, and Haffenden 2020). SpråkpolisenBot använde denna som grund och fäste ett specialiserat huvud på basen med syftet att klassificera varje ord i en textsekvens till en av tre kategorier:
ord
(alla bakgrundsord som inte är de/dem tillhör denna bakgrundskategori)DE
DEM
Vi kallar vår finjusterade modell DeFormer. Den kan laddas ned och användas från följande länk. Källkoden för att själv kunna träna DeFormer finns här.
DeFormer har tränats på meningar från Europaparlamentet, svenskspråkiga Wikimedia samt JRC-acquis (lagtexter från EU). Dessa hämtades från OPUS. Källorna valdes ut för att de antogs ha ett korrekt språkbruk.
Endast meningar innehållandes de
eller dem
– eller bägge – behölls i konstruktionen av träningsdataset. I tabellen nedan återfinns beskrivande statistik över antalet meningar som behölls från respektive dataset, samt frekvenser över förekomsten av de/dem
.
Datakälla | Meningar | # de | # dem | de/dem ratio |
---|---|---|---|---|
Europaparl sv.txt.gz | 500660 | 465977 | 54331 | 8.57x |
JRC-Acquis raw.sv.gz | 417951 | 408576 | 17028 | 23.99x |
Wikimedia sv.txt.gz | 630601 | 602393 | 38852 | 15.48x |
Total | 1549212 | 1476946 | 110211 | 13.40x |
Vid träningen av DeFormer introducerades slumpmässiga substitioner, där de
eller dem
byttes ut mot den motsatta formen. Modellen utmanades sedan att klassificera vilka de/dem
som var korrekta i en given mening, samt vilka som tillhörde den förvanskade substituerade formen.
DeFormer utvärderades på ett separat valideringsset bestående av 31200 meningar från samma datakällor som modellen tränats på (svenska wiki + europaparlamentet + JRC). Slumpmässiga fel (substitutioner) introducerades återigen för att utmana modellen. Tabellen nedan visar att DeFormer är väldigt träffsäker. De få “felaktiga” prediktioner modellen genererar är nästan samtliga av formen de/dem som-konstruktioner med bisatser. Majoriteten av dessa är egentligen inte att anse som felaktiga, eftersom båda formerna är accepterade.
Accuracy | |
---|---|
de | 99.9% |
dem | 98.6% |
Träffsäkerheten är alltså därmed något högre än de redovisade siffrorna i tabellen. Det går dessvärre inte att säkert uttala sig kring om modellen presterar lika väl på reddit-kommentarer som den gör på lag- och parlamentstexter.
Koden för SpråkpolisenBot kan hittas här. Kod för den bakomliggande modellen DeFormer finns på följande länk.
🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓🚓
If you see mistakes or want to suggest changes, please create an issue on the source repository.