01 Språkmodell · experiment
2020Högskoleprovet
AI får 1.3 på högskoleprovet — bättre än 80% av svenskar som deltar på provet.

En AI-modell fick bättre resultat än 80% av provdeltagarna
Arkiverat experiment · preliminärt resultat från 2020.
Testa modellen själv
ORD
Modellen tror: lärare vid högskola
DJUPA NEURALA NÄTVERK FÖR HÖGSKOLEPROVE
GENOMBROTTET INOM AI: TRANSFORMERS
September 2019 vaknar jag hög som ett hus efter en nyckelbensoperation och tar upp telefonen. I mitt feed ser jag att det kommit en ny modell(Albert, A lite Bert) som slår snittmänniskan i läsförståelseuppgfiter på Engelska för Högstadie och gymnasieelever i Kina. Detta fick mitt höga huvud att flumma ännu mer. Vad var möjligheterna? Tänk om jag höll på med detta? Jag måste göra detta!
Genombrottet kom ifrån en modell skapad för maskinöversättning och dess fortsättningar i form av GPT och Bert. De nya modellerna fullständigt krossade många av ledartavlorna som forskare tävlar om på olika uppgifter. Jag hade gjort lite experiment på Engelska men det var Svenska som var mest intressant och det fanns inga bra modeller.
I November, någorlunda återhämtad startade jag en resa för att utforska vad de senaste genombrotten inom Artificiella Neurala Nätverk för språkförståelse innebar för mitt språk, Svenska. Vad som fascinerade mig mest var inte de höga resultaten på text och meningsklassificering, utan att de klarade av att göra tester på läsförståelse. Trots att implementeringarna är otroligt lika på en teknisk nivå så är det väldigt spännande när det verkar ha uppstått en annan typ av läsförståelse än den vi har men som fortfarande kan "resonera" (mönsterigenkänning) över texter och svara på frågor. Detta var extremt spännande, vad innebar det för mig? Hur fungerar det? Vad spottar den ut? Finns det några likheter med hur vi gör det?

Vad gjorde det möjligt för AI att gå om snittsvensken?
WEBB · RIKSDAGEN · UNDERtexter · WIKIPEDIA
Möjligheten
De nya modellerna tränades på enorma mängder data jämfört med mina tidigare experiment, som mest använde svenska Wikipedia. De nya modellerna använde 16GB, 38GB, ibland 140GB eller mer. I stället för enstaka rader och meningar tränades de på hela texter. Jag fick bygga om hela datasetet från grunden och kom till slut upp i ungefär 100GB.
Utskrivet på 25 miljoner A4-sidor och lagt blad efter blad skulle materialet räcka från Stockholm till Seoul. Med 1,7 minuters lästid per sida skulle det ta mer än 80 år att läsa allt utan paus. Och detta räknades fortfarande som litet.
Som tur var fanns det starka öppna resurser. Common Crawl stod för en stor del; efter städning gav en dump ungefär 16GB användbar svensk text. Riksdagens öppna texter, OPUS undertexter, Wikipedia och senare OSCAR kompletterade materialet.
Modeller i den här storleken kräver mycket beräkningskraft. På min arbetsstation med ett RTX 2080-kort kunde en bra träningskörning ha tagit flera år. Genom TensorFlow Research Cloud fick forskare tillgång till Tensor Processing Units, specialbyggda för den här sortens arbete. Den tillgången gjorde mina ”småskaliga” experiment möjliga.
Öppenhet
NLP-forskningen var anmärkningsvärt öppen. Modeller, data och kod rörde sig snabbt mellan forskare och företag. Det var hektiskt att följa, men perfekt för någon som lär sig genom att plocka isär fungerande system.
Jag frågade forskarna bakom ALBERT om jag kunde få se hur de löste RACE, ett läsförståelsetest baserat på kinesiska skolprov. Två dagar senare dök ett par filer upp på GitHub. Arbetet började.
HUR LÄR MAN EN AI SVENSKA?
Tokenization
En bilfärja lämnade lilla varholmen
[ "en", "bil", "##fär", "##ja", "lämnade", "lilla", "var", "##holmen" ]
Ser den ord? bokstäver? Modellen får se "tokens", en token kan vara en bokstav, del av ett ord eller ett helt ord. Att dela in texter i tokens har sina för- och nackdelar. Det största problemet och fördelen är att dessa modeller tittar på hur alla tokens i en text påverkar varandra("Attention"). Om alla tokens bara var bokstäver i exemplet ovan så blir det 19 och i längre texter skulle detta kräva extremt mycket datorkraft, om vi istället kollar på ord så är det enbart 5. Skulle vi spara alla ord så får vi dels en gigantisk mängd tokens att lagra, dels så missar vi en del kontext som kunde vara användbar. Med nuvarande tokenization får vi 8, en bättre trade-off. T.ex så kan man gissa att ["vilken token som helst", "##holmen"] handlar om en plats vid vatten även om modellen aldrig sett "burholmen" förut i en annan text. Därför skapar man ett Vocab med ett begränsat antal tokens. Desssutom begränsar man det totala antalet tokens en modell kan se.
Klurigheter
I Svenskan har vi vansinnigt många olika sammansatta ord t.ex "långtidslagring" och "förtidsröstning". Detta blir snabbt ett problem med hur nuvarande algoritmer söker tokens, som inte
alls är anpassde efter detta. De tokens som modellen får se blir ofta dåligt anpassade och en annorlunda böjning av ett del-ord kan kasta om alla tokens som blir av det hela sammansatta ordet. Det blir dessutom dubbletter om det är i början
eller i ett ord, T.ex. så ses "holmen" och "##holmen" som helt olika tokens. Ni kan testa själva nedan i demon.
Lösningar
Dels så pågår det mycket forskning på "Attention", det som gör det svårt att titta på längre sekvenser och vissa framsteg har gjorts. Men sen kan man även ha ett smartare system för hur man
tokenizar. Detta forskas det lite på och är delvis ett problem som kanske fokuseras på i andra germanska språk än Engelska som Tyska. Jag har själv en hel del idéer som jag skulle vilja utforska. Jag antar att fler personer eventuellt jobbar
på att ta fram olika lösningar redan. Sen kan det helt enkelt och delvis vara så att det krävs mer beräkningskraft som löser sig med tiden och detta bara blir temporära quickfix för att kompensera för nutidens långsamma datorer sett ut ett
framtidssperspektiv. Need m0ar compute.
01 · Text till data
Tokenisering
Basmodell
12 × 12lager × attention-huvudenGPT-3
96 × 96lager × attention-huvudenKontextfönster
2,048tokensModellen
Embeddings
Modellen börjar med att skapa embeddings, en sorts representation av vad en token har för betydelse. Som exempel så försöker den placera "avtal" och "kontrakt" nära varandra, förmodligen så
ligger "jurist" i närområdet om den är bra tränad.
Transformer
Sen så går dessa representationer igenom flera transformer-lager. Ett transformer-lager lär sig ställa frågor ("attention") från varje token på alla andra tokens. Ett exempel skulle kunna vara
"vem skapade kontraktet". En basmodell har ofta 12 sådana här "frågor per lager". Svaret på dessa frågor slås ihop och går igenom ett neuralt nätverk som skapar en ny representation för tokensen som kan gå vidare till nästa lager. En
basmodell har ofta 12 lager. Ökar man heads och lager så ökar man antalet mönster som modellen kan plocka upp. Ofta så har kända modeller olika namn men det brukar vara variationer på detta eller träningsmetod som skiljer dem åt. T. ex. så har GPT3
96 heads och 96 lager med en variant på attention-mekanismen som ger den bättre möjlighet att titta på lite längre texter(2048 tokens).
Model
modellen lär sig svenska
modellen säl sig svenska
säl → ersatt
Lära sig svenska
Uppgift
För att lära en modell Svenska måste man ha en uppgift som den kan träna på. En uppgift där man kan se om den har fel. För att den skall kunna lära sig så bra som möjligt behöver man extrema
mängder uppgifter. Därför är det bäst att komma på uppgifter som fungerar på vilken text som helst. Tidigare har detta varit att ta bort tokens och sedan låta modellen gissa vilken token som skall vara där. Antingen i mitten av en mening
eller att gissa nästa token i en text. Om man gissar en token i mitten av texterna blir den bra på att förstå texter. Om man tränar den på att gissa nästa token blir den bra på att skriva texter.
Effektivare
Nedan kan ni se outputen från modellen. Desto större tal desto mer tror modellen att det är utbytt.
Förträning
Ordförståelse
Meningskomplettering
Läsförståelse
Testa kunskaperna på högskoleprovet
Målet är att träna modellen på att kunna göra uppgifter som liknar högskoleprovet och sedan testa den på högskoleprovet. Alltså inte att träna den på högskoleprov och sedan testa den på några den inte sett. Detta som ett test på generaliseringspotentialen som de nya modellerna har. Till exempel så är en återkommande fråga på högskoleprovet, "vad säger författaren i den första paragrafen?". Jag vill se om modellen har en sådan generell förståelse att man inte skall behöva träna den på att lära sig små knep för att få bra resultat på just högskoleprovet.
ORD
Definition
Den här uppgiften liknar mer någon form av givet ett ord, en kombination av ord eller en fras välj det mest lika i betydelse. Det är inte så lätt som att bara ha lista på ord, för här
förekommer ordspråk och annat.
Träning
Den får läsa orden från svenska wiktionary. Jag använder en cosine similarity loss. Splittar 80 / 10 / 10 och får ~0.91 i cosine pearson
Reflektion
Det som är intressant med denna uppgift är att man kan se hur modellen/metoden generaliserar utöver listan på synonymer som enbart består av ett ord till att klara av fraser och även ord
som inte är med i synonymlistan. När jag testade modellen på 3 högskoleprov fick jag runt 84% rätt på orden. Jag testade även sen att köra standardsättet för encoders och fick som bäst runt 89%. Jag använder dock inte resultatet därifrån då
jag använde 3 högskoleprov som ett dev set och detta blir fusk. Det jag vill göra är att träna den på att ganska generellt lösa liknande uppgifter som HP och bara använda HP som ett sluttest. Det som är intressant förutom generalisering är
att denna uppgift är förmdligen ett väldigt bra mått på hur bra modellen delar upp tokens. Rätt delord -> mer generalisering.
MEK
Definition
Läs en text som har flera tomma platser, i dessa platser kan ett eller flera ord vara. Välj från 4 alternativ vilket som är bäst.
Träning
Här gjorde jag ingen träning alls. Modellen har redan från sin basförståelse av svenska en riktig talang för detta! Ni kan ovan testa att se vad modellen spottar ut när ni byter ut olika ord. Även om den tror att det ordet ni bytt ut kan vara där så blir den generellt sätt mer osäker på orden runt omkring. Så genom att titta på en ruta runt orden har man en ganska bra grund för om orden är utbytta. Detta gav 78% rätt på 3 prov.
Reflektion
Här finns mycket man förmodligen kan hämta. Dels genom att träna den på att hitta utbytta ord i texter med extremt hög kvalité och inte random-sidor från internet. Man skulle sedan kunna lägga på en klassificerare och träna den på att välja rätt alternativ. Detta går dock lite emot syftet, att testa hur bra den generaliserar på högskoleprovet.
LÄS
Definition
Läs en text och en fråga. Välj svar från 4 alternativ vilket som är bäst.
Träning
Här kommer det svåra. Högskoleprovet är förmodligen den största datamängden som finns på läsförståelse som ligger uppe. Kanske att det finns för nationella prov eller hos något företag som
erbjuder träningsmaterial för detta. Jag valde att titta på vad det fanns för material på Engelska. jag tränade en modell på att översätta från Engelska till Svenska. Den modellen fick översätta läsförståelseuppgifter på engelska. Sedan
tränade jag en Svensk modell på att göra uppgifterna. Koden för att träna i Tensorflow har jag lagt upp på Huggingface github. Det bästa resultatet jag fick med denna metoden var 1.0. Jag tror det finns en del att hämta genom att använda
bättre data och använda en större modell tyvärr var detta både resurskrävande i form av compute men även i tid. Jag hoppas kunna fortsätta experimentera med detta framöver. Det finns en modell på Engelska, UnifiedQA. Den är tränad på T5, en
modell som finns i "extrema" storlekar. De tränade en modell att göra väldigt breda läsförståelseuppgifter, Jag gör tester med deras 3B-variant i fortsättningen och översätter med en modell som matar in de svenska texterna på engelska för att
se var gränsen verkar gå.
Reflektion
Den största begränsningen här är data och modellstorlek. Läsförståelse kräver mycket av modellen. Ju fler mönster modellen kan hitta desto bättre resultat. Om man har många exempel på de
mönster som krävs för att göra uppgiften ökar också chansen. Det jag hade möjlighet att göra var i princip en modell med 12 lager baserade på mina dåvarande kunskaper om träning. Jag började experimentera med att ge mig in i hur man kan få
plats och optimera för större modeller. Att använda UnifiedQA 11B skulle ev. höja accuracyn med ca 5%.
Om man kollar på resultatet nedan så verkar det fortfarande vara bättre att ev. träna en mindre modell på svenska och fortfarande slå den stora engelska med översättning. Skall bli spännande att se om jag fortsätter! Man skall även ta i beaktning att de engelska uppgifterna på hp är av enklare karaktär jämfört med de svenska.
05 · Utvärdering
