Maskininlärning med boostrapping Maskininlärningslabb i Språkteknologi
Abstrakt Vi undersöker, med hjälp av maskininlärningslabben från denna kurs, hur pass bra resultat bootstrapping ger i samband med den data som ges till laborationen. Vi har delat upp datan i flera mängder i olika storlekar och börjar med att jämföra en liten del färdigtaggad data från testdatan i labben. Denna data har vi använt för maskininlärning och sedan applicerat på den större delen från testdatan. Vi jämförde sedan detta resultat med att använda den lilla taggade mängden med den stora otaggade mängden tillhörandes labben som vi delade upp i tre olika storlekar. Vi använde då den först taggade datan på den minsta av dessa mängder, applicerade maskininlärning på den nya taggade mängden och använde detta på en större mängd o.s.v. genom Bootstrap-teorin. Vi såg att i detta fall var det inte värt att handtagga en större mängd data utan att den lilla mängden lätt kunde appliceras genom bootstrapping för att få ett bättre resultat.
Abstrakt Inledning Bakgrund Begrepp Täckning Precision Accuracy Bootstrap Matematisk teori Metod Resultat Diskussion Förbättringar Slutsats Referenslista
Inledning Vi har valt att undersöka fördelarna, om det finns några, med bootstrap- taggning på data samt hur detta förhåller sig till om man taggar data för hand. Bakgrund I maskininlärningslaborationen så fick vi prova på att jobba med att låta ett program klassificera olika data med olika taggar utifrån en träningsdata. Vi tyckte detta var intressant och bestämde oss för att göra vårt projekt om maskininlärning. Vi hade tidigare stött på begreppet Bootstrapping och tyckte att det vore kul att undersöka och testa tidsskillnaden mellan att använda bootstrapping för att tagga data, med god precision, jämfört med att göra det för hand. Vi tänkte använda oss av Weka 1 som är ett word mining program för att genomföra vår bootstrapping. Men då dokumentationen var bristfällig om hur man kan genomföra bootstrapping så valde vi att kolla på alternativa lösningar. Det alternativ som vi iställer valde att använda var koden från maskininlärningslaborationen. 1 http://www.cs.waikato.ac.nz/ml/weka/ 271212
Begrepp Täckning Täckningen ger ett mått på hur många fel som hittas i en text. Precision Precisionen ger ett mått på hur många av de alarm som ges som är korrekta. Accuracy Accuracy är ett mått på hur många object som klassificerats korrekt. Bootstrap Använder en mindre mängd statistisk data för att skapa en större. 2 Matematisk teori a= antal korrekt detekterade fel = antal korrekta alarm b = falska alarm c = missade fel täckning/recall R = a/(a+c) precision P = a/(a+b) M = antalet korrekt klassificerade objekt N = totala antalet objekt Korrekthet (accuracy) = M / N (x100) Metod Vi började med att undersöka hur bootstrappingen skulle kunna genomföras i programstrukturen 3 för maskininlärningslaborationen genom att bootstrappa otaggat data utan att egentligen ha haft någon ursprunglig taggad mängd som utgångspunkt. Detta för att få en siffra att utgå ifrån. Programstrukturen kollar på bland annat PoS- taggarna för att avgöra ett ords klassificering, eller tagg. Den tar även hänsyn till ord före och efter det ord som är i fokus. Sedan skapar programmet en uppsättning regler utifrån datamängden den arbetat på. Vi använde oss av filen news.txt som innehåller 10 000 ord och deras Part of Speech- taggar. Reglerna kan man sedan använda på en annan uppsättning data, som PoS- taggats på samma sätt, och utifrån 2 http://www.stat.rutgers.edu/home/mxie/rcpapers/bootstrap.pdf 090113 3 http://www.csc.kth.se/utbildning/kth/kurser/dd2418/sprakt12/labbar/labb5/ 080113
reglerna försöka klassificera den nya datan. Till slut kan man testa den nytaggade datan mot ett facit för att undersöka hur god precision ens regler haft. Det vi gjorde var att dela upp news.txt i 3 mindre filer innehållandes ca 2 000, 3 000 respektive 5 000 ord. Detta för att först träna programmet på en mindre mängd data och få ut en regeluppsättning av det. Därefter använde vi dessa regler för att träna programmet på den mellanstora mängden och få ut en ny uppsättning regler. Dessa användes på den stora mängden och de regler vi fick ut därifrån använde vi på testfil som vi sedan jämförde med facit för att beräkna precisionen. Det vi vill jämföra med är huruvida resultatet blir bättre om man handtaggar en större del och sedan bootstrappar eller om det är bättre att tagga en stor mängd data och sedan bara genomföra maskininlärning. Vi jämföre detta också med att bootstrappa otaggad data för att se att den lilla taggade mängden gjorde någon skillnad. Resultat Det vi började med var att genomföra bootstrapping på data som inte blivit taggad manuellt. Resultatet vi fick då var 8.9 %.
Efter att ha fått utgångssiffran genomfördes bootstrapping på en datamängd där gruppen hade handtaggat en del av datan (54/212 data taggades). Resultatet blev då 48.7 %.
Vi testade också mot en större handtaggad mängd utan bootstrapping och fick resultatet 13.27% vilket betyder att det inte alls är värt i det här fallet att handtagga data, utan att bootstrapping var ett mycket bra verktyg!
Diskussion Det första resultat vi fick var 8.9 % vilket är ett väldigt dåligt resultat och det man kan utläsa från statistiken är att det som gissades rätt på var entity. Entity - posten hade 62.5 % rätt vilket i förhållande till det totala resultatet är väldigt bra. Det man kan säga är att precisionen blev förhållandevis bra medan täckningen och accuracyn var dålig. Vi tror att detta beror på att programmet inte hade något att gå på egentligen utan att det mest var en slump att den hittade så förhållandevis många entity. Det bästa resultatet vi uppnådde var med en datamängd som var delvis taggad och sedan bootstrappade, 48.7 %. Vi tror att det resultat vi fick kan bero på ett antal olika saker. Bland annat att vi använde oss av facit för att tagga vår data. Eftersom vi tog bort de data vi tog från facit så kan det tänkas att resultatet försämrades. Det vi borde gjort är att vi borde låtit det vi tog från facit stå kvar eftersom det är dumt att ta bort data bara för det är rätt när vi strävar efter högre precision, utan att försämra täckningen. Det resultat vi uppnådde med en större taggad mängd som vi inte använde bootstrap på blev 13.27% vilket kan jämföras med den mindre mängden som var bootstrappad. Enligt teorin skulle resultaten vara snarlika ifall det inte skulle löna sig att göra bootstrap och skilja sig markant (med bootstrapping i top) ifall det inte skulle löna sig att handtagga mer data. Skillnaden blir då att bootstrapping fungerar ca 367% bättre i det här fallet, vilket vi hade hoppats på! Relativt sätt så gav bootstrappingen betydligt bättre accuracy än de andra två försöken men på det hela så är det egentligen för dålig för att ha någon praktisk tillämpning då resultaten inte ens nådde upp till 50 %. Att använda sig av maskininlärning som inte ens har rätt på varannat ord är suboptimalt. Laborationen i sig har uppnått högre resultat men i det här fallet skräddarsydde vi datan för att endast visa resultat i jämförelse gällande bootstrapping. Det vi först försökte använda oss av var Weka, men vi kunde inte riktigt få programmet att användas till det vi ville. Där hade vi tänkt använda oss av en helt annan mängd data som vi själva skapat; rubriker från tidningsartiklar och deras kategorier. Tyvärr kom vi inte så långt då bootstrapmöjligheterna med detta program var begränsade och det gick inte att använda taggad data på otaggad, eller ens en större fristående mängd. Efter vår redovisning försökte vi göra klart projektet men bestlutade oss för att börja om och använde oss av maskininlärningslabben istället vilket nu visade sig ge tillfredsställande resultat. Det som påverkar resultat är främst att maskininlärningen använder sig av PoS-taggar som måste skrivas in för hand och måste vara korrekta. Själva taggningen för bootstrapping var istället kategorierna så som Entity, Company, Place och Person. Datan var alltså dubbeltaggad, vilket inte spelade allt för stor roll så länge som en sorts taggning alltid fanns och var korrekt. Det vi egentligen hade velat använda oss av var en mängd som inte hade några taggningar alls och en annan mindre som hade en sorts taggning. Då hade man kunnat se resultat från en
större taggad mängd mot en liten taggad med bootstrapping. Hade resultatet skiljts sig? Vi tror att vårt resultat motsvarade teorin tillräckligt för att kunna motsvara ett sådant projekt. Förbättringar Det vi känner att vi hade kunnat göra bättre är att manipulera labbkoden så att den ger ännu bättre accuracy men då vi la så mycket tid på att försöka jobba med Weka så fanns inte riktigt den tid vi ville ha till optimera de resultat vi fick fram. Hade vi haft ännu mer tid så hade vi kanske också kunnat skapa ett eget program som är mer anpassat för just bootstrapping än vad labbkoden var. Slutsats Bootstrapping är en giltig metod, även i detta fall. Vi bekräftade teorin och fick tillfredsställande resultat om än inte till den utsträckning som normalt kan önskas. Weka verkar ha potential för liknande undersökningar men i så fall behövs betydligt bättre dokumentation.
Referenslista http://www.csc.kth.se/utbildning/kth/kurser/dd2418/sprakt12/, 2012, Kurshemsida med teori från DD2418 Språkteknologi http://www.csc.kth.se/utbildning/kth/kurser/dd2418/sprakt12/labbar/labb5/, 2012, maskininlärningslabb i DD2418 Språkteknologi http://www.cs.waikato.ac.nz/ml/weka/, 2012, Weka http://www.stat.rutgers.edu/home/mxie/rcpapers/bootstrap.pdf, 2003, Kesar Singh och Minge Xie, Rutgers University