Är mycket data på ett speficikt språk en moat/vallgrav? Hur effektiv är "vallgraven"?

August 20, 2020

Moat/vallgrav för data på specifika språk

Viktor Alm

I like to build stuff

Nya modeller är ruskigt effektiva på att översätta

För människor kan språkbarriärer vara stora trösklar och det är lätt att tro att det samma gäller för affärsmodeller med AI och dess data. Men gör det verkligen det?


Hur förhindrar man att företag som inte betalar skatt i landet tar över arbetsuppgifter?

WIP


Vanliga misstag när man tränar en Transformer för ett nytt språk

August 20, 2020

Att träna en Transformer

Viktor Alm

I like to build stuff

Inledning

Att fortsätta med pre-training processen och göra en "Domain adaptation" av en befintlig modell kan vara en snabb och smidig väg för att hämta några extra procentenheter i accuracy. Är du ute efter att göra olika klassificeringsuppgifter där bias i modellers data kan ha negativa konsekvenser så måste man själv ha total kontroll över allt modellen har sett och då har du inga alternativ än att träna från scratch. Kanske har du extra långa dataset eller en domän med väldigt specifik jargong. Det kanske inte ens finns tränade modeller på det språk du vill använda från början. Detta är bra anledningar för att ge sig in i pre-training av modeller.




Modell



Vilken modell skall du välja? Det beror på vilket problem du vill lösa.


Hur mycket compute har du? Hur mycket data har du? Hur mycket hjälp kan du få? Hur mycket tid har du? Hur mycket får inferens kosta? Förvandla text? T5, BART. Förstå text? Electra, Roberta. Snabb inferens? Pruna, distilla, ALBERT. Skriva? GPT




Data

Allt börjar med data. Det optimala är om du har en stor mängd data från liknande processer du tänker implementera modellen på. Om du vill ha en modell för att bedömma skoluppgifter om romarriket så kan det vara bra att ha generell data om antiken och andra historieinlämningar innan du går vidare till att träna modellen på att specifikt rätta texter om romarriket. Om du har hittat en ny spännande arkitektur eller bara vill experimentera så finns det mer öppna källor som inte kräver olika organisationers stängda data.


Att försöka balansera dataset och få den att följa den rådande kulturens uppfattningar kring olika ord är extremt svårt. Modellen blir en direkt reflektion av datan. I sig blir den en generell reflektion av hur människor använder språket, men inte nödvändigtvis hur du vill eller tänker att det borde vara. Här blir det nästan nödvändigt att ge sig in i gråzoner kring datainsamlingen om du är ute efter att skapa en modell med en medvetet designad språkförståelse. Tänk hela tiden på hur balanserat det är, hur väl reflekterar det verkligheten och/eller målet ni vill uppnå. Samt att ni behöver vansinniga mängder.




Tokenization

Tokenization fungerar som en slags kompression/uppdelning av ord. Du kan se demos på detta under Högskoleprovet. Oftast så fungerar ordförståelse/kontextförståelse bra med enbart ett par bokstäver per token men den totala längden text modellen kan läsa begränsas definitivt av att varje token enbart består av några bokstäver istället för ord. Det är därför oftast klokare att träna med ett eget vocab. Jag har testat att träna olika engelska modeller som haft ÅÄÖ i vocabet men textlängden halveras. Det kan vara en idé att extenda vocabet för att utnyttja de resurser som lagts på att träna modellen om man vill göra en POC.

Här finns det en några av metoder och ingen känns riktigt optimal. Det finns BPE-baserade och sentencepiece med unigram. Svenska har tyvärr massa sammansatta ord som dessa algoritmer inte är gjorda för. Just nu tror jag vi kommer landa i några character-based layers som sedan rör sig mot ord och ev. meningar/stycken.


Encodea / decodea Tokenizad data

När man tar ett dataset och tokenizar det med sitt vocab är det extremt viktigt att kolla hur den fungerar. Många tokenizers är specialiserade för att vara på just ett språk. Bert/Albert/Electras tokenizer är ett sådant exempel.


Om man vill ha lowercase så strippar den alltid accents:

if self.do_lower_case:
    token = token.lower()
    token = self._run_strip_accents(token)
Som triggar den här, vilket tar bort åäö
text = unicodedata.normalize("NFD", text)

Eller detta i Alberts tokenizer:
outputs = unicodedata.normalize("NFKD", outputs)
och det här i create pretraining data:
english_chars = set(list("abcdefghijklmnopqrstuvwxyz"))

Nyckeln ligger i att testa, testa innan man börjar träna på riktigt. För det kan kosta en hel del att träna en sådan här modell, och då vill man INTE ha fel. Tokeniza till ids och tillbaka. Konvertera tillbaka dina TFRecords till text och se vad som hänt. Kolla maskerna. Lägg definitivt några dagar på att bekanta dig med hur detta fungerar innan du börjar. För det är oftast inte bara i en fil som sådana här saker ligger och lurar hårdkodat.




Pretraining

För Decoders/Auto-regressive är träningsuppgiften ganska enkel. Gissa nästa token. När det kommer till Encoders eller Decoders är det inte lika enkelt.


Compute/FLOPS

Google har TPU och GPUer i Google Cloud Platform. De flesta modeller som finns tillgängliga är direkt kompatibibla med TPUer och det är bara att köra.


Encoder

Masked Language Modeling. BERT maskar tokens i training samples. Att generera dessa training samples på över 100GB data med kanske 40 olika genererade masker från ett sample genererar vansinniga mängder text-data. Flera TBs. jag begränsade mig till 25 exempel med några runs. Att hyra servrar att generera all den datan var dyrt. Flera tiotusentalskronor, men det sparade mig en del tid för den metoden. Det minskar randomness i träningen och gör att varje run ser ungefär samma uppgifter. Detta spelar dock inte så stor roll om man bara vill träna ett par modeller. Därför kan man like gärna generera samples on the fly. Sen finns det olika strategier för hur man maskar tokens. Maskar man tokens, ord eller spans? Vilka tokens maskar man? Detta är något man får kolla upp beorende på lite. Sen finns det varianter som XLNet och Electra.


Electra använder en MLM model som man kallar för generator och en modell som gissar vilka tokens som är utbytta. Detta är en MYCKET effektiv metod för att träna modeller. Ibland upp till 1/4 av computen.


Encoder/Decoder

Här har jag inte hunnit experimentera så mycket ännu. Enbart tränad en modell från scratch. Engelska till Svenska men har lite fler experiment på gång. Här är det lite blandning hur man tränar och vilka metoder. T5, BART, MARGE, back-translation, de-noising etc. Jag kommer fylla på här efter att jag har lite mer praktiskt erfarenhet från Pre-training av dessa modeller.


Träningsparametrar

Här handlar det om att läsa papers för optimizers och kolla appendix. Ofta så står det specificerat exakt någonstans. Jag ser hur många som helst som ställer frågor om hur man skall göra eller som visar riktigt knasiga copy-paste från första exemplet som inte alls matchar deras case och sedan tränat i flera veckor, personer med PhDs... Det är svårt att hitta bra exempel när saker är nytt och det handlar till stor del att själv testa och läsa fler papers för att göra rätt. Det är inte så lätt som att bara följa docsen till något framework. Det mesta är odokumenterat och ibland har man tur med lite kodkommentarer eller appendix. Även när det står så gör folk konstiga misstag. t.ex. LAMB, You, et al





Slutanvändning

Du kommer snart upptäcka brister i de serien av beslut du fattat för att komma i hit. Du märker dem när du testar på olika "fine-tuning" tasks. Nu är du i träsket!

Oftast försöker jag hitta någon som försökt lösa liknande uppgifter och kollar hur modellen fine-tunats eller så går jag tillbaka och kolla inställningar för den uppgiften i GLUE som är mest lik och jobbar därifrån.


AI får bättre resultat än 80% av svenskar på vårt språktest för högre utbildning

August 20, 2020

Vad kommer AIs språkförståelse att innebära för oss?

Viktor Alm

I like to build stuff

År 2020


Tekniken går framåt med stormsteg. Digitalisering är fortfarande något många organisationer aktivt jobbar med att införa. Samtidigt sitter en egen liten värld och tar de digitala processerna till nästa nivå genom AI och automatisering.


NU kan man utvärdera en AI på samma språktester som människor och få bättre resultat än en majortitet av dem. Hur kommer detta påverka hur vi arbetar med språk? Jag skulle vilja påstå att alla textprocesser påverkas av de här nya framstegen.


Samverkan


Även om jag tror att en del klassificeringsmodeller kan lämnas utan direkt övervakning med enbart reguljär uppföljning så tror jag väldigt mycket på att använda "AI" för att maximera individers kapacitet. Det här är en revolution som likt industralismen ökar produktiviteten. Om man kunde 3xa eller 4xa throughputen från arbetare i dessa processer har man vunnit mycket. I många fall är det definitivt redan möjligt idag. Kortsiktigt handlar det mer om samverkan än att ta bort människor från processer. Producera rätt data och förståelse inför den kommande överlämningen.



Lärare


Vad innebär det här för en lärare som rättar texter dagligen? Förmodligen så får AI redan nu högre resultat på läsförståelse än vad många lärare i landet har. Är det rättvist mot elever att bedömas av personer som har svårt för läsförståelse? Om man även utvidgar det till koncentration och slarvfel?


Är det rättvist att tvinga dessa lärare att läsa och rätta? Mer tid och energi skulle kunna spenderas på att fokusera på eleverna. Få dem att känna sig uppmärksammade. Mer coachning. Att direkt kunna interagera med en modell som ger en direkt feedback. Att lära sig samarbeta med deep-learning modeller i tidig ålder och vara kritisk till resultat utan att någon tar det personligt och slipper erkänna fel.


Om vi tar historia som exempel, hur många lärare har inte suttit och utvärderat texter om rommarikets fall eller Gustav Vasa efter vissa kriterier. Dataprocesserna finns där och i nationell skala skulle man kunna effektivisera väldigt mycket. Ännu mer nu när modellerna gör det möjligt att närmast sömlöst byta mellan språk.


Supportarbetare


Olika supportlinjer via telefon är ofta bara ett mänskligt interface till olika kunskapsdatabaser och behörigheter som kunden inte har. Hur många supportarbetare ligger kring den gruppen av människor med top 70-85% i läsförståelse? I de fallen som finns så är det sällan man kan nyttja detta då det knappt finns verktyg som använder äldre söktekniker att arbeta i och söka efter information. Det krävs tid och erfarenhet för ett yrke som oftast ses som temporär.


Det finns mycket att vinna i effektivitet genom att tillhandahålla supportartiklar mot kunden genom olika modeller som agerar interface med lite smart ingenjörskonst för att skapa en känsla av att någon hjälper en. Få information och interface för ärendehantering som kan processas vidare automatiskt där kunden själv inte har behörigheter.


Den tragiska sanningen är att väldigt många organisationer som sitter på språkprocesser och ev. data inte ens kan nyttja nuvarande teknik för att infrastrukturen är extremt oflexibel och det är sällan rätt data som sparas från processerna.


Handläggare


Olika inkommande texter i eposter och formulär som ofta består av enklare "actions" som skall utföras eller delegeras till rätt person. Någon form av bedömning efter satta kriterier skall ske. Med rätt data och modeller är detta nästan trivialt att få till.




Skriva


Transformers är läskigt bra på att förutspå nästa token. Detta innebär att dem är fantastiska hjälpmedel när det kommer till att skriva texter. Kombinerar man språkförståelsen och textgenerationen får man olika typer av översättare. Det kan vara mellan olika språk. Det kan vara mellan olika stillar att skriva en text eller modeller för att skriva sammanfattningar.


Journalist

En modell som är anpassad efter dig och hur du vill skriva hjälper dig förutspå nästa ord. Den tränas på dina favorittextproducenter och dig själv för att bättre förstå hur du vill skriva. En autocorrect på steroider. Jag kommer att visa lite demos på detta inom kort. Detta är fantastiskt om du är författare eller journalist, direkt feedback och ett bollplank i den stilen du vill. Du fokuserar på budskapet och research.


Kommunikatör


I en organisation så kanske det finns olika noder som förmedlar information. Väljer relevanta bitar och kokar ner det till godbitarna. Kanske genereras det texter baserat på tabeller eller annan data som lättare kan tolkas i ett kort format.


Copywriter


Hur når man en invidiuell kund på bästa sätt? Genom personliga skräddarsydda budskap såklart. Med rätt data är detta väldigt genomförbart.




Tips


Jag ser gång på gång personer som skall göra "AI" men det är sällan någon av de nya effektivare modellerna som implementeras. Det finns en stor kompetensbrist i Sverige. "AI" är ett hett ämne som tyvärr lockar till sig mycket bullshit. Det krävs en hel del resurser och riktiga framsteg eller unika modeller görs väldigt sällan på en laptop. Konsultbolag är ute efter att sälja timmar och inte lösta problem. Turbulensen kring de olika framstegen gör att alla ligger efter och det är extremt tidskrävande att hänga med även om man har rätt förutsättningar.