Klassificering av Named Entities utan handannoterad träningsdata CHRISTOPHER RASCHKE Examensarbete Stockholm, Sverige 2012
Klassificering av Named Entities utan handannoterad träningsdata CHRISTOPHER RASCHKE 2D1021, Examensarbete i datalogi om 30 högskolepoäng vid Programmet för datateknik 270 högskolepoäng Kungliga Tekniska Högskolan år 2012 Handledare på CSC var Stefan Arnborg Examinator var Johan Håstad TRITA-CSC-E 2012:035 ISRN-KTH/CSC/E--12/035--SE ISSN-1653-5715 Kungliga tekniska högskolan Skolan för datavetenskap och kommunikation KTH CSC 100 44 Stockholm URL: www.kth.se/csc
Referat Denna rapport tar upp och behandlar det språkteknologiska ämnet Named Entity Recognition. Den tar upp ämnet i sig, varför det är viktigt och hur andra har löst problemet. I det inledande kapitlet presenteras två tidigare utvecklade system. Dessa system utvecklades för att användas under MUC, som är en konferens där områden rörande Information Retrieval behandlas, och byggde på två helt skilda angreppssätt till problemet. Det första systemet byggde på en maskininlärare som lärde sig av på förhand handannoterad text. Det andra systemet använde sig av en helt annan teknik, den hittade Named Entities med hjälp av fördefinierade regler och mönstermatchningar. Dessa två system kom att bli den grund och inspirationskälla som hela arbetet grundades på. Under projektets gång togs tre klassificerare fram; en maskininlärningsbaserad, en regelbaserad och en listbaserad (lik mönstermatchning). Rapportens uppgift är att dokumentera processen kring utvecklingen av dessa system, upkomna problemen, samt resultat. Det största problemet vid utvecklingen av systemet var avsaknaden av annoterad träningsdata. Detta problem löste jag genom att ladda ner en dump av engelska wikipedia och sedan använda listor med säkra entiteter för att automatiskt generera träningsdata. Resultaten presenteras med hjälp av genererade stolpdiagram som använder sig av de inom Information Retrieval ganska standardiserade måtten; Precision, Recall och F-measure. Test utförs inte bara för varje klassificerare för sig utan även med kombinationer av klassificerare. Testerna utförs på tre olika typer av text: faktatext, nyhetstext och boktext. Det bästa resultatet erhålls när alla tre klassificerare kombineras för att märka upp en faktatext. Vid detta test lyckades systemet uppnå en F-Measure på 71%, Precision på 90% och en Recall på 58%.
Abstract Classification of Named Entities without the use of a handannotated trainingset This report treats the subject of Named Entity Recognition. It starts by explaining the problem, why it is interesting and why it is useful. Two systems from one of the MUC conferences (a yearly conference that focuses on Information Retrieval oriented tasks) are studied. They where both Named Entity Classifiers but they completed their task in two very different ways. One solved the problem using a Machine Learner that used hand annotated training samples to learn the concept of Named Entity Recognition. The other one however, used a very different approach, it used predefined rules and pattern matching to solve the same problem. These systems became very important inspirational sources and provided ideas for the later development of my own Named Entity Recognition System. I developed three different classifiers, all based on the three designs found in the MUC-systems, and eventually combined them into a single classifier. The purpose of this report is to document the process of that development, from the ideas in the MUC-systems to the performance and results of the new one. It documents the progress as well as the road bumps and how I managed to get pass them. One of the major setbacks was the lack of hand annotated training data that later resulted in me developing my own method for generating data. The solution, which is explained in greater detail in the report, was to use a dump of the English Wikipedia and use it together with lists of (almost) sure-fire entities. The results are shown using automatically generated bar charts showing the performance with standard Information Retrieval measurements; Precision, Recall and F-Measure. There are quite a few tests being made in the results section. The three different classifiers are tested both individually and using their combined efforts. Texts taken from different context are also used. The highest score among the result is achieved while using the combined efforts of the classifiers on factthemed texts. This combination yields a respectable 71% in F-Measure, 90% Precision and 58% Recall.
Innehåll 1 Introduktion 1 1.1 Bakgrund och Syfte........................... 2 1.2 Kort om skriftkonventioner....................... 2 1.3 Information Retrieval - Grundläggande begrepp............ 3 1.4 En kort introduktion till Named Entity Recognition -problemet.. 4 1.5 Klassificering av engelsk text med entiteter från MUC........ 5 1.6 Bakgrund i tidigare forskning...................... 6 1.6.1 MENE............................... 7 1.6.2 LTG................................ 10 1.7 Precision och Recall för NER-problemet................ 11 1.8 Definitioner................................ 12 2 Det utvecklade systemet 15 2.1 Motivering................................. 15 2.2 Tolkning av NE-problemet........................ 15 2.3 Framtagning av träningsdata...................... 16 2.4 Struktur.................................. 18 2.4.1 Indata och Sentence....................... 18 2.4.2 Övergripande struktur...................... 18 2.4.3 Maskininlärningsbaserad klassificerare............. 20 2.4.4 Regelbaserad klassificerare.................... 25 2.4.5 Listbaserad klassificerare.................... 26 2.5 Projektets fortgång............................ 27 2.6 Teori bakom komponenter i systemet.................. 27 2.6.1 Kort om Maskininlärning.................... 27 2.6.2 Sökning i lösningsrummet med hjälp av Bellman Fords Algoritm 28 3 Testkörningar 31 3.1 Maskininlärningsbaserade Klassficeraren................ 32 3.2 Regelbaserade Klassificeraren...................... 32 3.3 Ordlistbaserade Klassificerearen.................... 33 3.4 Sammanslagning av de tre klassificerarna............... 33
4 Slutsatser 37 5 Kritik 39 5.1 Kritik mot arbetet............................ 39 5.2 Källkritik................................. 40 6 Litteraturlista och referenser 41 6.1 Internetresurser.............................. 42 Bilagor 42 A Bilaga 1 43 A.1 Nyhetstexter............................... 43 A.1.1 Artikel 1.............................. 43 A.1.2 Artikel 2.............................. 44 A.1.3 Artikel 3.............................. 45 A.2 Faktatexter................................ 49 A.3 Boktexter................................. 52 A.3.1 Alice in Wonderland....................... 52 A.3.2 Angels and Demons....................... 53 A.3.3 The Sun also Rises........................ 56
Kapitel 1 Introduktion Denna rapport behandlar det språkteknologiska problemet Named Entity Recognition för Engelsk text. Named Entity Recognition som i fortsättningen ofta kommer att förkortas NER är problemet att, givet en text, markera ett antal på förhand definierade namngivna entiteter. Exempel kan vara Personer, Platser, Tider osv. Man vill alltså mata in en text som inte nödvändigtvis innehåller någon metadatainformation utan består av ren skriven text och ut förväntar man sig samma text fast med alla personer, platser och tider mm utmärkta i texten. Ett system som löser detta problem brukar kallas för en Named Entity Recognizer också förkortat NER eller NER-System. Det utdata som ett NER-System ger är sällan tänkt att läsas direkt, även om det är fullt möjligt att göra så, utan ingår i ett större system. Exempelvis kan det användas inom området Textsammanfattning för att veta vad det talas om i en text. NER ligger också nära problemet Coreferencing och används ofta som en delkomponent i sådana lösningar, som exempelvis i [COREF]. Problemet Coreferencing handlar om att försöka ta reda på vem man refererar till, i en eller flera meningar. Exempelvis kanske man vill veta vem som är han i meningarna: Robert äter frukost och Yngve klättrar upp i ett träd. Sedan hoppar han ner. Det kan då vara nödvändigt att veta vilka personer som finns i meningarna, i detta fall Robert och Yngve. Ett NER-system kan då användas för att hitta sådana entiteter. Andra tillämpningsområden kan vara i sökmotorer för att kunna ta fram metadata, eller för att hitta ett likhetsmått mellan dokument. Att jämföra två dokument är naturligtvis svårare för en dator än för en människa eftersom en dator oftast inte kan förstå texten. Dock kan entiteter vara en bra del i ett likhetsmått mellan dokument. Datorn kan exempelvis ta fram entiteterna February 3, 1959, Iowa och Buddy Holly som tillsammans beskriver händelsen The day the music died. Om ett annat dokument innehåller ett set av entiteter, säg; February 3, 1959, Iowa och Ritchie Valens, vilket har två entiteter gemensamt med det första så är likheten mellan dokumenten relativt hög. Det är då troligt att de bägge dokumenten talar om samma händelse. Det kan vara lätt att tro att alla entiteter är egennamn men så är inte fallet. Mån- 1
KAPITEL 1. INTRODUKTION ga entiteter i texter är egennamn, ofta personer och platser, men det finns många entiter som inte är det. Exempel på entitetstyper som sällan/aldrig är egennamn är tider, tidpunkter, datum, valutauttryck och procentsatser. 1.1 Bakgrund och Syfte Arbetet med rapporten initierades av konsultföretaget Findwise som ville använda produkten som en opensource-lösning och delkomponent i vissa av sina söklösningar. När projektet startade var vi två personer som jobbade med projektet. Jag och en klasskamrat från KTH, Johan Wessman. Det var från början meningen att projektet endast skulle innefatta en klassificerare, som byggde på maskininlärning. Under arbetets gång upptäckte vi dock hur svårt det var att hitta bra träningsdata för denna klassificerare, så vi valde att försöka attackera problemet på två olika sätt. Johan förbättrade den maskininlärningsbaserade klassificeraren med hjälp av en metod som heter Active Learning. Jag valde istället att skapa två ytterligare klassficerare, en regelbaserad och en listbaserad. Dessa tre klassificerare kombinerade jag sedan för att kunna dra nytta av styrkorna hos alla de tre. Rapportens syfte är att dokumentera det arbete som gjorts för att komma fram till ett NER-system bestående av tre komponenter eller Klassificerare. Rapporten dokumenterar arbetet såväl som de vägval som gjorts innan och under processen. Den förklarar och senare använder sig av de språkteknologiska begreppen Precision, Recall och F-Measure för att ge ett mått på hur det framtagna systemet presterar. Resultaten från två toppresterande system i världen presenteras såväl som en inblick i hur deras system fungerar. Mot slutet av rapporten följer en kort teoretisk genomgång av några av de kritiska komponenterna i det utvecklade systemet och ett avsnitt med slutsatser. I slutsatsen reflekteras över resultaten såväl som arbetets gång. I det avslutande kapitlet Kritik finns sedan en sektion med kritik som dessutom innehåller en redogörelse för vad som hade kunnat göras annorlunda. 1.2 Kort om skriftkonventioner I denna rapport kan vissa ord förekomma på såväl svenska som engelska, vilket är en följd av att vissa ord och ordföljder inte har någon självklar översättning till svenska. Dessutom är det vanligt att längre ordföljder förkortas efter att de skrivits ut i klartext första gången. Det tydligaste exemplet på detta är Named Entity Recognition som genom rapporten oftast förkortas som NER, dock kan NER även vara en förkortning för Named Entity Recognizer vilket alltså är en referens till systemet snarare än problemet. För att göra det hela begripligare så finns det en lista på definitioner i avsnitt 1.8. När ett ord, som förekommer i ordlistan, dyker upp första gången så kommer ordet dessutom att vara tjockare. Detta gäller från och med nästkommande sektion Information Retrieval - Grundläggande begrepp. 2
1.3. INFORMATION RETRIEVAL - GRUNDLÄGGANDE BEGREPP När det refereras till en artikel som även finns i Referenslistan så används hårda hakparenteser och en kort kod. Denna kod kan sedan slås upp i referenslistan. I samma avsnitt finns det sällan fler än en referens till samma källa, även om information är tagen från samma källa på flera ställen i samma avsnitt. I rapporten förekommer även en försvenskning av det engelska ordet Tag som innebär märkning. Orden Tag (engelska), Tagg (försvenskning) och märkning (korrekt svenskt ord) används men betyder samma sak. 1.3 Information Retrieval - Grundläggande begrepp Named Entity Recognition -problemet, som presenteras i nästa sektion, ingår i problemkategorin Information Extraction som i sin tur är en typ av Information Retrieval 1. I Information Retrieval (förkortas IR) ingår problem som går ut på att hitta dokument, information i dokument och metadata kring dokument 2. Ett stort problem inom IR är hur man skall kunna veta hur bra ett system presterar (system evaluation). Senko skriver i [IR]: Without a doubt system evaluation is the most troublesome area in IR... Problemet grundar sig i att människor tolkar information annorlunda vilket gör det svårt att avgöra om ett resultat är relevant. Det är ofta svårt att avgöra vems åsikt som väger tyngst, skribentens (den som skapat dokumentet) eller läsarens? Inom IR används ofta två viktiga relevansmått: Precision och Recall. Om vi använder problemet; sökning efter dokument som bas för våra definitioner så innebär precision; hur stor andel av den totala returnerade mängden av dokument som var relevant för sökningen och recall; hur stor andel av alla dokument som fanns att välja mellan som hade relevans returnerades. Den mer exakta definitionen för precision lyder: precision = {Alla tillgängliga relevanta dokument} {Returnerade dokument} {Returnerade dokument} och för recall: recall = {Alla tillgängliga relevanta dokument} {Returnerade dokument} {Alla tillgängliga relevanta dokument} 1 http://en.wikipedia.org/wiki/information_extraction 2 http://en.wikipedia.org/wiki/information_retrieval 3
KAPITEL 1. INTRODUKTION Definitionen för precision och recall skiljer sig dock åt beroende på vilket problem som det tillämpas på. För en definition av precision och recall för just NERproblemet så finns avsnittet: Precision och Recall för NER-problemet. Det händer ofta att man vill ha något sammanslaget mått för hur bra ett IR system presterar. För detta fall finns F-measure som är det harmoniska medelvärdet av precision och recall. Måttet F-measure myntades 1978 av Van Rijsbergen som presenterade det nya relevansmåttet i [F-MEASURE]. F-measure har på senare år blivit vanligt förekommande inom IR-sammanhang, och det är vanligt att IR system jämförs baserat på deras F-measure. F-measure definieras ofta som: F-measure = 2 Precision Recall (Precision + Recall) Eftersom F-measure ofta används för att jämföra hur bra olika system är, relativt varandra, så är det ibland också relevant att vikta hur viktigt precision relativt recall är. Då precision och recall inte anses vara exakt lika viktiga används istället: F-measure = (1 + β2 ) Precision Recall (β 2 Precision + Recall) Det är lätt att inse att den övre F-measure formeln endast är ett specialfall, där precision och recall viktas lika, av den senare. 1.4 En kort introduktion till Named Entity Recognition -problemet Named Entity Recognition (förkortas NER) är uppgiften att dela upp meningar i delmeningar där varje delmening motsvarar en entitet. En entitet kan ses som ett samlingsnamn för ett visst koncept eller klass som man försöker kapsla in med hjälp av NER. Vad en entitet egentligen är kan skilja mycket från fall till fall och det kan därför vara lämpligt med ett exempel. Nedanstående exempel är en svensk mening bestående av elva ord som alla skiljs åt av mellanslag: Lisa åt 15 äpplen och 20 till 30 kakor och bullar Vi väljer nu att denna mening skall delas upp i två entiteter; mängder och godsaker. När vi nu kapslar in dessa entiteter så försöker vi fånga in alla närliggande ord i meningen som refererar till samma entitet. Om vi nu lägger till lämplig notation för entiteterna i ovanstående mening så får vi: 4
1.5. KLASSIFICERING AV ENGELSK TEXT MED ENTITETER FRÅN MUC Lisa åt <mängd>15</mängd> <godsaker>äpplen</godsaker> och <mängd>20 till 30</mängd> <godsaker>kakor och bullar</godsaker> I texten ovan används en såkallad taggning där entiteterna inkapslas av starttagg <> och sluttag </>. En sådan taggning är inte avsedd att läsas direkt av någon som är intresserad av innehållet i meningen, då den är ganska otymplig, utan är oftast avsedd för användning av något annat system/program. Exempelvis kan denna taggning användas för att hitta en viss typ av innehåll vid en sökning eller för att kunna sammanfatta en text. Speciellt gäller också att ordföljder som refererar till samma entitet men skiljs av av antingen något som inte hör till entiteten eller en annan entitet kommer att behandlas som två entiter. Detta beror på att taggningen som beskrivs ovan inte på något naturligt sätt kan inkapsla ordföljder som är separerade. Denna notation kommer hädanefter att användas fritt i rapporten utan vidare förklaring för dess innebörd. Det bör också poängteras att detta sätt att markera entiteter, med taggar, inte är det enda sättet att markera entiteter och inte heller nödvändigtvis det vanligaste. NER används inte bara för att klassificera entiteter i riktig skriven text utan det används exempelvis också inom biomedicin för att markera saker som proteiner, DNA, RNA mm 3. Systemet som rapporten behandlar kommer dock endast att hantera engelska meningar som är tagna ur skriven text. Systemet diskuteras vidare under rubriken 2. Det utvecklade systemet 1.5 Klassificering av engelsk text med entiteter från MUC Vårt system har utvecklats för att hitta och klassificera entiteter i vanliga engelska texter i exempelvis nyhetsartiklar och böcker. En fråga man naturligt ställs inför vid skapandet av ett sådant system är; vilka entiteter ska systemet försöka hitta? För att svara på den frågan kan man titta på vilka entiteter som andra använt sig av. Under The Message Understanding Conferance (forkortas MUC) diskuteras olika aspekter kring området Information Extraction. Vid den första MUC Konferansen (MUC-1) skapade man en lista med 7 viktiga och distinkta entiteter 4 : Lista över MUC-entiteter Platser: vilket kan vara vilken plats som helst, såväl riktiga platser som påhittade. Exempel: New York, Storgatan 12, KTH Campus, Middlearth. Personer: är namn på personer, djur och fiktiva karaktärer. Exempel: Elvis Presley, Dolly, Batman. 3 [BIOMED-NE] 4 http://www.cs.nyu.edu/cs/faculty/grishman/muc6.html 5
KAPITEL 1. INTRODUKTION Organisationer: kan vara organisationer, företag, statliga enheter och välgörenhetsorganisationer. Exempel: Microsoft, Sweden-Japan Foundation, Riksdagen, Läkare utan gränser. Datum: vilket är just datum eller uttalanden om dagar eller tidsepoker. Exempel 05/05/2010, 5:e januari 2012, imorgon, på onsdag. Tider: klockslag eller utryck som talar om en tidpunkt. Exempel Klockan 12, 22:30, om 17 minuter. Procentsatser: är mängder uttryckta i procent. Exempel: 100%, 92.28237%, fyrtiosju procent Valuta: ord eller meningar som talar om en viss mängd av en viss valuta. Exempel 200 USD, 34 cent, två hundra riksdaler. Vidare kategoriserades dessa med tre samlingsnamn: ENAMEX, NUMEX och TIMEX. I kategorin ENAMEX ingår platser, personer och organisationer. I kategorin TIMEX ingår datum och tider och i kategorin NUMEX ingår slutligen procentsatser och valuta. Dessa val av indelningar för entiteter har kommit att bli något av en grund inom NER sammanhang 5 även om listan med åren har utvecklats till fler indelningar där vissa använder så mycket som 200 olika typer av entiteter 4. Denna uppdelning beskrivs mer utförligt i [NE-TASK] där även exempel på svåra specialfall hanteras. Det bör även poängteras att definitionen av vad som skall ingå i en entitet ibland är aningen tvetydig och det kan ofta vara så att två lösningar kan anses som rätt (eller snarare kan bägge dessa anses icke felaktiga). Just denna problematik med tvetydighet behandlas under rubriken 2.2 Tolkning av NE-problemet där även viktiga skillnader från den allmänna uppgiftsbeskrivningen beskrivs. 1.6 Bakgrund i tidigare forskning Nedan presenteras en kort sammanfattning av innehållet, samt relationen mellan innehållet och det utvecklade systemet, i två forskningsartiklar. De två artiklarna har varit inflytelserika under utvecklandet av systemet. Den första artikeln (med två delar), [MENE-1] och [MENE-2], beskriver ett system som bygger på maskininlärning. Detta system har lagt grunden för utvecklandet av den maskininlärningsbaserade klassificeraren. Man kan säga att MENE-artikeln var den artikel som arbetet utgick från i början. När arbetet senare kom till en vändpunkt (som beskrivits tidigare) så kom artikeln LTG att bli mer inflytelserik. Tyvärr innehöll denna artikel väldigt få konkreta exempel men den kom att influera arbetet snarare med en idé, nämligen idén att kombinera olika klassificeringstekniker. 5 http://en.wikipedia.org/wiki/named_entity_recognition 4 http://nlp.cs.nyu.edu/ene/ 6
1.6. BAKGRUND I TIDIGARE FORSKNING 1.6.1 MENE Förkortningen MENE står för Maximum Entropy Named Entity vilket också är namnet på det system för NER som utvecklades av Andrew Borthwick inför MUC- 7. Systemet presenterades i två rapporter; den längre [MENE-2] och den lite mer kortfattade [MENE-1], vilka förklarade hur man kan modellera NER-problemet till ett problem som kan lösas med maskininlärningsalgoritmen Maximum Entropy. Vid MUC-7 -testkörningen presenterades resultat för hur systemet presterade samt en del detaljer kring viktiga komponenter i systemet. Uppgiften som MENE-systemet utför är att det givet en text, går igenom alla ord i texten tilldelar alla en Label. Denna Label är uppdelad i två delar; entitetsnamn och positionssuffix. Entitetsnamnet är något av de namn som återfinns i listan Lista över MUC-entiteter i avsnittet 1.5: Klassificering av engelsk text med entiteter från MUC eller annat / other i fallet då den märks som inte en entitet. Positionssuffixet är något av: _start, _continue, _end och _unique, vilka anger vilken position som ordet har i entiteten: _start _end _continue _unique Inleder en entitet Avslutar en entitet som inletts med _start Befinner sig någon stans mellan _start och _end i en entitet Anger att ordet i sig utgör hela entiteten När dessa suffix slås samman med entitetsnamnet så bildar dom en Label för det aktuella ordet. Detta illustreras enklast med ett exempel (som eftersom MENE systemet främst behandlar engelska texter valts att skrivas på engelska): Rutger Ruben Larsson flew to Paris Med korrekt märkning skulle detta exempel passera ut ur MENE-systemet som: Rutger Ruben Larsson flew to Paris person_start person_continue person_end other other location_unique Det finns fyra suffix och sju entiteter, samt other, vilket totalt utgör 29 möjliga märkningar/klassificeringar. Dessa märkningar utgör en mängd av futures (som inte ska förväxlas med features) för den modellering av Maximum Entropy som används. Vilken Label som väljs för ett ord beror på dess history, vilket i ME sammanhang innebär all den tillgängliga data som hjälper dig i valet av future. Vad vi försöker göra är alltså att avgöra vilken future f som är bäst lämpad givet dess history h, vi försöker alltså maximera: p(f h), vilket i ord motsvaras av: sannolikheten för f givet h. Kopplingen mellan future och history utgörs av binära såkallade features. Features beskrivs enklast som en 7
KAPITEL 1. INTRODUKTION fråga som ger systemet information om hur instanser skall klassificeras. Eftersom features i detta fall är binära så har frågan bara två möjliga svar ja och nej eller 0/1 som det ofta brukar skrivas. En fråga skulle kunna vara börjar ordet med en stor bokstav? där möjliga svar är ja och nej. Svaret på denna frågan ger systemet en bra ledtråd till huruvida instansen kan vara entitet eller inte (då de flesta entiteter skrivs med stor bokstav (namn, platser, organisationer etc)). Features förkortas ofta g vilket kan vara praktiskt då man vill ange dessa med en lite mer matematisk notation. Nedan återfinns ett exempel, direkt taget ur [MENE- 1], på en feature som används i systemet: g(f h) = { 1, If current_token_is_captialized(h) = true 0, Otherwise Vilket är densamma som exempelfrågan ovan med tillägget att det endast gäller för platser. Maximum Entropy är ett axiom som säger att om du har testbar information för en sannolikhetsfördelning så är den fördelning som är närmast sanningen också den som bäst beskriver den information vi har (maximera entropin) 6. Denna princip kan användas inom Maskininlärning för lära en algoritm hur den skall klassificera probleminstanser genom att först träna sig på en mängd träningsdata (för mer information om maskininlärning se avsnittet 2.6.1 Kort om Maskininlärning ). Man försöker alltså att hitta den sannoliketsfunktion som bäst beskriver träningsdatat (maximerar informationen vi får ut ur datat (entropin)). Algoritmen tränas genom att den får se exempel (som exemplet ovan med Rutger) och har tillgång till både dess future och history. Träningen sker genom att alla features värde (0 eller 1) beräknas för varje träningsinstans och sedan skickas in tillsammans med dess future (i maskininlärningsammanhang ofta kallad target) så att algoritmen lär sig hur den skall vikta informationen som den får från olika features. När en viss mängd data har bearbetats så avbryts träningen, om man då har lite tur så har träningsexemplen varit så pass varierade/generella och många, så att de täcker in framtida testkörningar. Detta också givet att de features man valt var tillräckliga för att greppa de koncept som man försöker kapsla in. MENE systemet använder ett stort antal features, vilka många är av snarlik karaktär. Dessa features kan grupperas under ett gemensamt samlingsnamn. I [MENE-1] och [MENE-2] grupperas features under namn som Lexical Features, Section Features osv, dock kommer det hädanefter också införas notationen featureclass som refererar till en gruppering av features, vilken som helst. Det bör dock noteras 6 http://bayes.wustl.edu/etj/articles/theory.1.pdf 8
1.6. BAKGRUND I TIDIGARE FORSKNING att denna notation inte används i dokumentationen för MENE utan är något som jag själv använder. MENE består av fem stora featureclasses, vilka beskrivs nedan: Binary Features: Samtliga Features är binära i sin output så tillvida att de endast kan vara sanna eller falska för den speciella instansen som de testas på. Binary Features innebär dock features som är oberoende av kontext och datakällor. Dessa features kan bestå av svaren på frågor som Är första bokstaven i ordet stor eller Består ordet av exakt fyra siffror. Dessa features kräver inga uppslag i externa resurser eller liknande. Lexical Features: Innehåller features som beror på ord som befinner sig i närheten av den instans som just skall klassificeras. Ett exempel kan vara: Är ordet framför instansen just ordet Mr? Section Features: Är de features som baseras på i vilket avsnitt eller i vilken posision som ordet befinner sig i. Det är exempelvis större sannolikhet att entiteter förekommer i titlar av nyhetsartiklar än i den vanliga brödtexten. Dicionary Features: Består av uppslag mot ett stort antal ordlistor. Kan vara features som: Finns ordet som skall klassificeras i listan över kända anglosaxiska namn?. External System Features: Är features som består av frågor till ett externt system. I MENE fallet innebär detta endast anrop till systemet Proteus som också är en NER. Features av denna karaktär kan vara saker som: Tror proteus att detta exempel borde klassas som en person?. När systemet klassificerar en mening så får man för varje token/ord ut ett förtroendetal (ibland kallat alphavärde i [MENE-1] och [MENE-2]) som anger hur mycket systemet tror på en viss klassificering. Man söker sedan igenom meningens samtliga lösningar/ möjliga klassificeringar, eller lösningsrummet, gör att hitta den troligaste (och samtidigt möjliga) klassificering. Den naiva ansatsen till ett sådant problem hade varit att enbart plocka den klassificering som har högst sannolikhet i varje steg men detta är tyvärr inte möjligt. Skulle man välja den naiva ansatsen så skulle det kunna uppstå fall som person_continue följt av location_end vilket inte är möjligt. För att hitta en möjlig klassificering använder man sig istället av en så kallad Viterbi Search. Hur en Viterbisökning egentligen går till kommer inte denna rapport att behandla. Den något enklare Bellman Ford s -algoritm används istället i avsnittet Sökning i lösningsrummet med hjälp av Bellman Fords Algoritm för att lösa problemet på snarlikt vis. MENE tränades under MUC-7 på sammanlagt 100 artiklar om flygplansolyckor, dessa artiklar bestod av sammanlagt av ca 270,000 ord. När systemet testkördes så användes ett testkorpus av lika stort omfång 7. Vid testkörningen kunde MENE 7 http://www-nlpir.nist.gov/related_projects/muc/proceedings/muc_7_proceedings/marsh_slides.pdf 9
KAPITEL 1. INTRODUKTION rapportera en precision på 91% och recall på 78% vilket gav ett medelvärde (Fmeasure) på 84.22%. Om resultaten jämförs med de andra systemen som deltog på konferensen så var detta det lägsta (sämsta). 1.6.2 LTG LTG (som står för Language Technology Group) är också ett NER-system som användes under MUC-7. Det som utmärkte LTG var att den använde sig av en rad olika XML-taggningsverktyg (extensible Markup Language) som tillsammans utgjorde ett komplett NER-system. Man använde exempelvis en taggare för att tagga up tokens i en mening (detta behövde inte vara enskilda ord utan kunde vara flera ord) med en W -tagg. Vilket kunde se ut som nedan (exemplet är taget ur [LTG]):... <W>said</W> <W>the</W> <W>director</W> <W>of</W> <W>Russian</W> <W>Bear</W> <W>Ltd.</W> <W>He</W> <W>denied</W> <W>this.</W> <W>But</W>... Sedan kunde nästa taggare lägga till en taggning för radbryt:... <W>said</W> <W>the</W> <W>director</W> <W>of</W> <W>Russian</W> <W>Bear</W> <W>Ltd.</W> <W C=. ></W> <W>He</W> <W>denied</W> <W>this.</W> <W C=. ></W> <W>But</W>... På detta vis byggdes meningarna upp med mer och mer information. Exempelvis så lades även Part-of-Speech -märkningar till. Själva NER-processen utgjordes sedan av regler och mönstermatchning. Dels användes något som kallas för Sure-fire Rules som är väldigt kontextspecifika regler. Exempel på en sådan regel kan vara Om det står Mr. framför ett egennamn så är det tal om en Person. Man använde också mönstermatchning vilket kunde matcha både Part-of-Speech -tags samt grupper av ord. Ett exempel (översatt till Svenska) skulle kunna vara X, en ADJEKTIV YRKE där ADJEKTIV kan vara vilket adjektiv som helst (fås ur POS-tags) och YRKE är vilket yrke som helst ur en lista på kända yrken. Om vi får en match på denna följd i en mening så innebär det att ordet som står där X står i matchningen är en person, vilket åskådliggörs nedan: Rutger, en gammal snickare och målare X, en ADJEKTIV YRKE - - Systemet är uppbyggt så att de strängaste reglerna kommer först (Sure Fire) och sedan följer en sträng mönstermatchning varpå reglerna blir mindre och mindre stränga (relaxed). På så vis ser man till att de säkra reglerna med högst precision alltid får företräde framför de mer osäkra. 10
1.7. PRECISION OCH RECALL FÖR NER-PROBLEMET Detta system har varit en viktig inspirationskälla för utvecklandet av den listbaserade klassificeraren (vilken fungerar snarlikt den mönstermatchande fast utan att kolla på POS-tags) och den regelbaserade klassificeraren (som även innefattar Sure Fire Rules), vilka det finns mer att läsa om under Det utvecklade systemet. LTG publicerade inte deras totala Precision och Recall under testkörningarna på MUC-7. Däremot publicerades f-measure från körningen, vilket var: 93.39%. Detta var den högsta totala f-measure bland alla deltagare under denna konferans. 1.7 Precision och Recall för NER-problemet Även om precision och recall har en liknande innebörd för NER-problemet så kan det vara på sin plats att reda ut hur precision och recall beräknas inom NER. När den korrekta lösningen av en NER-instans innebär att en token skall tilldelas en tagg så kallas detta för ett positivt exempel. Man har alltså ett exempel på data där det är korrekt att tilldela, en viss token, en viss tagg. Om den korrekta lösningen istället innebär att en token inte är en entitet (ofta ändå taggad som Other eller Annat ) så kallar man denna för ett Negativt exempel. När en NE-klassificerare klassificerar en mening så skiljer man på två olika fel som kan uppkomma när man väljer huruvida man skall tilldela en token/ord en taggning: False Positive False Negative Innebär att det var fel (false) att tilldela denna token med den NE-tag som valdes. Det korrekta svaret skulle antingen varit att inte tagga denna token som en enitet ( other ) eller så skulle den ha tilldelats en annan NE-tag. Är fel som innebär att NE-klassificeraren har missat att märka upp en token med NE-tag utan istället valt att inte sätta ut någon (eller tagga med other ) Man brukar även beskriva de korrekt taggade meningarna på samma sätt, som: True Positive False Positive Rätt entitet har valts för den aktuella instansen Ingen tagg har satts ut, vilket var korrekt för denna instans Med dessa sätt att uttrycka rättningar kan vi nu återvända till våra tidigare definitioner för Precision och Recall. Precision avser systemets förmåga att sätta ut korrekt klassificerade entiteter. Recall (ofta även kallad täckning ) beskriver hur många entiteter som hittas (täcks in) av systemet. Använder vi istället den nyligen introducerade definitionen för korrekt- eller felklassificerade instanser så får vi nu sätt att utrycka Precision och Recall: Precision = True Positives True Positives + False Positives 11
KAPITEL 1. INTRODUKTION och Recall = True Positives True Positives + False Negative F-measure behåller samma definition som tidigare. Dessa mått är väldigt viktiga i jämförelser mellan NE-system eftersom de utgör en gemensam grund för prestandamätningar. Måtten används flitigt i denna rapport men kanske främst i de senare avsnitten Testkörningar och Resultat. 1.8 Definitioner Nedan följer en rad definitioner på ord som förekommer i rapporten men vars innebörd kanske inte alltid är självklar i sammanhanget. NER: förkortning för Named Entity Recognition, beskrivs i kapitlet En kort introduktion till Named Entity -klassificeringsproblemet. Kan även vara förkortningen för Named Entity Recognizer, vilket är ett system som utför Named Entity Recognition. NE/Named Entity: Se Entitet. Entitet: är i denna rapport en förkortning för namngivna entiteter och är delmeningar som sägs tillhöra en gemensam förutbestämd klass (ha ett gemensamt koncept). Ordet används i stället för Named Entity eller namngivna entiteter på många ställen i denna rapport men de avser samma sak. Tagg/Taggning: referar till de tecken som omsluter en entitet. Dessa taggar har strukturen <entitetsnamn>inkapslade ord</entitetsnamn> där < entitetsnamn > inleder entiteten, </ entitetsnamn > avslutar den. Inkapslade ord är de ord som kapslas in av taggningen. Koncept/klass: refererar till vad man försöker kapsla in med taggningen av en entitet. Om vi exempelvis försöker kapsla in platser så är det lätt att inse att antalet platser som kan skrivas är oändligt många och de kan dessutom skrivas på oändligt många sätt. Därför talar man i stället om konceptet av en plats, som är något mer abstrakt. MUC-X: Står för Message Understanding Conferance. X:et står för vilken konferens i ordningen som det talas om. Exempelvis motsvarar MUC-7 den sjunde MUC-konferensen. ME/Maximum Entropy: Är en maskininlärningsalgoritm baserad på entropi. 12
1.8. DEFINITIONER Label: En märkning eller label innebär i denna rapport en märkning av entiteter i en text på formatet entitetsnamn_positionssuffix. Ibland åtföljs dessa även av ett förtroendetal som avser hur mycket klassificeraren tror att denna label är den korrekta. Future: En future är en möjlig lösning/klassning ur alla möjliga klassningar. Begreppet används bland annat i [MENE-1] och [MENE-2]. History: Är all känd data som kan hjälpa dig i valet av future. Feature: Beskrivs lättast som en fråga (med svarsalternativ ja eller nej) där svaret förhoppningsvis ger information som är relevant vid en klassificering. Ett exempel på en sådan fråga kan vara: Finns denna token med i listan över kända anglosaxiska namn, vilket borde ge en indikation på att denna token kanske skall klassificeras som en person. Target: En target motsvararar det korrekta svaret/lösningen vid en klassificering. Används i maskininlärningssammanhang för att lära upp ett system. I rapporten så används ofta ordet future som är mer specifikt (för Maximum Entropy) istället för ordet target. Token: Refererar ofta till ett enskilt ord separerat av mellanslag men kan också innebära en hel entitet eller en kedja av ord. Featureclass: Är ett eget myntat begrepp som i rapporten innebär en gruppering/samling av features. Man skulle också kunna säga ett featureset. Används för att kunna referera till en samling features som ofta har en gemensam nämnare. XML: Står för extensible Markup Language vilket innebär ett sätt/språk för att tagga upp data. Detta görs med <> och avslutande </> taggar. Precision: Om vi använder problemet; sökning efter dokument som bas för våra definioner så innebär precision; hur stor andel av den hittade mängden av dokument som var relevant för sökningen. Recall: Om vi använder problemet; sökning efter dokument som bas för våra definioner så innebär recall; hur stor andel av alla dokument som fanns att välja mellan som hade relevans och dessutom hittdes. F-Measure: Är det viktade harmoniska medelvärdet av precision och recall. 13
Kapitel 2 Det utvecklade systemet 2.1 Motivering NER-systemet utvecklades åt kunskaps- och konsultföretaget Findwise. Findwise har valt att specialisera sig på att utveckla söklösningar åt företag. Det var under deras arbete med sök och söklösningar som ett behov av NER växte fram. Eftersom de inte hade tillgång till en NER som kunde passa in i deras pipeline, så valde de att använda framtagandet av en NER som ett möjligt examensarbete för KTHstudenter. Det är här värt att poängtera att det finns flera andra NER-lösningar tillgängliga, men de flesta är kommersiella, så det kan vara svårt att hitta en lösning som är både billig och presterar väl. Systemet utvecklades i två steg. I det första steget utvecklades själva grunden för systemet, vilket jag tillsammans med ytterligare en KTH-student (Johan Wessman) tog fram. Under denna första fas så utvecklade vi en gemensam grund för systemet. Vi byggde ett simpelt NER-system som i mångt och mycket försökte efterlikna det tidigare nämnda MENE-systemet. Systemet byggde helt på maskininlärning och hade ett fåtal featureklasser (så som listbaserade, Part-of-Speech taggar och et fåtal Binary features). I det andra steget gick våra arbeten isär och vi valde att bygga systemen åt två olika håll. Johan utvecklade systemet så att det kunde lära sig av en användares input (Active Learning inom maskininlärning). Jag valde att försöka kombinera vår maskininlärningsbaserade approach med ytterligare två klassificerare som byggde på Regler och Mönstermatchning. Inspiration fann jag i [LTG]. Den främsta motivationen bakom framtagandet var alltså att få fram ett system som Findwise kunde använda och som dessutom kunde hållas Open Source 1. 2.2 Tolkning av NE-problemet Systemet byggdes primärt för att följa den allmänna problemdefinitionens uppsatta regler ([NE-TASK]). Under utvecklingen upptäcktes dock vissa tvetydigheter där 1 http://en.wikipedia.org/wiki/open_source 15
KAPITEL 2. DET UTVECKLADE SYSTEMET jag valde att göra vissa undantag från problemspecifikationen. Dessa undantag är: 1. I stället för att tagga upp tidsperioder som två entiteter (start och slut) så taggas dessa istället som en entitet. Exempelvis skulle 1898-1901 taggas som två entiteter enligt specifikationen, vilken jag har valt att avvika ifrån. Jag valde att göra denna avvikelse eftersom jag anser att det är felaktigt att tagga tidsperioder som två entiteter då man aldrig pratar om två tidpunkter utan ett tidsintervall. 2. Pengasummor som innehåller en osäkerhet, som exemeplvis 200-600 SEK, skall taggas som två entiteter. Jag har istället valt att tagga dom som en entitet av samma anledning som jag valt att tagga tidsintervall som en entitet. 3. Eftersom systemet hanterar taggning på en ord till ord basis så kan det hända att tecken som inte hör till ordet kommer med i samma ord. Exempelvis kan ett ord vara Ruben). där en punkt och ett parentestecken inte plockats ut ur ordet. Sådana tecken ignoreras i största möjliga mån av systemet, och ordet i fråga betraktas istället som Ruben. När ordet sedan taggas så taggas hela ursprungsordet som en entitet utan att lyfta ut speciella tecken. Användaren får när den skappar en testinstans själv välja att lyfta ur sådana tecken ur orden om han eller hon anser det vara relevant. På samma vis ignoreras binde- s och lyfts inte ut ur ord som de egentligen skulle göras enligt specifikationen. 4. Specifikationen anger också att entiteter kan förekomma i entiteter, exempelvis skulle 200 new Canada dollars klassas som två entiteter där den inre är Canada och den yttre innefattar hela meningen. Jag har dock valt att undvika sådana taggningar eftersom jag anser att inre taggar sällan är relevanta. 5. Jag har också valt att märka upp även osäkra tidsintervall så som the end of 2005 som datum även fast specifikationen anger att osäkra datum inte skall märkas upp. 2.3 Framtagning av träningsdata Träningsdatat till systemet bestod av textfiler med rader av skriven text. I denna text var entitetstaggar insatta för allt som inte skulle klassificeras som other eller annat. Ett utdrag ur en sådan fil skulle kunna se ut som nedan:... His film confirmed that <ENAMEX TYPE= PERSON >Rosenthal</ENAMEX> hadn t staged his iconic picture. <ENAMEX TYPE= PERSON >Genaust</ENAMEX> never left <ENAMEX TYPE= LOCATION >Iwo Jima</ENAMEX>. To this day his remains are sealed in a cave where he was killed helping to clear it of Japanese defenders.... 16
2.3. FRAMTAGNING AV TRÄNINGSDATA Allt träningsdata är taget från wikipedia.com. Texten taggades upp på följande sätt; Automatisk taggning Idén med en Automatisk Taggning var att jämföra ord i texter med olika listor över redan kända entiteter (som dessutom inte kolliderade med andra entiteter). Sådana listor kunde vara saker som listor över kända personer, världens huvudstäder eller historiska årtal/datum. Ett utdrag ur en sådan lista kunde se ut som nedan: Capitals.txt... Abu Dhabi Abuja Accra Addis Ababa Algiers Amman Amsterdam... För att få tillgång till mycket data användes en så kallad dump av engelska Wikipedia 2. Denna dump innehöll hela engelska Wikipedias innehåll samt en väldigt stor mängd wiki-taggar, vilket är en slags formateringskod med XML-struktur. För att bli av med dessa wikitaggar användes ett simpelt pythonscript som rensade bort alla wiki-taggar. Kvar blev en textfil av betydande storlek (över 2 Gigabyte). För att sedan dela upp denna fil i meningar användes ett program som letade efter radbryt i form av punkter, utropstecken eller frågetecken. För att inte radbryt skulle ske vid förkortningar eller titlar användes också en listkoll över kända förkortningar i samband med uppdelningen av rader. När detta var utfört så användes en listkoll för att identifiera säkra entiteter i dessa rader text. Vad den automatiska taggaren gjorde var att givet en otroligt stor datamängd med engelska rader text och givet en ordlista med säkra entiteter, gå igenom hela datamängden och tagga upp all ord som fanns i ordlistan. Alla de meningar som efter detta förfarande innehöll taggar sparades undan och de som inte innehöll några taggar slängdes bort. Anledningen till att man inte kunde använda en mer generell ordlista med exempelvis personnamn var att dessa ofta kolliderade med andra entiteter. Det kan tyckas svårt att få fram en betydande mängd träningsdata med hjälp av enbart några listor över kända städer, personer, datum med mera, men på grund av den stora mängden data som fanns tillgänglig så var det trots allt möjligt. Enbart en lista över världens alla huvudstäder genererade träningsdata med över 10000 exempel. 2 http://dumps.wikimedia.org/backup-index.html 17
KAPITEL 2. DET UTVECKLADE SYSTEMET Fördelen med denna approach var att den snabbt kunde skapa en stor mängd träningsdata. Nackdelen var däremot att eftersom träningsdatat skapades automatiskt utan någon övervakning så kunde det hända att vissa träningsexempel blev felaktiga. Det är svårt att säga hur stor andel av träningsdatat som var felaktigt, men vid en snabb överblick av texten så innehöll ungefär var tionde exempel någon icke korrekt märkning. 2.4 Struktur I följande undersektioner beskrivs det utvecklade systemet och dess struktur. Systemet utvecklades helt i Java men använde sig av två utomstående bibliotek, OpenNLP 3 (för POS-taggning) och MALLET 4 (för maskininlärning). 2.4.1 Indata och Sentence Alla meningar (tränings- och testdata) i systemet hanteras av en speciell klass som heter Sentence. Eftersom Sentence anger en datatyp speciellt utformad för detta system så kommer denna i framtiden att skrivas med stor inledande bokstav för att markera distinktionen ifrån det engelska ordet. Även andra klasser så som den senare introducerade Feature Array kommer att ha stora bokstäver för att särskilja klassen. En Sentence beskriver en mening med hjälp av tre lika långa vektorer. Den första vektorn innehåller meningen i tokeniserat format där varje ord har utgör en position i vektorn. Den andra innehåller dessa ords motsvarande Part-of-Speech taggar och den tredje innehåller dess motsvarande NE-taggar. Strukturen av en Sentence beskrivs av figur 3.1. När en mening skall göras om till en Sentence så tokeniseras den först upp i delar, där varje del består av ett ord. Av denna tokeniserade mening skapas sedan ett Sentence-objekt. En Sentence är egentligen bara en behållare för all data rörande en mening (så att denna data inte behöver beräknas om). Om systemet behöver ha tillgång till POS-taggar i något steg av körningen så läggs dessa till i gällande Sentence så att inte denna, annars så kostsamma, operation behöver utföras igen. Man skulle kunna formulera systemets uppgift som att: givet en Sentence s utan ifyllda NE-taggar, generera en ny Sentence s där s innehåller samma ord som s och även dess korrekt ifyllda NE-taggar. 2.4.2 Övergripande struktur Systemet tar alltså in data i form av strängar, överför datat till Sentence-format. Dessa Sentence-objekt skickas sedan in, ett i taget, in i systemet, vilket beskrivs av nedanstående bild. När en Sentence tar sig igenom systemet så passerar det en rad 3 http://opennlp.sourceforge.net/ 4 http://mallet.cs.umass.edu/ 18
2.4. STRUKTUR Figur 2.1. Skapandet av en Sentence Figur 2.2. Övergripande struktur av systemet 19
KAPITEL 2. DET UTVECKLADE SYSTEMET olika klassificerare. Varje klassificerare i systemet kan tilldelas ett antal taggar som den har tillåtelse att sätta ut samt ett prioritetstal. Prioritetstalet anger hur hög prioritet en viss klassificerare har. Den klassificerare som har högst prioritet kommer få sätta ut sina taggar först, sedan kommer den klassificerare som har näst högst prioritet att få sätta ut sina taggar och så vidare tills dess att samtliga klassificerare fått möjlighet att sätta ut taggar. En klassificerare får inte sätta ut en tagg så att den kolliderar med en tidigare utsatt tagg vilket gör att de klassificerare som har högst prioritet har störst chans att påverka slutresultatet. Till systemet skapades tre stycken klassificerare. En som baseras på regler, en som baseras på uppslagning mot olika listor och en som baseras på maskininlärning. När en Sentence tog sig igenom systemet, bestående av de ovannämnda tre klassificerarna så kunde de se ut som nedan: Sentencen byggdes alltså upp med fler och Figur 2.3. En Sentence väg genom tre stycken klassificerare fler taggar desto längre den passerat igenom systemet. Anledningen till att klassificerare tilldelats ett prioritetstal är för att de klassificerare som har högre precision bör ha företräde framför klassificerare med låg precision då dessa med större sannolikhet klassificerar korrekt. Prioritetstalet är alltså tänkt att användas för att sortera klassificerarna efter precision. 2.4.3 Maskininlärningsbaserad klassificerare Den maskininlärningsbaserade klassificeraren liknade i mångt och mycket den klassificerare som beskrivs i [MENE-1] och [MENE-2], alltså det såkallade MENEsystemet. Det kan därför vara klokt att först ha läst avsnittet MENE för att 20
2.4. STRUKTUR kunna förstå sig på terminologin i detta avsnitt. Systemet arbetar helt på token-till-token-basis där varje token är en position i en Sentence. Denna position omvandlas sedan till en rad olika såkallade Features vilka tillsammans utgör en Feature Array eller en samling features. Detta förfarande beskrivs av bilden nedan: Klassen Feature Collection fungerar som en be- Figur 2.4. En Feature Array skapas från en position i en Sentence hållare för olika Feature Classes samt den lite speciella klassen Compound Features. Systemet kan begära den totala samlingen features genom att anropa Feature Collection. Feature Collection skickar sedan vidare förfrågan till alla de Feature Classes som finns i samlingen. Varje Feature Class skickar sedan ut en rad olika features i form av unika strängar (ofta namngivna så att man enkelt kan urskilja vad featuren avser). Dessa strängar skickas till slut in i Compound Features som är en speciell Feature Class vilken till skillnad från andra klasser inte tar en Sentence-position som indata utan istället tar in en lista på features. Compound Features använder sedan dessa features för att skapa fler features som består av sammanslagningar av tidigare genererade features. Denna process kan i text tyckas aningen invecklad och därför följer nedan ett simpelt steg-för-steg exempel. I Figur 2.5 har man alltså genererat en Sentence från strängen Rutger flew to Paris och sedan också lagt till dess tillhörande Part-of-Speech taggar. Därefter har man skickat in position 1 i Sentencen till en Feature Collection bestående av tre Feature Classes samt klassen Compound Features. Först kommer Sentence positionen till klassen Binära Features som hittar en rad olika features. Bland annat upptäcker den att ordet är det första i meningen samt att det inleds med en stor bokstav. De Features som hittades av Binära Features utgör en såkallad Feature Array som alltså bara är en samling features. Därefter kommer Listbaserade Fea- 21
KAPITEL 2. DET UTVECKLADE SYSTEMET Figur 2.5. Steg för steg exempel på hur skapandet av en Feature Array kan gå till. tures. Denna klass upptäcker bland annat att ordet Rutger finns i en ordlista över kända förnamn. Detta läggs till som en feature i Arrayen vilken går vidare till nästa klass, Part-of-Speech Features. I denna klass, som tittar på olika ords Partof-Speech taggar, läggs omkringliggande ords POS-taggar till som features. Bland annat lägger man till att det aktuella ordet är taggat som NNP (Proper Noun, Singular (Egennamn i singularis)) och efterföljande ord är taggat som VBD (Verb, past tense (Verb i dåtid)). Till slut kommer vi fram till Compound Features som använder sig av de features som finns i Feature Arrayen för att skapa nya sammanslagna Features. Den skapar bland annat en Feature som avser att den aktuella positionen innehåller ett ord som dels har stor bokstav men också är taggat som NNP. Just denna sammanslagning (NNP och stor bokstav) brukar väldigt ofta innebära att ordet är en Named Entity. Den Feature Array som nu har skapats används för att träna systemet. Träningen sker med hjälp av ett utomstående bibliotek kallat MALLET, vilken innehåller en rad olika metoder för maskininlärning. För inlärningen användes en metod som heter Maximum Entropy. MALLET hanterar inlärning och testning via två klasser, en tränare och en testare. Tränaren tar in Feature Arrayer, samt dess motsvarande och korrekt klassificerade Named Entity -taggar, och tränas på dessa. Ifrån dessa träningsexempel så skapas sedan en klassificerare (när tränaren är fullt inlärd) som givet en Feature Array ofta kommer kunna ge en korrekt klassificering (korrekt NE-tagg). Vi skapar alltså en mappning från Feature Arrayer till NE-Taggar. I verkligheten så är denna mappning inte lika strikt som bilden ovan avser. Egentli- 22
2.4. STRUKTUR Figur 2.6. Träning med hjälp av MALLET Figur 2.7. Ett exempel på en Mappning ur den totala mängden features, via MAL- LET, till en NE-tag ur den totala mängden NE-taggar gen så genereras, för varje möjlig klassificering, ett tal mellan noll och ett som avser hur mycket som klassificeraren tror att just denna tagg är den rätta (vidare kallat företroendetal). Dessa mappningar från Feature Array till NE-taggar (med tillhörande tal) brukar i MALLET kallas för en Label. Sökning i MALLET Labels När en hel mening har körts igenom klassificeraren så finns nu en Label att tillgå för varje ord i meningen. Problemet är nu att givet dessa Labels hitta den konfiguration av NE-taggar som är mest trolig. Den naiva ansatsen skulle kunna vara att ur varje Label plocka den NE-tag som har störst förtroende tal. Dock fungerar inte detta i praktiken då det kan uppkomma omöjliga konfigurationer som exempelvis: Paris Hilton flew to Paris location_start organization_end other other location_unique Vilket inte är en, enligt reglerna, giltig klassificering då organization_end måste föregås av organization_continue eller organization_start. För att lösa detta problem använder man istället Bellman Ford s Algortim för att söka igenom alla Labels efter den lösning som är både giltig och mest trolig givet 23
KAPITEL 2. DET UTVECKLADE SYSTEMET förtroendetalen. Hur denna sökning går till diskuteras i djupare detaljnivå i avsnittet 2.6.2: Sökning i lösningsrummet med hjälp av Bellman Fords Algoritm. Feature Classes Klassificeraren använder en rad olika Feature Classes, som alltså är samlingar av Features. De viktigaste beskrivs nedan: Listbaserade Features: Är features som bygger på uppslag i ordlistor. För dessa features användes ett 20-tal olika ordlistor över bland annat huvudstäder, namn och kända organisationer. Ordlistorna togs från gratisresurser på internet, t.ex wikipedia.com. Några exempel kan vara: nästa ord är ett känt namn, två ord framåt står ett ord som finns i ordlistan över kända platser och ordet bakom detta finns i ordlistan över kända organisationer. Part-of-Speech Features: Är simpla features som enbart tittar på de POStaggar som redan finns inskrivna i en Sentence. Exempel på sådana features kan vara: nuvarande ord är taggat som NNP, nästkommande ord är taggat som VBZ, ordet tre steg framåt är taggat som TO. Ordföljd Features: Består av Features som kollar på ordföljder. Feature Classen kollar inte på alla möjliga ordföljder utan den letar efter specifika ordföljder som den vet är avslöjande för huruvida ordet kan vara en entitet eller inte. Exempel kan vara: ordet föregås av ordföljden town of, efter detta ord följer ordföljden and his. Sentence Features: Innehåller Features som baseras på den aktuella Sentencen och främst den aktuella positionen i Sentencen. Exempel kan vara: denna Sentence består av fler än 10 ord, detta ord är den första i denna Sentence, detta ord är det sista i denna Sentence. Binära Features: Enkla features som inte riktigt passade in i någon av ovanstående kategorier. Dessa features är ofta helt fristående och har inte något gemensamt som innehållet i övriga Feature Classes brukar ha. Exempel kan vara: ordet har stor bokstav, nästa ord innehåller enbart siffror, ordet bakom detta ord slutar på s. Dessutom finns Feature Classen Compound Features som fungerar lite annorlunda jämfört med ovanstående. Denna klass tar, som tidigare nämnts, den output (Feature Arrayer) som andra Feature Classes genererar och kombinerar ihop vissa av resultaten. Detta kan resultera i Features som: ordet inleds med stor bokstav och har POS-taggats som NNP, ordet finns i ordlistan över kända namn men också i en Engelsk ordlista (ordlistor, nu i vanlig bemärkelse, innehåller oftast inte ord som är entiteter). 24
2.4. STRUKTUR 2.4.4 Regelbaserad klassificerare Den regelbaserade klassificeraren var tämligen simpel i sin utformning. Reglerna skrevs för hand med hjälp av Javas egna stränghanteringsmetoder 5 och de POStaggar som fanns tillgängliga. Den jobbar alltså, likt den maskininlärningsbaserade klassificeraren, med olika Sentences. De handskrivna reglerna sorterades efter hur generella de var i sin utformning. De mest generella reglerna applicerades sist så att de mer specifika (som då ofta hade en högre precision) kunde få chansen att påverka resultatet tidigare. Reglerna i klassificeraren var av två olika slag; en Figur 2.8. Exempel på hur en Sentence-klassificering byggs upp steg för steg av den regelbaserade klassificeraren sorts regler som hittade entiteter och en sorts regler som förlängde en redan funnen entitet. Generellt sett kan sägas om dessa regler att de som hittade entiteter var skrivna med en högre precision än de som bara fyllde på redan funna entiteter. Då det kan vara väldigt tröttsamt att studera alla regler som skrivits så presenteras nedan istället ett axplock av de regler som återfinns i klassificeraren: Regler som hittar entiteter 1. Om ett ord som anger en månad (january, jan osv) föregås av ett räknetal (7, sjunde eller 7:e osv) så skall både månaden och räknetalet taggas som en Date. 2. Om alla ord som har POS-taggen NNP sitter ihop och meningen innehåller något av orden he eller she så skall de ord som har POStaggen NNP nu taggas som Person. 3. Om ett procenttecken föregås av någon serie av räknetal eller siffror så skall både serien och det ord som enbart består av ett procenttecken taggas som Percent. Regler som utvidgar redan funna entiteter 5 http://download.oracle.com/docs/cd/e17476_01/javase/1.5.0/docs/api/ 25
KAPITEL 2. DET UTVECKLADE SYSTEMET 1. Om en token är taggad som en Location och det framför denna token står något av orden North, South, East eller West så skall dessa ord inkluderas i entiteten. 2. Om det efter en tidpunkt (token taggad som Time ) står in the följt av något av morning, afternoon, evening eller night så skall dessa inkluderas i entiteten. 3. Om det mellan två datum (entiteter taggade som Date) enbart finns ett ord och det ordet är antingen to eller - så skall dessa entiteter slås samman till en entitet. 2.4.5 Listbaserad klassificerare Den listbaserade klassificeraren hade, som namnet antyder, till uppgift att slå upp alla ord som förekommer i en mening för att se om dessa förekommer i ordlistor. De flesta ordlistor togs från gratisresurser på internet så som wikipedia.com men vissa kortare ordlistor skrevs helt för hand (exempelvis företagssuffix). För att hålla uppe precisionen på klassificeraren så tilläts den inte sätta ut taggar för ord som kunde återfinnas i en engelsk ordlista (eftersom sådana ord oftast inte innehåller entitetsnamn i någon större utsträckning). Den listbaserade klassificeraren kunde av naturliga skäl inte sätta ut NUMEX och TIMEX taggar eftersom dessa är väldigt svåra att lista. Klassificeraren användes istället enbart för ENAMEX taggar. Klassificerarens arbete är egentligen enkelt då den enbart sätter ut taggar genom att slå upp ord i ordlistor. Varje ordlista hade sedan en NE-tag förknippad med sig som sattes ut där ordet (eller orden) hittades i meningen. Problemet med klassificeraren var dock att få den att upprätthålla en hög precision trots att den enbart använde sig av listor. Lösningen till detta låg i att klassificeraren skulle användas i kombination med andra system. Detta gjorde det mer försvarbart att tillåta systemet att vara mer försiktigt. För att upprätthålla en hög precision (till priset av en lägre täckning) så infördes vissa stoppkriterier. Om ett visst stoppkriterium var uppfyllt för en mening så tilläts inga NE-taggar att sättas ut. Ett exempel på ett sådant kriterium var; om klassificeraren vill sätt ut två taggar precis bredvid varandra (utan en other mellan) eller om den inte kunde hitta alla ord i en entitet i sina ordlistor. För att visa varför detta stopkriterium var nödvändigt så behövs ett exempel: The Michael Jackson Foundation, also called Heal the World... I denna mening skulle klassificeraren typiskt hitta Michael Jackson och vilja klassa detta som en Person. Men i denna mening avses inte Michael Jackson utan The Micheal Jackson Foundation vilket skulle innebära att taggningen skulle bli felaktig. Dock tillåts inte klassificeraren sätta ut en taggning här på grund av stoppkriteriet. Eftersom den inte kan slå upp alla ord, alternativt att den vill klassa Foundation som en organisation, så sätts inga taggar ut. På detta vis upprätthålls en hög precision men ofta på bekostnad av en lägre täckning. 26
2.5. PROJEKTETS FORTGÅNG 2.5 Projektets fortgång Eftersom projektet under arbetetsgång förändrades något beroende på förutsättningar och de resultat som erhölls så kan det här vara nödvändigt att beskriva de vägval som gjorts genom arbetets gång. Arbetet initierade som tidigare nämnts på begäran av konsultföretaget Findwise med syfte att skapa en opensource lösning för NER med höga krav på precision med tanke på att den skulle användas i olika söksystem. Arbetet inleddes som ett gemensamt arbete mellan mig och Johan Wessman. När projektplanen skissades upp så var tanken att enbart en klassificerare för NER skulle utformas, en klassificerare som byggde på maskininlärning. Dock saknade vi projektets början träningsdata för algoritmen och med facit i hand så missbedömde vi tillgängligheten av sådana korpusar. På grund av avsaknaden av träningsdata så blev vi tvungna att ta fram ett alternativt korpus, ett korpus som vi skapat själva. Vi övervägde först att handannotera data men valde senare den automatiska approach som tidigare beskrivits, även om den inte alltid gav giltig/korrekt träningsdata. Vi förväntade oss tyvärr ett bättre resultat en det vi erhöll med den metod vi valt. För att göra systemet bra och användbart valde vi därför att dela på oss och försöka förbättra resultaten på olika sätt. Jag valde att lägga till två till klassificerare som byggde på regler och listor medans Johan Wessman förbättrade sina resultat med hjälp av Active Learning. 2.6 Teori bakom komponenter i systemet Det finns ett antal komponenter i systemet som kan behöva en närmare genomgång. Nedan kommer två viktiga komponenter att hanteras. Först kommer Maskininlärning och dess roll i systemet att diskuteras även om ingen implementering av maskininlärare ingick i projektet. Därefter följer ett avsnitt om hur problemet att hitta rätt kombination av NE-tags givet en sannolikhetsfördelning löstes genom att omformuleras till ett grafproblem. 2.6.1 Kort om Maskininlärning Eftersom maskininlärning är en viktig del i det utvecklade systemet så känns det naturligt att förklara hur och varför det används. För att förklara vad maskininlärning är beskriver vi vilket problem det löser. Vi skulle kunna se på problemet att ge ett ord korrekt NE-tag som problemet att givet en kontext och givet ett ord, associera detta ord till korrekt NE-tag. Problemet vi ställs inför är bara att vi inte känner till mappningen/associationen och även om vi gjorde det så skulle den ta otaliga timmar att formulera. Man skulle alltså kunna uttrycka det vi vill göra så som att vi vill ta fram en kontext, vilket vi gör genom att ta fram features. Vi vill sedan mata in kontexten som en input i en låda. Och som utdata förväntar vi oss sedan NE-taggar. Maskininlärning innebär i det här fallet att en algoritm från ett stort antal exempel med kontext och rätt tagg skapar en generell statistisk modell som gör att vi från en kontext kan beräkna den troligaste taggen. Med en tillräcklig 27
KAPITEL 2. DET UTVECKLADE SYSTEMET Figur 2.9. Illustration av den roll vi vill att Maskininlärning skall fylla volym och god kavlitet av träningsdata ges en bra klassificerare. Hur själva träningen går till, alltså hur träningsexempel påverkar systemet är beroende av vilken maskininlärningsalgoritm (och även vilka inställningar ) man valt. Vi valde att använda oss av Maximum Entropy, som är en maskininlärningsalgoritm som olikt vissa andra (exempelvis Naive Bayes) tillåter att den input man skickar (features) inte är statistiskt oberoende. Detta var nödvändigt eftersom många features (särskilt compound features) är starkt beroenden av varandra. Varken Maximum Entropy eller Naive Bayesian Learning kommer att diskuteras här utan för vidare läsning rekommenderas [MAXENT] för läsning om Maximum Entropy eller [STAT] för allmän läsning om statistisk inlärning. 2.6.2 Sökning i lösningsrummet med hjälp av Bellman Fords Algoritm När den maskininlärningsbaserade klassificeraren ger tillbaka ett svar så fås det genom, som tidigare nämnts, en Label. En Label innehåller alla möjliga klassificeringar samt tillhörande förtroendetal för en given probleminstans. När en hel mening har passerat igenom systemet så har vi alltså en samling Labels, en per ord i meningen. Problemet är nu att hitta en instans som dels är giltig och dessutom maximerar de summerade förtroendetalen. Detta gör vi genom att formulera problemet som ett grafproblem genom att kalla alla klassificeringar för noder (notera att även other /annat får en egen nod) och sedan dra riktade kanter från ord med lägre index till ord med index högre. För att avsluta vår reducering av problemet till ett grafproblem så väljer vi att alla kanter till en nod har en kantvikt på - 1*förtroendetalet för denna nod och sätter kantvikterna till slutnoden till noll. Bellman Fords algoritm är en algoritm som givet en riktad och viktad graf (utan negativa cykler) ger tillbaka den kortaste vägen från en viss punkt till en annan. Vilket är precis vad vi behöver göra för att få fram den optimala lösningen. Vi tillämpar Bellman Fords algoritm på problemet för att hitta den kortaste vägen genom grafen vilket kommer motsvara den kombination av Labels som dels har högst sum- 28
2.6. TEORI BAKOM KOMPONENTER I SYSTEMET Figur 2.10. En label innehåller alla möjliga klassificeringar och dess tillhörande förtroendetal Figur 2.11. Treordsmening omgjord till grafproblem som acyklisk, riktad och viktad graf ma av förtroendetal och också är möjlig. Detta eftersom den kortaste stigen genom grafen är den som använder de högsta företroendetalen (kom ihåg multipliceringen med minus ett). Dessutom kan den inte ge någon ogiltig lösning eftersom det saknas kanter mellan alla klassificeringshopp som inte är möjliga. Att söka igenom grafen, efter den kortaste vägen från start till slutnod, med Bellman Fords Algoritm är nu en relativt simpel process. Vi börjar med att sätta ut kostnader för att ta sig till varje nod, den initiala kostnaden är (i alla fall teoretiskt) oändlig (positiv) för alla noder utom startnoden som sätts till 0. Därefter stegar man igenom grafen från vänster till höger (startnod till slutnod) och försöker Relaxera varje nod. När en nod relaxeras så beräknas den kortaste vägen till den, vilket på bilden motsvaras av att titta på noderna som ligger direkt till vänster och summera dess kostnad med grafvikten. Om man hittar en väg som är kortare än den hittills 29
KAPITEL 2. DET UTVECKLADE SYSTEMET funna så sätts kostnaden till det nyfunna talet. Eftersom grafen är väldigt simpel och inte innehåller några cykler så kommer denna process att te sig väldigt enkel. För varje iteration av relaxering så kommer nästvarande ords noders kostnader att fyllas fram tills dess att slutnoden nås. För att kunna hitta tillbaka genom grafen så spar vi också hela tiden den hittills kortaste vägen, vilken vi tillslut returnerar när slutnoden nås. 30
Kapitel 3 Testkörningar I detta kapitel kommer en rad olika testkörningar på systemet att presenteras. Måtten för teskörningarna kommer i samtliga fall att vara de tidigare introducerade: Precision, Recall och F-measure. För definition av dessa mått så rekommenderas avsnitten 1.3 Information Retrieval - Grundläggande Begrepp samt Precision och Recall för NER-problemet. Testkörningarna utfördes på data bestående av tre olika texttyper; böcker, faktatext och nyhetsartiklar. Texterna bestod av cirka fyra sidor ren text för varje texttyp. Sidorna taggades upp för hand i samarbete med Johan Wessman under utvecklingen av grundsystemet. Dessa texter utgjorde den totala testmängden för samtliga testkörningar. Dessa texter finns alla i Bilaga 1. Vid en körning jämfördes resultaten av det som den utvecklade klassificeraren fått fram med det korrekta taggarna som jag själv satt ut. Efter att körningen var klar genererades ett stapeldiagram över hur systemet hade presterat. För varje tagg enererades tre olika staplar för Precision, Recall respektive F-measure. Dessa staplars höjd låg mellan 0 och 100 vilket motsvarar 0 till 100% av det aktuella måttet (Precision, Recall eller F-measure). I slutet på stapeldiagrammet (längst till höger) så genererades också ett set av tre staplar som angav Precision, Recall och F-measure totalt (för alla taggar). I diagrammet så ritas F-measure med en lite bredare stapel i blå färg. Precision ritas upp i orange och med texten Pr medans Recall ritas upp i grönt med texten Re. Om någon tagg har ett resultat med en F-measure på under 1% så ritas inte staplarna ut för denna tagg i diagrammet. För varje testkörning kommer två viktiga resultat att presenteras, dels det ovannämnda stapeldiagrammet och dels en snittid. Snittiden anger hur lång tid det tog att klassificera en mening i snitt, alltså medellängden av varje körning. Innebörden av resultaten i detta kapitel presenteras slutligen i kapitlet 4. Slutsatser. 31
KAPITEL 3. TESTKÖRNINGAR 3.1 Maskininlärningsbaserade Klassficeraren Nedan syns det stapeldiagram som genererades vid testning av enbart den maskininlärningsbaserade klassificeraren. Figur 3.1. Testkörning med enbart den maskininlärningsbaserade klassificeraren Som synes ovan så lyckas klassificeraren pricka ut personer, platser och datum i texten men den misslyckas totalt med övriga taggar. Generellt sett så verkar klassificeraren hålla en hög precision men dras ner av en alldeles för låg täckning (recall). Klassificeraren uppnår inte mer än 29% i F-Measure med en körningstid på 1 sekund per mening (2Ghz processor). Detta är tyvärr ett sämre resultat än jag hoppats på. 3.2 Regelbaserade Klassificeraren Nedan syns det stapeldiagram som genererades vid testning av enbart den regelbaserade klassificeraren. Figur 3.2. Testkörning med enbart den regelbaserade klassificeraren 32
3.3. ORDLISTBASERADE KLASSIFICEREAREN Klassificeraren håller en generellt hög precision på alla taggar men dras ner rejält av att den inte lyckas täcka in särskilt många personer eller platser. Den uppnår en total F-measure på 37% vilket är relativt högt. Snittiden ligger på 0.25 sekunder per mening vilket kan tyckas högt för en regelbaserad lösning, dock får man här tänka in att klassificeraren använder sig av POS-taggning vilket upptar mycket av tiden. 3.3 Ordlistbaserade Klassificerearen Nedan syns det stapeldiagram som genererades vid testning av enbart den ordlistbaserade klassificeraren. Det bör återigen poängteras att denna klassificerare enbart behandlade taggarna Person och Location. Figur 3.3. Testkörning med enbart den listabaserade klassificeraren Det kan tyckas underligt att systemet kan få en så pass hög total F-measure (36%) när den enbart behandlar två taggar. Anledningen till detta är dock att texten består av mestadels person- och platsentiteter. Snittiden låg vid denna körning på 0.4 millisekunder per mening vilket är den helt klart kortaste körningstiden av alla. Trots att denna klassificerare enbart sätter ut taggar beroende på listuppslagningar så håller den en relativt hög pålitlighet (precision). 3.4 Sammanslagning av de tre klassificerarna För de sista testen av systemet slogs de tre klassificerarna ihop. Detta gjordes genom att testmängden fick passera igenom de tre klassificerarna i tur och ordning. Den klassificerare som texten passerade igenom först hade därmed störst chans att påverka resultatet. De efterkommande hade inte tillåtelse att ändra de taggar som tidigare klassificerare satt ut. Pågrund av denna prioritetsordning kan olika resultat fås för samma testmängd beroende på i vilken ordning klassificerarna sätts. Med tre klassificerare blir det sex olika möjligheter. Den ordning som gav bäst resultat 33
KAPITEL 3. TESTKÖRNINGAR (högst total F-measure) var: först den regelbaserade klassificeraren, sedan maskininlärningsbaserade klassificeraren och sist den listbaserade klassificeraren. Med denna uppställning uppnåddes följande resultat: Figur 3.4. Testkörning med alla klassificerare i turordning: 1. Regelbaserade, 2. Maskininlärningsbaserade, 3. Listbaserade Snittiden per mening var här 1.05 sekunder Vilket även bör jämföras med den sämsta ordningen: först den listbaserade, sedan den maskininlärningsbaserade klassificeraren och sist den regelbaserade klassificeraren. Denna ordning gav istället följande resultat (med samma snittid): Figur 3.5. Testkörning med alla klassificerare i turordning: 1. Listbaserade, 2. Maskininlärningsbaserade, 3. Regelbaserade Med samma snittid som ovan. Vid ovanstående testkörningar har en sammanslagning av alla testtexterna använts. Dock presterar systemet olika bra på olika typer av texter. Det kan därför vara intressant att se närmare på skillnaden i resultat mellan; boktexter, faktatexter och nyhetsartiklar. Resultaten av testkörningar på enbart ett textområde och med den 34
3.4. SAMMANSLAGNING AV DE TRE KLASSIFICERARNA bästa konfigurationen av klassificerare presenteras nedan. Snittiden för körningarna var densamma som ovan (1.05 sekunder per mening). Figur 3.6. Testkörning med alla klassificerare, enligt bästa konfiguration, enbart boktexter Figur 3.7. Testkörning med alla klassificerare, enligt bästa konfiguration, enbart nyhetstexter Samtliga resultat/körningar analyseras i nästa kapitel Slutsatser 35
KAPITEL 3. TESTKÖRNINGAR Figur 3.8. Testkörning med alla klassificerare, enligt bästa konfiguration, enbart faktatexter 36