Ny Google Ngram annoterad: Klassbaserad prediktion i n-gram tycks möjlig

2012-10-24
När jag behövde ersätta 2-gram filer jag råkat radera idag såg jag att Google Ngram uppdaterats. Dels har av allt att döma mängden data om ngram co-occurance (viss risk att jag bedömde fel från antal och storlek givet övriga uppdateringar) men viktigare finns nu information om de viktigaste ordklasserna (ex. markörer för adjektiv och verb).

Den fördel jag ser (egentligen den enda jag ser för egen del och gissar för de flesta om metoden är mer allmän känd) är att det går att förbättra prediktion i ngram-modell ganska tydligt samtidigt som problematik med att vissa co-occurance kombinationer saknas lättare kan hanteras.

Tänker vi oss enklaste möjliga n-gram modell predikterar vi nästa ord från föregåendes "sannolikhet" och jag sätter citationstecken därför att det mindre är sannolikhet och mer en ganska dålig approximation via ett s.k. Markov-antagande.

För ngram-modeller som gör prediktioner som bygger på fler ord bakåt blir det ganska snabbt bättre. Ofta uppges att förbättringen når "praktiskt" bästa värde vid 5-grammen varefter värdet föga ökar medan givetvis minnes- och beräkningskostnad ökar desto mer för varje steg. Det gäller vanliga ngram-modeller men med varianter går det visst att nå bättre resultat med mer data än 5-gram beroende på vad du vill göra. För att bara prediktera orden framför räcker det dock säkert utmärkt medan andra slutsatser vinner på mer data bakåt.

Kan vi öka värdet av prediktionen från n-gram modell som bygger på n stycken ord bakåt genom att utnyttja statistik rörande sambanden ex. mellan ordklasser som adjektiv och verb vinner vi normalt alltid på det rätt gjort därför att medan vi expanderar antalet ord bakåt vi använder ökar beräknings- och minneskostnad ordentligt i varje steg medan semantiskt information fint går att lägga med en "linjär-kostnad" billigare (detta är dock något beroende av hur tillämpningen exakt är rörande vad som är möjligt där tillämpningar för mig mindre har att göra med språkrader och mer grupper av aktiverade koncept relaterade med varandra i komplexa grafer).

Förutsättningen för att det ska vara meningsfullt är så klart att bra algoritmer med faktiskt värde utan att vara plågsamt slöa. IBM publicerade några stycken tidigt (någon gång under 1990-talet) och även om jag är säker på att många varianter publicerats - och inte otroligt bättre - tror jag att för normala applikationer ger de ungefär det värde man rimligt kan förvänta sig.

Utan hänsyn till kunskap från ordklassen skulle enklaste tänkbara n-gram modell prediktera med approximationen:

    P ( nästa ord vi söker GIVET alla föregående ord i texten ) = P ( nästa ord vi söker GIVET föregående ord )

När vi lägger till kunskap om ordklassen är enklaste tänkbara modell under Markov-antagande som både utnyttjar föregående ord och en viss ordklass:

    P ( nästa ord vi söker GIVET alla föregående ord i texten ) = P ( ordklass för ordet vi söker GIVET ordklass för föregående ord) * P ( ordet vi söker GIVET ordklass )

Jag tror varianten ovan stämmer med hur IBM uttryckte den ena av modellerna. Praktiskt är just denna man kanske hellre inte väljer. Den gör en del antagande rörande antalet ordklasser eller kategorier vi anser möjliga för ordet som sällan är enkla att få att fungera. Tänker och minns jag rätt hamnar man i att man bäst behöver ha en kategori per ord.

Den andra varianten är bättre och har kanske mindre kända värden för situationer där vi gör operationer vi kan jämföra med översättning. Tänkbart relevant för att ta dokument, nyheter, webbsidor, databas-information m.m. för att sammanfatta ner till ett meta-språk för vidare analys eller för att skapa en behändig sammanfattning till sökresultat eller annat (samma forskare vid IBM har förövrigt publicerat en del om översättning men minns jag rätt rörande andra algoritmer).

Ett värde troligt intressantare för fler är att det är möjligt att hantera brist på statistik om sam-förekomst på ett till sätt. Oavsett hur mycket testdata man samlar på sig är det aldrig nog. Laplace-smoothing, Good turing m.m. är ju vad många använder men har begränsningar och i vissa applikationer där fel just nära noll får stort avtryck olämpliga (kanske är rent av att kasta situationer där avsaknaden av datat inträffar att föredra för att hämta ett nytt sample hellre än att riskera modellernas korrekthet för vad som är mycket troligare). Genom att utnyttja markeringarna för ordklasser för att skapa kluster passande vad vi vill ha ngram-modellen till (själv skulle jag tänkbart ex. acceptera taggen för verb varande ett verb och sedan ta ut dess subklass för att beräkna dess nivå i concretness och abstract, och göra en liknande operation med adjektiv, men ev. strunta i resten).

En till möjlighet är att utnyttja att Google Ngram just sträcker sig långt tillbaka i tiden rörande indata och innehåller en försvarlig andel felstavningar genom att utnyttja ordklasserna tillsammans med annan statistik och så långt det går givetvis ev. strikt kunskap man har för att samla ord med likartad betydelse oavsett stavfel eller genom åren ändrad stavning i kluster för att därigenom hantera ex. ovanliga felstavningar. Det senare är mindre intressant för mig men troligt en bra möjlighet för många applikationer och IT-system som behöver hantera varierat språk som kommer in.

Vidare är det lättare att ta ngram-statistiken för engelskan och kombinera ex. med den för japanska för att i mötet ta ut mer kunskap om orden. Det är dock troligt enklare med ev. också större värde att göra via enklare vägar som Wikipedia. Men det är möjligt via varianter här också.

Möjlighet för studenter som vill komma före i karriären


Oavsett copyright hade jag för det här datat gärna sett en rimligt prissatt kommersiell lösning innebärande att någon annan sparar ner alla filerna, med alla artiklar, och allt annat intressant på en lite mobil-hårddisk som sedan kom hemskickad. Det är tidsödande att ladda ner och sedan ska det packas upp och extraheras till internt-format. Och sedan i värsta fall upptäcker man att en fil råkat komma två gånger utan feldetektion och så får man börja om med extraktionen.

Däremot ett passande projekt för t.ex. en datastudent för att få erfarenhet av att arbeta mot kravspecifikation av datarepresentation (den verklighetsförankring arbetsgivare alltid tittar efter). Dessutom är det big data... Det enda inom data som är manligt.

Jag skulle här rent av om tjänsten kommer med bevakning av nya uppdateringar förutom 500 - 1500 kr mobil-hårddisk kunna tänka mig en ersättning av rent av 200 kr + porta (eller kostnad bussbiljett för hit-resan) vilket verkligen är mer än vad det bör ta i tid för någon yngre och mindre disträ än vad jag är. En verkligt fin möjlighet både för att tjäna extra pengar och bygga upp ett kraftfullt CV redan innan universitet är klart!