Eindwerkstuk voor Corpustaalkunde: Tweak-Test van Sformula, WordNet, Naked Keywords & Random Retrieval Wybo Wiersma, 1298577 Inhoudsopgave: Inleiding: 1 Onderzoeksopzet: Waar naartoe, Waarvandaan 2 Wegen: Random Retrieval & Naked Keywords 3 Wegen: Sformula 4 Wegen: WordNet 8 Middelen: De tools 10 Referentiekader Resultaten: Naked & Random 13 Resultaten: WordNet 14 Tweaks: Sformula 20 Resultaten: Sformula 27 Conclusie 29 Kanttekeningen 30 Literatuurlijst: 31 Tweak-Test – Wybo Wiersma 1 Inleiding: Het bepalen van de semantische relaties tussen woorden is een belangrijke taak voor de Computationele Taalkunde en Information Retrieval. Het wordt bijvoorbeeld toegepast voor het disambigueren van de betekenis van een woord in een bepaalde context. De specifieke betekenis van een woord heeft meestal gevolgen voor de vraag of een document relevant is. Ook is het vaak zo dat de manier waarop een regel van toepassing is op een woord ambigu is totdat de precieze betekenis van dat (of een ander) woord in die zin vaststaat. Semantische gelijkheid is zelf echter ook een ambigu begrip. Semantiek kan namelijk voor verschillende contexten gedefinieerd worden. Men kan bijvoorbeeld de semantische vector voor een woord op documentniveau berekenen (dus per document een specifieke semantische vector). Deze kan vervolgens afgezet worden tegen de semantische betekenis van de opgegeven combinatie van zoekwoorden. Wanneer er veel gelijkenis is tussen de twee vectoren, wordt het document relevant bevonden. Een veelbelovende uitwerking van deze methode wordt beschreven door Hongyan Jing en Evelyne Tzoukermann.1 Een andere interpretatie van semantische afstand is corpusbreed. In dat geval wordt de gemiddelde semantische afstand tussen een sleutelwoord en een ander woord corpusbreed bepaald. Het grootste nadeel van deze methode is dat de informatie betreffende de specifieke rol die een woord speelt binnen een bepaald document verloren gaat. De semantische relatie wordt een gemiddelde van alle semantische relaties die tussen de twee woorden bestaan binnen het gehele corpus. Deze variant van semantische afstand wordt hier gehanteerd. In dit essay beschrijf ik een aantal verschillende algoritmes voor het berekenen van semantische gelijkheid. De methodes van aanpak zijn in vier groepen te verdelen: Random Retrieval, Naked Keywords, Sformula en tot slot WordNet-gebaseerd. De eerste twee zijn referentiealgoritmes. Dezen hebben weinig tot niets te maken met semantische afstand, maar ze worden ingezet als referentiepunten voor het beoordelen van de performance van Sformula en de WordNet-algoritmes. Het gehanteerde criterium in dit onderzoek is de mate waarin een algoritme/methode in staat is tot het achterhalen van duidelijk te onderscheiden semantische trendgroepen in grote hoeveelheden data. Verschillende methodes zullen verschillende scores behalen voor verschillende toepassingen. Information Retrieval is geen uitzondering op dit paradigma. De behaalde ratings in dit onderzoek zijn dan ook toepassingsgericht. De F-scores bijvoorbeeld, liggen binnen dit onderzoek stukken hoger dan in onderzoeken die betrekkin hebben op TREC-data. En ook het hanteren van de corpusbrede definitie van semantische afstand is iets wat bij uitstek zinvol is voor deze toepassing, maar wat waarschijnlijk een stuk minder goed past bij doelstellingen die meer precisie vergen. Hieronder bespreek ik eerst de onderzoeksopzet en het corpus. Vervolgens bespreek ik de algoritmes, hun taalkundige aspecten en de gebruikte tools. Dan behandel ik de resultaten van het onderzoek. F-scores, precision/recall-grafieken en expand rates2 staan hierbij centraal. Bij Sformula komen hier ook de getweakte parameters, en hun (taalkundige) effecten aan bod. Tot slot bespreek ik een aantal problemen in het onderzoek. Ook passeren de zwakheden en de mogelijke verbeteringen van de Sformula hierbij de revue. Hongyan Jing, Evelyne Tzoukermann, ‘Information Retrieval based on Context Distance and Morphology’ Annual ACM Conference on Research and Development in Information Retrieval: Proceedings of the 22 nd annual international AMC SIGIR conference on Research and development in information retrieval (1999). 2 De expand-rate is de mate waarin de query, gewogen naar de woord-voorkomens in het corpus, is geexpandeerd dankzij het algoritme. In het hoofdstuk “Resultaten: WordNet” wordt dit verder uitgelegd. 1 Tweak-Test – Wybo Wiersma 2 Onderzoeksopzet: Waar naartoe, Waarvandaan Het doel van het onderzoek is het evalueren van een aantal algoritmes voor het bepalen van de corpusbrede semantische gelijkheid van twee woorden. Dit is getest door de algoritmes te gebruiken voor query expansie. Query expansie is het toevoegen van woorden aan een reeks zoekwoorden op basis van de van tevoren opgegeven sleutelwoorden. In dit onderzoek zijn twee queries met bijbehorende semantische clusters gebruikt. De sleutelwoorden waren: “prescription, medications, approved, doctors” voor het eerste cluster, het zogenaamde prescription-drugs cluster (PDC), en de woorden “money, transaction, account, bank” werden gebruikt voor het Afrika-mail cluster (AMC). De sleutelwoorden zijn bepaald door een aantal significante woorden te selecteren uit de woordfrequentielijst van het PDC, resp. AMC cluster. Ook zijn er een aantal runs gedraaid waarin slechts 1 sleutelwoord als input gebruikt is voor de beide clusters;“doctors” voor het PDC cluster en “bank” voor het AMC cluster. De clusters die als gold standard data zijn gebruikt, zijn (voor Inleiding II) door Bart Alewijnse uit het SpamCorpus geëxtraheerd. Hij heeft dit semi-automatisch gedaan. Eerst met de hand en vervolgens met het clusteringprogramma Rainbow. Het gebruikte deel van de data is van voldoende kwaliteit is om het hier als gold standard data te gebruiken. Wel is het zo dat het feit dat de data deels geselecteerd is door een computerprogramma een aantal implicaties heeft voor de resultaten van het onderzoek. Zo zal de data per cluster bijvoorbeeld in grote mate gelijkvormig zijn (voor de computer). De twee clusters bevatten ongeveer 1125 mails per stuk. Een derde cluster, waarin niet-gerelateerde mail zit (hacker-mail, sex-mail, etc…), is ongeveer 2250 mails groot. Voor dit laatste cluster zijn geen queries opgesteld. Dit cluster dient als “ruis”, dus als bron voor false positives. De clusters zijn afkomstig uit het SpamCorpus. Het SpamCorpus heb ik voor een eerdere opdracht (Inleiding II) samengesteld, schoongemaakt (attatchments verwijderd etc…), kortom gebruiksklaar gemaakt. De mails in het SpamCorpus zijn vanaf 1997 verzameld door Paul Wouters, die een site runt waarop verscheidene spam-statistieken te zien zijn.3 Het corpus bevat op dit moment 72.091 mails en 15.55 miljoen woorden (iets minder dan 216 woorden per mail). De drie clusters samen vormen het subCorpus. Dit bevat 4507 spam mails en 1.15 miljoen woorden (iets minder dan 255 woorden per mail). Er zijn andere manieren dan query expansie om algoritmes voor het berekenen van semantische afstand te benchmarken. Zo kan men kijken of de uitkomsten overeenkomen met de eigen intuïtie. Wat ook kan is het gemiddelde van de intuïties van vele proefpersonen nemen en op basis daarvan bepalen hoe goed een algoritme werkt. Alexander Budanitsky en Graeme Hirst hebben dit o.a. in hun artikel gedaan. Een andere aanpak die zij gebruiken is het testen van de algoritmes voor een concrete toepassing (zij gebruiken het voor contextdisambiguatie).4 Mijns inziens is het kijken in welke mate mensen iets gerelateerd achten te subjectief en te algemeen. Daarom kies ik hier ook voor de toepassingsgerichte aanpak. De prestatie van een algoritme is namelijk alleen maar te meten in relatie tot een bepaald doel. Relatie-indexen opleveren die het gemiddelde zijn van wat mensen vinden is slechts één doel van de vele. Een doel wat bovendien niet eens zo veel zegt over de prestaties van een algoritme binnen computationele toepassingen aangezien de “belevingswereld” en de cognitieve eigenaardigheden van computerprogramma’s (die immers in de praktijk daarna met de resultaten van het algoritme aan de slag moeten) (nog lang) niet te vergelijken zijn met die van mensen. 3 http://www.xtdnet.nl/paul/spam Alexander Budanitsky, Graeme Hirst, ‘Semantic distance in WordNet: An experimental, application-oriented evaluation of five measures’ Workshop on WordNet and Other Lexical Resources in the North American Chapter of the Association for Computational Linguistics (2001). 4 Tweak-Test – Wybo Wiersma 3 Wegen: Random Retrieval & Naked Keywords De referentiealgoritmes zijn Random Retrieval (hiervan 2 varianten) en Naked Keywords. Naked Keywords houdt in het zoeken met de ongewijzigde sleutelwoorden. In ons geval voor de beide clusters dus “prescription, medications, approved, doctors” en “money, transaction, account, bank”, respectievelijk “doctors” en “bank” bij de 1-zoekwoord runs. Het gewicht per zoekwoord is 1. Dit gewicht wordt bij elk voorkomen van het zoekwoord opgeteld bij de clusterscore van het cluster waar de query waar het woord deel van uitmaakt bij hoort. De documenten met een clusterscore hoger dan de treshold worden als relevant gemarkeerd voor het cluster. De treshold is een parameter binnen het onderzoek. Edoch is ze niet doel van het onderzoek. Daarom is hier – en op alle andere plaatsen in dit onderzoek – de treshold gehanteerd waarmee de hoogste F-score gehaald wordt.5 De prestaties van het Naked Keywords algoritme zijn belangrijk voor het staven van de prestaties van de overige algoritmes. Gewoon zoeken met de opgegeven zoekwoorden is immers de meest basale, en ook de meest geïmplementeerde zoektechniek. Random Retrieval is wat de naam doet vermoeden. Toch is de implementatie van de beide varianten van dit algoritme niet helemaal wat men zou verwachten. Het algoritme zoekt zelf namelijk geen willekeurige documenten in het corpus. Het willekeurige zit hem in de zoekwoorden en de zoekwoord-gewichten die door dit algoritme gegenereerd worden. Eerst wordt een lijst opgesteld met daarin alle woorden die vaker dan 25 keer voorkomen in het subCorpus. Per cluster wordt vervolgens 50% van de woorden uit deze lijst geselecteerd (een woord kan aan geen enkel, of aan meerdere clusters worden toegewezen). Vervolgens krijgen de hier geselecteerde woorden een willekeurig gewicht tussen 0 en 1 toegewezen. Gaat men met deze zoekwoorden zoeken dan zal het gevolg zijn dat de documenten een willekeurige clusterscore krijgen. De keuze voor het minimum aantal voorkomens van 25 zit hem in het feit dat dit zelfde minimum gehanteerd is voor inclusie in de WordNet algoritmes (Sformula hanteert een andere grens). In de eerste variant van Random Retrieval worden alle woorden (dus mogelijkerwijs ook de oorspronkelijke sleutelwoorden) op deze manier willekeurig geselecteerd en van een waarde voorzien. In de tweede variant krijgen de opgegeven sleutelwoorden een speciale behandeling. Dezen blijven namelijk in het cluster waarin ze gespecificeerd zijn, en hun gewicht blijft ook op 1 staan. Het nut van de eerste variant is het aangeven van een absolute ondergrens. Alles wat slechter scoort dan de willekeur doet meer kwaad dan goed. De tweede variant – waarin de sleutelwoorden onaangetast blijven – vormt een wat relevantere ondergrens. Bij de implementaties van (het retrieval-deel van) alle niet-random algoritmes is het namelijk ook zo dat de sleutelwoorden het gewicht 1 krijgen (en ze blijven ook in hun eigen cluster) terwijl de nieuw toegevoegde zoekwoorden in gewicht variëren tussen 0 en 1. Als de meeste van de door het algoritme toegevoegde zoekwoorden slecht gekozen of slecht geschaald zijn binnen de context van het subCorpus (en uitgaande van de gold standard data) dan zal het algoritme een F-score behalen die niet ver van deze ondergrens ligt. De Random Retrieval en Naked Keywords algoritmes hebben niet echt in het oog springende taalkundige aspecten. Alleen kan worden opgemerkt dat een woord minstens 25 maal moet voorkomen onder de 1.15 miljoen woorden van het gebruikte subCorpus om in aanmerking te komen voor inclusie bij de random zoekwoorden. Het Naked Keyword algoritme gebruikt geen stemming en geen context-disambiguisatie. Bank (Rabobank) en bank (zitten) zijn hetzelfde, en chihuahua en chihuahua-tje zijn verschillend. Zie de beschrijving bij stweak.pl onder “Middelen: De Tools” voor een beschrijving van hoe ik de treshold bij de maximale F-score bepaald heb. 5 Tweak-Test – Wybo Wiersma 4 Wegen: Sformula Sformula is een formule die ik heb opgesteld voor een eerder vak (Inleiding II). De formule is speciaal bedoeld voor het ontdekken van semantische trends in grote corpora. Voor het volledige SpamCorpus heb ik hem bijvoorbeeld gebruikt om over de tijdsspanne van 1996 tot 2004 trends in de twee semantische clusters seks en geld te ontdekken. Het nu uitgevoerde onderzoek is de eerste uitgebreide poging om Sformula te benchmarken. Ook heb ik een aantal berekeningen uitgevoerd op basis van een aantal verschillende parameters (tweaken). Bij de resultaten ga ik hier verder op in. De naam Sformula staat voor Semantic formula, hoewel de S eigenlijk afkomstig is van een naamgevings-gewoonte die ontstond naar aanleiding van de naam van het eerste tooltje wat ik schreef voor het opschonen van het SpamCorpus (SmailClean.pl). De formule gaat uit van het taalkundige idee dat collocaties semantische verwantschappen aanduiden. Hier gebruik ik de ruime definitie van collocaties: collocaties zijn bepaalde woordpatronen die vaak voorkomen rond het sleutelwoord waarvoor men de semantisch gerelateerde begrippen wil vinden. Binnen het vrij beperkte discours van de SPAM-wereld is dit geen onredelijke aanname. Maar ook in gewone teksten lijkt het me niet onwaarschijnlijk dat semantische relaties achterhaald kunnen worden op basis van collocaties. Zo wordt in het artikel van Pascual Cantos en Aquilio Sanchez gekeken naar collocaties en hun vorming aan de hand van de semantische aantrekkingskracht van woorden.6 Het beeld wat hieruit naar voren komt is niet in tegenspraak met de manier waarop Sformula de mate van semantische gerelateerdheid berekent. De eerste stap die het algoritme Sformula neemt is het voor elk woord nagaan hoe vaak, en op welke afstand het voorkomt in de buurt van een sleutelwoord. Elk woord wordt dus voorzien van een lijst met alle sleutelwoorden. Die lijst bevat uiteindelijk alle afstanden waarop het woord is aangetroffen relatief ten opzichte van het sleutelwoord. Het window is -10 tot 10, wat inhoudt dat maximaal 10 woorden naar links en maximaal 10 woorden naar rechts gekeken wordt. Met tekstuele barrières zoals zinnen en paragrafen wordt geen rekening gehouden. De window-breedte en het negeren van zinsgrenzen is iets wat eventueel gewijzigd kan worden, maar binnen dit onderzoek hebben we daar niets mee gedaan (o.a. omdat veel spam niet eens echte zinnen bevat). Een woord wordt nadien pas meegenomen door de formule wanneer het minimaal 50 keer voorkomt in het gehele corpus (dus niet 50 maal in het subCorpus). Woorden die minder vaak voorkomen krijgen sowieso een irrelevante waarde door de opbouw van de formule. De 50-voorkomens grens is dus niet meer dan een optimalisatie om de hardware te sparen. Het meest zeggende deel van de formule is hieronder weergegeven. Dit deel berekent de semantische afstand tussen een occ van een woord en een sleutelsemant (NB: een hogere output betekent dus semantisch ongelijker, een lager betekent gelijker, zie verderop voor het deel van de formule wat er voor zorgt dat de waarde uiteindelijk een gelijkheidsmaat wordt waarvan de waarde altijd tussen 0 en 1 ligt (1 precies gelijk, 0 totaal ongelijk)). De begrippen zijn ten eerste: Een sleutelsemant staat voor één of meerdere van tevoren door de gebruiker opgegeven sleutelwoorden. De woorden in het sleutelsemant vormen samen de leidende partij in de berekening van de semantische relatie. De relevantie van de sleutelwoorden (met waarde 1 elk) is de premisse waarmee de formule aanvangt. Sformula breidt het collocatieconcept uit naar collectieve collocaties voor een semant. Woorden die binnen een bepaalde vraagstelling als semantisch equivalent worden beschouwd vormen een semant. En een semant kan ook collocaties aangaan met woorden. Een woord is een woord waarvoor de semantische relatie Pascual Cantos, Aquilino Sanchez, ‘Lexical Constellations: What Collocates Fail to Tell’ International Journal of Corpus Linguistics (2001). 6 Tweak-Test – Wybo Wiersma 5 met betrekking tot het sleutelsemant berekend gaat worden. Een zoekwoord kan een woord zijn waarvan is aangetoond dat het semantisch is gerelateerd aan het sleutelsemant, maar het kan ook een sleutelwoord zijn wat deel uitmaakt van het sleutelsemant. De variabelen in de formule zijn als volgt: - matches is het aantal keren dat het woord is aangetroffen in de buurt van het sleutelsemant. - occ is het aantal keren dat het woord is aangetroffen op een specifieke afstand van het sleutelsemant (de som van alle occ’s voor een woord is dus gelijk aan matches voor dat woord) - wordc is het aantal keren dat het woord voorkomt in het (sub-)corpus. - keysemantc is het aantal keren dat het sleutelsemant voorkomt in het corpus (in het geval waarin het sleutelsemant uit meerdere sleutelwoorden bestaat is het dus de som van de voorkomens van deze sleutelwoorden). Het linker deel van de hierboven afgebeelde formule ((matches – occ) / occ) zorgt er voor dat voorkomens op steeds dezelfde afstand (een hoge occ) hoger worden aangeslagen dan voorkomens op steeds wisselende afstanden (meer maar lagere occ’s). Dit zorgt er ook voor dat de relatie tussen matches en occ’s zodanig gedefinieerd is dat woorden die op een grotere afstand van het sleutelsemant voorkomen minder kans hebben om een kleine semantische afstand op te leveren. Het is immers zo dat de kans op een bepaalde combinatie van tekens kleiner wordt naarmate de combinatie meer tekens moet bevatten of overspannen. Derhalve zal het ook zo zijn dat voor alle woorden (tekens) afzonderlijk geldt dat de kans dat zij voorkomen op een vaste afstand van een sleutelsemant kleiner wordt naarmate de afstand groter wordt (dus door het hoger raten van voorkomens op vaste afstanden leg je impliciet vast dat collocatiewoorden op kleinere afstanden een hogere rating krijgen). Het middelste deel van de semantische afstandsformule ((wordc - occ) / sqrt(matches)) zorgt er voor dat de semantische afstand sterk toeneemt wanneer het woord vaak voorkomt in het corpus. Dit wordt afgeremd wanneer er veel matches zijn, of wanneer de occ groot is. Let wel dat het in de formule hierboven slechts gaat om de semantische relatie tussen een één occ van een woord en een sleutelsemant. Voor elke occ van het woord wordt de formule doorlopen. Het doel van het middelste deel van de formule is het verwijderen van stopwoorden en andere woorden die weliswaar vaak bij de sleutelsemant staan, maar die ook zonder het sleutelsemant vaak voorkomen. Het rechter deel van de formule (sqrt((keysemantc - occ) / matches)) doet hetzelfde als het middelste, maar nu voor het aantal voorkomens van de sleutelsemant. Wel is het gewicht dankzij de wortel minder sterk dan in het geval van het aantal voorkomens van het woord. De reden hiervoor is dat het kwalijker is wanneer een vaak voorkomend woord erg significant geacht wordt bij een vrij zeldzame sleutelsemant dan wanneer een zeldzaam woord een grote significantie krijgt bij een vaak voorkomende sleutelsemant. De reden dat het rechter deel er dan toch bij zit is dat het ook weer niet de bedoeling is dat een heel vaak voorkomende sleutelsemant zomaar semantische relaties aangaat met woorden waarvoor deze helemaal niet relevant zijn. Desondanks blijft het een kenmerk van Sformula dat de relevantie gedefinieerd is als corpusgerelateerd, en dat er dus semantische relaties worden uitgedrukt die buiten het corpus tegen-intuïtief kunnen zijn. Tweak-Test – Wybo Wiersma 6 Deze drie delen worden tenslotte gedeeld door occ. Hier wordt de invloed van occ pas echt significant. In het linker deel van de formule was de invloed al significant. In de twee rechter delen niet in de meeste gevallen. Het is echter zo dat occ vooral midden- en rechtsboven in de formule staat om er voor te zorgen dat de semantische afstand netjes op nul uitkomt wanneer occ, matches, wordc en keysemantc allemaal gelijk zijn, bijvoorbeeld allemaal 1 (dat is wanneer een sleutelsemant bestaande uit 1 sleutelwoord wat 1 keer voorkomt in de buurt van een woord staat wat ook maar 1 keer voorkomt). Taalkundig gezien is het misschien vreemd om woorden in dat geval als volledig semantisch equivalent te beschouwen. Maar voor het onderzoeken van trends in grote corpora is het niet rampzalig (het enige document met het sleutelwoord krijgt wat meer gewicht), en bovendien komt de situatie überhaupt nooit voor aangezien niemand het in zijn hooft haalt om een trendanalyse te doen voor een sleutelwoord wat maar eenmaal voorkomt. Het is vooral wiskundig gezien netjes om het hele bereik van nul tot oneindig te bestrijken. Hieronder is de volledige formule te zien. Het deel wat de semantische afstand berekent (het deel boven de grote breukstreep) is hier ingebed in een structuur die er voor zorgt dat de semantische afstand omgezet wordt in een gelijkheidsmaat die uiteindelijk op een zinvolle manier gegarandeerd binnen het bereik van 0 en 1 blijft. De negatieve e-macht zet de semantische afstand om in een gelijkheidsmaat. Zie de grafiek op de volgende pagina ter illustratie. Sformula (pas de formule toe voor elke occ, sommeer de resultaten, deze som is een maat voor de semantische gelijkheid, domein [0 – 1], met 0 is ongerelateerd, 1 is gelijk) Deze gelijkheidswaarde per occ die opgeleverd wordt door de negatieve e-macht wordt vervolgens vermenigvuldigd met occ, en daarna gesommeerd voor alle occ’s zodat in het deel onder de grote breukstreep iets berekend wordt wat lijkt op het gemiddelde van alle voorkomens, en wat altijd tussen 0 en 1 ligt. Ik ga hier niet al te diep in op het onderste deel, maar wat wel belangrijk is, is dat (keysemantc / (matches + 1)) er de kern van vormt. Hoe Tweak-Test – Wybo Wiersma 7 vaker het sleutelsemant voorkomt vergeleken met het aantal matches, hoe kleiner de semantische gelijkheid wordt. Dit lijkt misschien een wat “rommelige” manier van doen, aangezien in het deel binnen de negatieve e-macht ook al gecorrigeerd werd voor het aantal keren dat de sleutelsemant voorkomt, maar het heeft een reden. Wanneer men het lijvige deel onder de breukstreep zou vervangen door alleen matches, de som van de occ’s, dan zou men in de bizarre situatie terechtkomen waarin een extra voorkomen van het woord op een niet zo frequent voorkomende afstand van het sleutelsemant de semantische gelijkheid juist naar beneden haalt (aangezien er dan een gemiddelde wordt berekend, en een extra kleine occ levert in de berekening van het gemiddelde een extra geval van een kleine semantische gelijkheid). Het berekenen van een gemiddelde gaat dus tegen alle logische intuïties in. Daarom delen we dus onder de breukstreep het aantal voorkomens van de sleutelsemant door het aantal matches. Deze deling levert een groter getal op naarmate het sleutelsemant vaker voor komt. En dus in dat geval een kleinere semantische gelijkheid aangezien dit grotere getal onder de (grote) breukstreep staat. Wanneer er meer matches bij komen, gebeurt het omgekeerde. Nu is het effect van een extra match dus zoals we het mochten verwachten. Een extra match levert een extra semantische gelijkheid op én een versterking van de op basis van de andere occ’s berekende semantische gelijkheid. De linker en de rechter delen onder de breukstreep zorgen er samen voor dat de formule altijd een waarde tussen nul en 1 oplevert, dus ook wanneer keysemantc kleiner is dan matches. Als er bijvoorbeeld immers een sleutelsemant is die eenmaal voorkomt en die omringd wordt door twintig maal hetzelfde woord dan levert het middelste deel (1 / 20 + 1) op. Een getal kleiner dan 1! Als we de som van de semantische gelijkheden hierdoor zouden delen, zou ze groter worden in plaats van kleiner… en groter dan 1! Dat terwijl het gestelde bereik [0..1] was. In de grafiek hieronder is te zien hoe het rechter deel van de formule het geleidelijk en naadloos overneemt van het linker deel (waarin wel gewoon gedeeld wordt door matches) op het moment dat het gevaar van een wanverhouding tussen matches en keysemantc aan het wijken is. Het rechter deel van de formule (de groene lijn) neemt het over van het linker deel (de blauwe lijn) zodat de som van de drie delen onder de breuklijn een stijgende lijn blijft (de rode lijn). Tweak-Test – Wybo Wiersma 8 Wegen: WordNet WordNet is een semantische database die is samengesteld door de afdeling Cognitie Wetenschappen van de Princeton University e.a. De database is op het internet gratis beschikbaar.7 In WordNet zijn meer dan 93.000 concepten, zogenaamde synsets, opgeslagen. Voor deze concepten zijn verschillende relaties vastgelegd. Voorbeelden van relaties zijn die tussen hyper- en hyponiemen (zoogdier – schaap is een hyperoniem – hyponiem relatie). Andere zijn de relaties tussen meronymen en holonymen (snuit – schaap, kamer – huis, zijn meronym – holonym relaties). Er zijn nog meer relaties gespecificeerd in WordNet, maar dit zijn wel de belangrijkste. Wat hiernaast nog belangrijk is, is dat de hyperoniem – hyponiem relaties hiërarchisch geordend zijn in een soort boomstructuur. De wortel/stam van deze structuur die voor sommige algoritmes is toegevoegd heet root-node, en deze heeft geen semantische betekenis. De root-node is er enkel en alleen om een pad tussen minder direct gerelateerde woorden mogelijk te maken. Er zijn in de loop der tijd verschillende algoritmes ontwikkeld om automatisch graden van semantische gerelateerdheid uit WordNet te extraheren. De in dit onderzoek geteste zijn: Hso, Lesk, Vector, Lin, Path en Wup. De laatste drie: Lin, Path en Wup zijn eigenlijk geen maten voor semantische gerelateerdheid, maar voor gelijkheid (similarity, niet relatedness). Deze algoritmes gebruiken alleen de hyperoniem – hyponiem relatie. Hso daarentegen gebruikt ook de meronym – holonym relaties, en tevens nog andere.8 Lesk en Vector maken (daarnaast ook nog) gebruik van de beschrijvingen van de synsets. Wat opgemerkt dient te worden is dat niet alle WordNet-gebaseerde algoritmes besproken worden in dit onderzoek. Desondanks zijn ze wel behoorlijk representatief. Hieronder zal ik de algoritmes kort uitleggen. Eerst komen de drie similarity measures aan bod, en daarna de twee relatedness measures. Path is de simpelste. Deze meet de kortste weg tussen twee synsets. Het kortst mogelijke pad heeft lengte 1 en komt voor wanneer twee synsets hetzelfde zijn. In alle andere gevallen is het pad langer en de teruggegeven semantische relatie kleiner. De formule is als volgt: Wup (Wu en Palmer 1994, herzien door Resnik in 1999) zoekt de synset die het verst verwijderd is van de root-node maar die toch beide te relateren synsets als hyponiem heeft. Deze synset wordt de Least Common Subsumer (LCS) genoemd. De afstand van deze synset ten opzichte van de root-node wordt vervolgens geschaald op basis van de afstand van de te relateren synsets ten opzichte van de root-node. De formule is hieronder afgebeeld. Diepte is hierin de afstand ten opzichte van de root-node. Lin (Lin 1998) gebruikt naast WordNet ook een datafile met daarin de Information Content (IC) voor alle WordNet synsets, a.k.a. hoe frequent ze voorkomen in een Corpus. De IC van de LCS wordt vervolgens geschaald op basis van de IC’s van de te relateren synsets. 7 http://www.cogsci.princeton.edu/~wn/ Ted Petersen, Siddharth Patwardhan, Jason Michelizzi, ‘WordNet::Similarity – Measuring the relatedness of Concepts’ Human Language Technology Conference (2004). 8 Tweak-Test – Wybo Wiersma 9 Hiermee wordt een corpustaalkundig stukje realiteit toegevoegd aangezien de frequentie van woorden/synsets een grote invloed heeft op het bepalen van redelijke semantische relaties. De manier waarop dit gedaan wordt is echter dubieus. De formule is: Hierin wordt alleen maar rekening gehouden met de IC, en niet met de padlengte. Bovendien gaat Lin er van uit dat de IC van de LCS bepalend is voor de relatie tussen de synsets (wat hetzelfde inhoudt als zeggen dat fiets en auto dan pas in redelijke mate voertuigen zijn wanneer het concept voertuig vaak wordt gebruikt in het corpus). Hso (Hirst & St-Onge 1998) lijkt op Path in zoverre dat het uitgaat van de padlengte tussen de synsets. Hso is echter een relatedness measure en geen similarity measure en derhalve beperkt Hso zich niet tot de hyponiem – hyperoniem relaties, maar worden alle in WordNet gecodeerde relaties gebruikt. Naast de padlengte wordt ook bijgehouden hoe vaak het pad overgaat op een ander type relatie. Hoe vaker er van type gewisseld moet worden, des te zwakker is de relatie. De formule waar dit algoritme gebruik van maakt is als volgt: Hierin is afstand het aantal synsets wat op de kortste weg tussen de te relateren synsets ligt. Het aantal typewijzigingen wordt weergegeven door d, en k en c zijn constanten. Het bereik is [0..16]. Bij de eerdere formules was het bereik netjes [0..1]. Lesk (Lesk 1985, uitgebreid door Banerjee & Petersen 2003) vergelijkt de synsetbeschrijvingen die in WordNet zijn opgenomen om te bepalen of begrippen gerelateerd zijn. De originele versie van Lesk keek alleen naar de beschrijvingen bij de te vergelijken woorden zelf. De in 2003 aangepaste versie kijkt ook naar de beschrijvingen van de synsets in WordNet die direct aan de te vergelijken synsets gerelateerd zijn.9 Hoe langer de reeks van overlappende woorden in de beschrijvingen des te hoger wordt de relatie aangeslagen. De formule is hieronder afgebeeld. Hierin is som de som van alle overlappende woorden/ woordreeksen en n is de lengte van de op dat moment gesommeerde woordreeks. Het bereik is [0..inf). Vector (Patwardhan 2003) gebruikt net als Lesk de beschrijvingen bij de synsets. Het verschil is dat Vector er semantische vectoren van maakt. Dit wordt gedaan door de semantische vectoren van de in de beschrijving gebruikte woorden te middelen voor elke beschrijving. De semantische relatie tussen twee synsets wordt berekend door de cosinus te nemen van de semantische vectoren van de beschrijvingen van de beide synsets. Satanjeev Banerjee, Ted Pedersen, ‘Extended Gloss Overlaps as a Measure of Semantic Relatedness’ Proceedings of the Eighteenth International Joint Conference on Artificial Intelligence (2003). 9 Tweak-Test – Wybo Wiersma 10 Middelen: De tools De gebruikte tools zijn voor een deel een uitbreiding op en een aanpassing van de voor het eerdere spam-onderzoek geschreven tools (ssemanticanalyse.pl, smakesample.pl, sgoall.pl). Enkele tools van het vorige onderzoek kon ik zelfs in ongewijzigde vorm weer inzetten (sparsewords.pl en swordvalues.pl). Ook zijn er een aantal nieuwe tools geschreven die nodig waren voor dit specifieke onderzoek (clustererormover.pl, stweak.pl, stweakrun.pl, stweakstatdata.pl, swordnets.pl, wordcounter.pl en srateexpand.pl). Daarnaast zijn er ook nog tools die gebruikt zijn om het SpamCorpus gebruiksklaar te maken. Op die tools ga ik hier niet in. Ook ga ik niet in op de library’s die ik voor het vorige onderzoek geschreven heb, en die ik ook bij dit onderzoek weer gebruikt heb. Al deze tools zijn Open Source en beschikbaar onder de GPL licentie.10 Wat daarnaast een belangrijke categorie van tools is, zijn de 3rd party tools. Voor de WordNet algoritmes heb ik gebruik gemaakt van het perl programma WordNet::Similarity. Dit is gemaakt door Siddharth Patwardhan e.a. en op zijn beurt maakt het weer gebruik van het programma WordNet::QueryData van Jason Rennie (ook deze programma’s zijn Open Source).11 Hierin zijn de eerder besproken WordNet-gebaseerde algoritmes reeds geïmplementeerd. Ik zal hieronder één voor één de door mij geschreven tools beschrijven op de volgorde waarin ze gebruikt zijn. smakesample.pl is een tooltje voor het maken van een random sample vanuit een directory-structuur naar een kopie van die zelfde directory-structuur. Het is gebruikt om een random sample te nemen uit de twee gold standard clusters (PDC en AMC). Dit is gedaan omdat de clusters wat aan de grote kant waren (zou teveel processor-tijd vergen om ze allemaal in het testproces op te nemen) en zodat er een controle-run kon worden uitgevoerd op andere data. clustererormover.pl is een betrekkelijk simpel tooltje wat als taak heeft het kopiëren van een bepaalde selectie mails vanuit de structuur die het SpamCorpus heeft (jaartal/body voor de body van de e-mail) naar een kopie van die zelfde structuur. De reeks geselecteerde (bestandsnamen van) mails worden ingelezen uit een directory met daarin symlinks (met de zelfde filenaam als de files in de SpamCorpus-structuur). Dit was namelijk de manier waarop Bart Alewijnse zijn clusters heeft ingedeeld. Aangezien de symlinks niet relatief, maar absoluut waren (en ze dus nergens meer naar verwezen nadat ik ze gekopieerd had naar mijn eigen machine) heeft het tooltje nog een extra functie en dat is het opnieuw maken van de symlinks, en dezen te kopiëren naar de gold/clusternaam directory. wordcounter.pl is een diagnostisch tooltje. Het levert een lijst met de meest voorkomende woorden in een bepaald cluster. Zowel het cluster als het aantal woorden wat men wil zien kan op de commandline worden opgegeven. Ook geeft het tooltje enige statistieken weer zoals het aantal files, het aantal woorden in de files en het aantal woorden per file. De output wordt voorzien van comment-tekens (#’s) behalve op de plaats waar de statistieken op de volgende wijze getoond worden: $varnaam = waarde;. Door ze met > in een file te dumpen, en door deze file later d.m.v. require in te lezen in een perl-programma, kunnen de waarden zonder menselijke tussenkomst meteen weer worden gebruikt in een volgend programma. Dit is zinvol omdat ssemanticanalyse.pl deze statistieken later weer nodig heeft voor de normalisaties. 10 http://www.logilogi.org/HoMe/Wybo/SpamResearch WordNet::Similarity – http://wn-similarity.sourceforge.net/ WordNet::QueryData – http://people.csail.mit.edu/u/j/jrennie/public_html/WordNet/ 11 Tweak-Test – Wybo Wiersma 11 sparsewords.pl maakt deel uit van het algoritme van Sformula. Het maakt voor alle woorden het eerder besproken lijstje met voorkomens relatief ten opzichte van sleutelwoorden. swordnets.pl heeft een aantal functies die alle WordNet gerelateerd zijn. De op deze plaats in de gebruikscyclus gebruikte functionaliteit is het maken van een lijst (zonder stopwoorden) met woorden die vaker voorkomen dan 25 maal. Deze lijst wordt verderop door de WordNet algoritmes gebruikt. De hoofdfunctie is het runnen van de verschillende WordNet algoritmes (maar dit gebeurt pas verderop vanuit stweakrun.pl). Bij WordNet::Similarity zit ook een command-line tool (similarity.pl), maar die is ten eerste traag en omslachtig, en ten tweede doet die niet precies wat ik wilde. Daarom heb ik een deel van die tool opnieuw geïmplementeerd in swordnets.pl. swordnets.pl is en blijft echter afhankelijk van WordNet::Similarity voor het echte werk. stweakrun.pl is de spil van dit onderzoek. In dit programma kan men een aantal commandlines opgeven met speciale tags op de plaatsen waar een bepaald te variëren argument opgegeven moet worden (de tag is {argumentnaam}). Vervolgens kan men het aantal stappen, en de stapgrootte opgeven waarmee voor iedere run de waarde van het argument moet worden opgehoogd (of een lijst met alle te testen waarden voor wanneer het een nominale variabel betreft). Dit kan gespecificeerd worden voor verschillende sets van programma’s. Voor dit onderzoek zijn de sets: “naked”, “random”, “wordnet” en “formula” gedefinieerd. Deze kunnen worden afgedraaid door op de commandline ./stweakrun seriesnaam –r naked –r random, etc. op te geven. Seriesnaam is een speciale archief-directoryprefix parameter die samen met de waardes van de andere argumenten wordt meegegeven aan het hulp-tooltje stweak.pl. Stweak.pl wordt vanuit stweakrun.pl aangeroepen (verderop meer over stweak.pl). Andere tools die vanuit stweakrun.pl gedraaid worden zijn: swordnets.pl (hierboven besproken), swordvalues.pl en ssemanticanalyse.pl (over deze twee hier onder meer). swordvalues.pl is het programma waarin Sformula geïmplementeerd is. Dit programma berekent de semantische afstand tussen woorden op basis van de door sparsewords.pl opgeleverde input (de lijsten). De output van swordvalues.pl bestaat uit een lijst met zoekwoorden waar achter het gewicht is gespecificeerd. Hetzelfde outputformaat wordt gehanteerd door swordnets.pl. Deze files vormen de input voor ssemanticanalyse.pl. ssemanticanalyse.pl is binnen dit onderzoek de “zoekmachine”. De lijsten met zoekwoorden (output van zowel swordvalues.pl als swordnets.pl) worden door dit script ingelezen en gebruikt om het corpus langs te gaan. De output van ssemanticanalyse.pl is een lijst met daarin voor alle documenten de som van de voor de zoekwoorden behaalde score in de verschillende clusters. Daarnaast heeft ssemanticanalyse.pl nog een tweede taak. Ssemanticanalyse kan de lijst met clusterscores op een aantal manieren normaliseren. Dit zijn: normwocount (score van een file delen door het aantal woorden in de file), normclcount (er voor zorgen dat de totaalscores van beide clusters even groot zijn door de scores voor het cluster met de hoogste score, relatief ten opzichte van die van het cluster met de laagste score, omlaag te halen) en normcltopcount (scores in een cluster delen door de gemiddelde score van de top 5% in dat cluster, en dit voor elk cluster). Voor de gepresenteerde resultaten van dit onderzoek is normwocount gebruikt. stweak.pl is ook een zeer belangrijk programma binnen dit onderzoek. Het heeft tot taak het beoordelen van de clusterscorelijstjes die opgeleverd zijn door ssemanticanalyse.pl (berekent F-score, recall en precision). Daarnaast zoekt het bij deze beoordeling naar de treshold die bij de optimale F-score hoort. Dit wordt gedaan door eerst een hash te maken met daarin alle scores die alle documenten behalen in alle clusters. In deze hash wordt per score opgeslagen hoeveel documenten true positives dan wel false positives worden wanneer de treshold deze score passeert. Vervolgens wordt deze hash naar aflopende clusterscores Tweak-Test – Wybo Wiersma 12 gesorteerd. Deze scores worden één voor één afgelopen en bij elke stap wordt de F-score berekend. Zo kan de hoogste F-score bepaald worden door steeds de F-score op te slaan die tot op dat punt de hoogste is (ook de treshold, de recall en de precision worden op die momenten opgeslagen). Daarnaast levert stweak.pl ook nog een lijst waarin voor elk document wordt aangegeven of het een positive dan wel een negative is, en of dezen true of false zijn. Wat steak.pl ook doet is het opslaan van al deze gegevens en daarnevens het kopiëren van de zoekwoordenlijst en de clusterscorelijstjes naar/in een archiefmap zodat het een en ander nadien nog met de hand gecontroleerd kan worden. Ook wordt er telkens een regel toegevoegd aan een overzichtsfile waarin de F-scores, recall, precision, treshold en alle getweakte variabelen (en hun waardes) netjes naast elkaar staan. srateexpand.pl zoekt voor een reeks zoekwoordenlijstjes uit in welke mate er query expansie heeft plaatsgevonden. De gewogen voorkomens van de toegevoegde zoekwoorden worden gedeeld door het aantal voorkomens van de originele zoekwoorden (de sleutelwoorden, in geval van Sformula de sleutelsemant) in het hele SpamCorpus. De maat hiervoor het ik hier de expand genoemd. Het is nodig om hiernaar te kijken want algoritmes die een hoge expand-rate hebben bij hoge F-scores zijn beter in staat tot zinvolle query expansie dan algoritmes waarbij de expand lager is. Bovendien kan een hoge expand bij een lage F-score een aanduiding zijn voor een te sterke expansie als oorzaak voor de slechte Fscore. De expand wordt door srateexpand.pl toegevoegd aan de door stweak.pl gecreëerde outputfiles. sgoall.pl bevat een soort runlist vergelijkbaar met die van stweakrun.pl maar nu voor alle tools die gedraaid moeten worden om – te beginnen bij het SpamCorpus – het complete onderzoek vrijwel zonder menselijke tussenkomst opnieuw te kunnen uitvoeren (natuurlijk onder het voorbehoud dat alle config-vars zoals directory-namen etc… in de source goed ingesteld zijn). stweakstatdata.pl maakt tenslotte SPSS-ready datafiles van de outputfiles van srateexpand.pl. De tweak-variabelen, de precision’s voor 21 recall-punten, en naar wens gemiddelden van expands en precision-scores worden berekend en in tab-delimited tekstfiles gezet. Tweak-Test – Wybo Wiersma 13 Referentiekader Resultaten: Naked & Random De gebruikte sleutelwoorden voor het PDC- en AMC zijn zodanig gekozen dat ze zeer frequent en zeer typerend zijn voor hun clusters. Voor het zoeken met de kale sleutelwoorden (naked) werden derhalve hoge F-scores verwacht. Daarnaast zorgt de verdeling van de documenten in twee clusters en 1 restgroep en hun verhouding qua grootte van 1:1:2 er voor dat de precision 0,25 is wanneer alle documenten aan beide clusters worden toegewezen (de zwarte horizontale lijn in de onderstaande grafiek geeft deze ondergrens weer). De paarse lijnen geven de precision/recall weer van respectievelijk de naked run met vier sleutelwoorden per cluster (donker paars) en de naked run met één sleutelwoord per cluster (licht paars). De rode cirkels geven de punten aan waar de combinatie van recall en precision de F-score maximaal maakt. Voor de normale run is de maximale F-score 0,918 en voor de 1woords run is de maximale F-score 0,677. Deze F-scores zijn erg hoog. De paarse lijnen (met name de donker paarse) kunnen derhalve gezien worden als een streefgrens. De blauwe lijnen geven de redelijke ondergrens weer. De donkerblauwe vertegenwoordigt de precision/recall van 50 Random Retrieval runs van variant 1 van dit algoritme. De lichtblauwe is het gemiddelde van 25 runs van variant 2 van het Random Retrieval algoritme (de sleutelwoorden in hun originele categorie met hun originele gewicht, …scoort daarom iets beter). De lijnen in deze grafiek vormen een zinvol referentiekader voor het beoordelen van de prestaties van de geteste algoritmes. Precision / Recall grafiek van Naked Keywords en Random Retrieval. Tussen Random Wk en Naked is acceptabel voor normale runs, tussen Random en Naked One voor 1-keyword-runs Tweak-Test – Wybo Wiersma 14 Resultaten: WordNet De WordNet-algoritmes hebben in de meeste gevallen gepresteerd binnen het zojuist besproken referentiekader. In een aantal gevallen vielen de resultaten er echter duidelijk onder de maat. Over het geheel genomen waren ze bovendien niet zeer goed. Om één van de oorzaken hiervoor te kunnen bespreken en om überhaupt de prestaties van de algoritmes te kunnen vergelijken is het nodig om het concept van de expand uiteen te zetten (zie voor een andere oorzaak het hoofdstuk Kanttekeningen). De voetafdruk van een set zoekwoorden is het totaal aantal voorkomens van een zoekwoord in het gehele SpamCorpus gewogen naar zijn gewicht, en gesommeerd voor alle zoekwoorden. De expand is de voetafdruk van de query inclusief de door het algoritme toegevoegde zoekwoorden gedeeld door de voetafdruk van de sleutelwoorden waarmee begonnen werd. De expand is dus de maat voor de mate waarin het algoritme aan query expansie heeft gedaan. Het is belangrijk om dit in de gaten te houden aangezien de maximale F-score met de kale zoekwoorden (Naked) al 0,918 was. Een algoritme kan in dit onderzoek dus goede Fscores behalen omdat ze goede query expansie doet maar ook omdat ze amper aan query expansie doet. Dit laatste geval is natuurlijk een veel mindere prestatie dan het eerste. In de nu volgende grafieken is het referentiekader weergegeven in zwart en grijs om het niet te prominent aanwezig te laten zijn. De rode cirkels geven de punten aan waar de maximale Fscore behaald is voor resp. de normale run en de 1-sleutelwoords run (normale run scoort consistent hoger). Precision / Recall van het Path algoritme. Matige prestaties voor alle varianten behalve voor de (s)et senses en remove s(t)opwords variant en de combinatie hiervan. Tweak-Test – Wybo Wiersma 15 Path presteert matig zoals te zien is in de bovenstaande Precision / Recall grafiek. Alle varianten behalve de “t” en de “t s” variant scoren zelfs op en onder het Random gemiddelde. De “s” staat voor set senses; het handmatig specificeren van welke concepten er wel, en welke concepten er niet met een bepaald opgegeven sleutelwoord worden bedoeld (binnen de twee clusters). WordNet werkt namelijk met zogenaamde synsets, hetgeen concepten zijn waarin synoniemen en/of vergelijkbare bijbetekenissen van andere woorden bijeen zijn gebracht. De code “t” staat voor het verwijderen van stopwords. Dit heeft een aanzienlijke invloed. Het gaat bij de WordNet algoritmes echter vooral om frequente woorden met weinig betekenis zoals “who” en “inc”. Echte stopwoorden zijn namelijk niet eens opgenomen in WordNet. De expand van Path schommelt tussen de 17 en de 34 resp. 57 en 140 (voor One; de 1-keywordruns), hetgeen aan de hoge kant, maar niet extreem is. Wup presteert uitgesproken slecht. Voor een deel is dit toe te schrijven aan het feit dat Wup expand’s voortbrengt tussen 47-90 resp. 169-355 voor One. Dit is erg hoog. Zelfs hoger dan wat het Random Keywords algoritme haalt (zit op 45-55 resp. 130-150). Wup valt door de mand omdat er twee clusters zijn en omdat Wup woorden toevoegt aan het ene cluster die ook, en vaak beter onder het andere kunnen vallen. Voorbeelden zijn: “job” met gewicht 0,43 in het PDC cluster en “natural” met gewicht 0,49 in het AMC cluster. Een verzachtende factor is dat er deze week net een bug is ontdekt in het WordNet::Similarity programma die de implementatie van Wup betreft. Het gevolg van deze bug is inderdaad een hogere gelijkheidsscore. Wel is het zo dat deze bug alleen optreedt wanneer een paar begrippen meer dan 1 Least Common Subsumer heeft die op verschillende afstanden van de rootnode liggen (komt bijna niet voor). Wup presteert rampzalig als gevolg van een veel te hoge expand Tweak-Test – Wybo Wiersma 16 Lin houdt zich ook niet zo goed. Voor een groot deel is dit, net als bij Wup te wijten aan een te grote gretigheid bij het gelijk veronderstellen van woordparen (expand 37-57 resp. 87-226). Path, Wup en Lin zijn gelijkheids-, en geen relatedness maten (alleen hyponiem – hyperoniem, niet de andere paden). Dit verklaart een deel van hun slechte prestaties, maar het verklaart niet waarom ze zulke hoge gelijkheidswaarden zouden moeten afgeven. Als we echter naar hun formules kijken dan wordt het een en ander – vooral met betrekking tot Wup en Lin – duidelijk. De formules van Wup en Lin zijn namelijk vrijwel hetzelfde. Het enige verschil is dat Lin rekening probeert te houden met het corpus als context door alleen veel voorkomende synsets als LCS en als sterk gerelateerde paren te gebruiken (iets wat de expand verkleint). Echter in beide gevallen is het zo dat een gelijkheid van 1/2e helemaal niet zo veel is. Een LCS ergens midden in de boom, en twee synsets als bladeren van die LCS in de top is al voldoende voor een score van 1/2. In hyponiem – hyperoniem relaties komt dat behoorlijk vaak voor. Het helemaal niet gezegd dat de manier van doen in Wup en Lin verkeerd is (de interpretatie van de schaal is een subjectief iets). Een gelijkheid van 1/2e is alleen wel erg veel wanneer je dat als gewicht geeft aan een woord wat je in query expansie hebt toegevoegd. Dat de prestatie van het Lin-algoritme in wezen helemaal zo slecht nog niet is, blijkt uit de eerste vijf door dit algoritme gelijk-bevonden woorden voor beide clusters: AMC; transfer {0,70}, return {0,68}, measures {0,67}, deposit {0,67}, bill {0,67}, PDC; medicine {0,58}, medication {0,58}, prescriptions {0,57}, md {0,55}, rock {0,54}. Wat (duidelijk) gezien kan worden in de grafieken van Lesk, Wup en Lin is dat de variant met stopwoordcorrectie in alledrie de gevallen veel beter presteert dan die waarin niets gedaan is met stopwoorden. Ook het instellen van de senses heeft een structureel positieve invloed. En tot slot scoort het zoeken met 1-sleutelwoord lager. Lin presteert matig omdat ze te grote gelijkheidswaarden toekent Tweak-Test – Wybo Wiersma 17 Hso brengt ons bij de WordNet relatedness measures. De maximale prestatie is meteen een stuk beter (max. F-score 0,69). Zeker gezien het feit dat de expand voor de “s”-variant 83,33 is. Wat meteen opvalt is dat hier het al dan niet setten van de senses een cruciaal verschil maakt. De normale Hso-run (rode lijn) ligt amper boven de random ondergrens, terwijl de “s”-variant stukken hoger ligt. Verder is het ook opmerkelijk dat het verwijderen van stopwoorden hier een positieve invloed heeft waar de senses niet geset zijn (de groene, ononderbroken lijn ligt boven de rode), terwijl de invloed negatief is als de senses wel geset zijn (de gestreepte groene lijn ligt bij de hogere recalls onder de gestreepte rode lijn). Een reden voor de goede score bij een hoge expand is dat het domein van Hso niet tussen nul en 1 ligt. De woorden in de lijst hebben een waarde die varieert tussen 0 en 5,5. Deze hogere waarden vertekenen de expand aangezien de aanvankelijke sleutelwoorden de waarde 1 behouden. Het verbetert echter misschien de prestaties ook op een onvoorziene manier. De waarde van een toegevoegd woord wordt in dit onderzoek namelijk bepaald door het gemiddelde te nemen van de door het algoritme opgeleverde semantische afstand tussen de sleutelwoorden (bij normale runs zijn dat er 4) en het woord. Hierdoor houden woorden die erg gerelateerd zijn aan alle vier de termen, een hoog gemiddelde. Aangezien hier de maximale waarde hoger is dan 1, zou het kunnen dat woorden die de essentie van de query beter beschrijven dan de query zelf, met een hoog gewicht naar voren geschoven worden. Dit zou zo kunnen zijn, gezien de top 5 in elk cluster: AMC; deposit {5,5}, deposits {5,5}, accounts {5}, bill {5}, accounting {4,5}, PDC; prescriptions {5,5}, medicines {5}, medicine {5}, medication {5}, physican {4} (vgl. met de sleutelwoorden). Het grote nadeel van Hso echter is dat het zeer traag is. Een run duurt al snel 24 uur op een 2,6 Ghz computer met 1 GB ram (gem. 2 uren bij de andere WordNet algoritmes). Tweak-Test – Wybo Wiersma 18 Lesk laat indrukwekkende F-scores zien. Voor de normale run behaalt Lesk maximaal een F-score van 0.909. Voor de 1-keyword-run is het 0.732, wat (zelfs) hoger is dan de door het Naked Keywords referentiekader-algoritme behaalde maximale F-score voor deze run. Lesk valt echter snel door de mand als we naar de expand’s gaan kijken. De expand bij de Fscore van 0.909 is slechts 2.53, wat inhoudt dat slechts 3/5e deel van de voetafdruk van de uiteindelijke query is toegevoegd door Lesk. Het andere deel bestaat uit de zoekwoorden waarmee het Naked Keywords referentie algoritme een F-score van 0.918 behaalde. Wanneer we naar de andere Lesk runs kijken dan blijkt het voor lagere F-scores niet veel beter te worden. Expand’s bij de volgende F waarden 0.895, 0.77, 0.76 zijn 4.05, 3.13 en 5.43. De woorden die opgeleverd worden zijn echter wel goed en de gewichten zijn beschaafd. In de praktijk variëren ze tussen de 0 en de 0.7. Wat wel een punt van aanmerking is, is dat de gewichten zeer snel aflopen tot op een punt waar ze amper meer invloed kunnen hebben (zit al op 0.005, ver voor de helft van de lijst met meer dan 2000 suggesties per cluster). Een niet onaanzienlijk deel van de – reeds magere - expand kan door de som van al deze woorden veroorzaakt zijn. Lesk komt vrij goed uit dit onderzoek en samen met Hso, die betere expand’s behaalde, is ze het beste afgestemd op de hier gestelde taak. Het grote voordeel van lesk is echter dat ze naar WordNet standaarden betrekkelijk snel is. Meer dan een paar uren per run heeft Lesk niet nodig. Lesk behaalt goede F-scores, maar met minieme expand’s Tweak-Test – Wybo Wiersma 19 Vector gaat niets veranderen aan de positie van Lesk en Hso. Vector is al bijna net zo traag als Hso, maar haar prestaties zijn niet veel beter dan die van Wup. Het blijft in de buurt van Random zweven. De oorzaken zijn iets anders dan bij Wup en Lin. Niet alleen is de expand extreem (65-142 resp. 229-519) omdat er zeer veel woorden zijn met een gewicht groter dan 1/4e, maar ook de gekozen woorden zijn erg slecht, zelfs wanneer ze op volgorde bekeken worden. De top vijf voor beide clusters is: AMC; accounts {0.73}, spread {0.72}, run {0.72}, deposit {0.72}, support {0.69}, PDC; doctor {0.68}, soul {0.66}, set {0.65}, human {0.65}, operation {0.64}. Waarom Vector zulke slechte woorden oplevert is moeilijk te zeggen. Vector presteert niet ver van Random Retrieval. De expand is extreem groot. Het grote zwakke punt van de WordNet algoritmes is dat ze gebaseerd zijn op WordNet. WordNet bevat relaties die opgaan in het algemene geval. Deze relaties zijn niet afgestemd op de context waarbinnen het corpus valt. Omdat SPAM een extreem subdiscourse is, komt dit zwakke punt hier goed aan het licht. De gelijkheden die subjectief ervaren worden door mensen zijn nog niet de gelijkheden die binnen een corpus van een bepaald discourse goede resultaten opleveren voor query expansie. In het geval van Wup en Lin was dat heel tastbaar. De woorden waren niet slecht, alleen hun gewicht was te hoog. Een andere zwakheid van de algoritmes is dat ze zeer traag waren over het algemeen. Enkele uren looptijd voor het aanleggen van twee clusters binnen een subCorpus van iets meer dan 4000 mails was heel gewoon. Een praktisch probleem is dat het specificeren van senses meestal vereist was voor het behalen van redelijke F-scores (slecht te automatiseren). Tweak-Test – Wybo Wiersma 20 Tweaks: Sformula De gedragingen van Sformula zijn getest aan de hand van 6 parameters, naast het verschil tussen normale runs, en runs met 1 sleutelwoord. Deze parameters zijn a, b, c, tkw, tsq en s. De parameters a, b en c zijn ingebracht in het bovenste deel van Sformula. Zij regelen het relatieve gewicht van de drie delen. Parameter a weegt het bovenstuk in zijn geheel, parameter b bepaalt met welk gewicht extra voorkomens van een woord de semantische afstand doen toenemen. Parameter c tenslotte; weegt de mate waarin extra voorkomens van het sleutelsemant de semantische afstand vergroten. De a, b en c parameters zijn vooral ingesteld om de significantie van de onderdelen voor het uiteindelijke resultaat te testen. Afgezien van misschien parameter a, was het niet de bedoeling om de parameters uit dit deel van de formule op te nemen in een gewijzigde, algemene versie van de formule. De gevolgen van wijzigingen in deze parameters zijn namelijk erg query- en contextafhankelijk (hoewel het aanbrengen van variaties in deze factoren op basis van de eigenschappen van de query een interessant idee zou zijn). De parameters tkw en tsq zijn wel bedoeld om mogelijke betere varianten van Sformula te vinden. Dit zijn dan ook binaire, kwalitatieve parameters. Als tkw of tsq op 0 staan is de formule ongewijzigd. Staat tkw op 1 dan wordt wordc gebruikt op de plaats waar nu in rood keysemantc staat. Tsq verwijdert de rode wortels wanneer ze op 1 staat. Tweak-Test – Wybo Wiersma 21 Het vervangen van de keysemantc door wordc in het middelste deel van de onderzijde van Sformula zorgt er voor dat de nadruk (gelijkheid wordt lager als het niet voldoet) nog meer komt te liggen op de relatieve zeldzaamheid van voorkomens van het woord zonder het sleutelsemant in de buurt. In de standaard variant wordt in plaats van deze extra nadruk wat sterker rekening gehouden met het aantal voorkomens van het sleutelsemant zonder het woord in haar buurt. Het middelste deel van de bovenzijde van Sformula zorgde sowieso al voor een verkleining van de semantische gelijkheid in het geval een woord vaak voorkwam zonder het sleutelsemant in de buurt. Als de wortels worden verwijderd uit het onderste deel van de formule zal dit tot gevolg hebben dat met name veel voorkomende woorden een verlaagde semantische gelijkheid met betrekking tot het sleutelsemant krijgen (het rechter deel van de onderzijde van Sformula neemt het dan namelijk over van het linker deel). Dit zal de expand sterk doen afnemen. Vooral omdat juist frequente woorden (met een grote voetafdruk) een verlaagd gewicht krijgen. De parameter “s” tenslotte staat voor het al dan niet verwijderen van stopwoorden. Er werd gehoopt dat het niet nodig zou zijn. Ook zijn er van tevoren aannames opgesteld over wat allround gezien de optimale combinatie voor de overige parameters zou zijn (dat is in termen van F-scores en expand’s voor verschillende types query). De aanname was a = 1, b = 1, c = 1, tkw = 0, tsq = 0 (waar a = 1 gelezen wordt, wordt in de formule –1 ingevuld). Sformula is in totaal 1282 maal uitgevoerd om alle permutaties van de zes parameters te kunnen uitproberen. Gelukkig is Sformula een stuk sneller dan de WordNet algoritmes (ongeveer 6 minuten per run). Maar nu eerst de resultaten van de tweaks aan a, b en c. Gemiddelde Precision / Recall van Sformula bij variaties van parameter a Tweak-Test – Wybo Wiersma 22 In de grafiek is te zien hoe de gemiddelde precision toeneemt bij het toenemen van de a-setting. Dit is niet vreemd aangezien parameter a het gehele bovenste stuk van Sformula afweegt. Daar de relatie negatief is (a = 3 levert –3 in de formule), en omdat het gehele bovenste deel een e-macht is, zal een hogere a de semantische gelijkheid sterk doen afnemen. De expand wordt kleiner, en aangezien de kale sleutelwoorden bij de normale run een hoge Fscore behaalden, gaat de precisie hierdoor stijgen (in de richting van de zwarte lijn). Voor de 1-keyword runs is precies het omgekeerde aan de hand. Een hogere a-waarde zorgt voor een lagere precision. Dat impliceert dat een hogere expand voor de 1-keyword runs voordelig is. In het staafdiagram op de volgende pagina is te zien dat een hogere a-waarde inderdaad een lagere expand tot gevolg heeft. In de grafiek daar onder (en ook in het staafdiagram) is te zien dat er iets vergelijkbaars aan de hand is voor de variaties van parameter b. Ook dit is logisch gezien de vorm van de formule. Parameter b weegt de invloed van extra voorkomens van het woord wanneer de sleutelsemant niet in de buurt is. Wanneer parameter b groot is, is dit gewicht groot, en wanneer een woord frequent voorkomt zal dit de semantische afstand doen toenemen. Hetgeen weer tot gevolg heeft dat de semantische gelijkheid kleiner wordt, waardoor de expand afneemt. Ook ditmaal is de 1-keyword-run in het voordeel bij een kleinere parametersetting. Het staafdiagram laat zien dat de invloed van parameter c op de expansie niet zeer groot is. Een hier niet afgebeelde Average Precision / Recall grafiek bevestigt ook de geringe invloed van parameter c op de Precision score (het is een kromme waarin de varianten niet te onderscheiden zijn). Het meest rechtse deel van de bovenzijde van Sformula heeft wellicht niet veel invloed. Nader onderzoek zal moeten uitwijzen of dat deel geschrapt kan worden. Gemiddelde Precision / Recall van Sformula voor parameter a (1-keyword runs) Tweak-Test – Wybo Wiersma Gemiddelde expand van Sformula voor variaties van parameter a, b en c Gemiddelde Precision / Recall van Sformula bij variaties van parameter b (voor normale- en 1-keyword runs) 23 Tweak-Test – Wybo Wiersma 24 Voor de parameters s, tkw en tsq zijn de resultaten verassend. Het al dan niet verwijderen van stopwoorden heeft veel invloed op de normale runs. Als de stopwoorden verwijderd zijn is de precisie veel hoger. Dit is tegen de verwachtingen in, aangezien verwacht werd dat Sformula opgewassen zou zijn tegen stopwoorden. Voor de 1-keywordruns maakt het echter niet uit of stopwoorden al dan niet verwijderd zijn. Hoewel het natuurlijk, net als bij de a- en b- parameters gelinkt is aan de expand (zie het ook het staafdiagram op pagina 26, vergelijk de expand’s voor de 4-keyword-runs en de 1-keywordruns), verklaart dat niet alles (als het hem louter in expand zat dan zouden de 1-keywords-runs beter moeten scoren met s = 0). Het brengt mogelijkerwijs een interessante zwakte in Sformula aan het licht. Een sleutelsemant wat meerdere woorden bevat komt namelijk veel vaker voor in de buurt van woorden dan een sleutelsemant die wat minder, of zelfs maar 1 woord bevat. Door het vaker voorkomen neemt relatief gezien het aantal keren dat de sleutelsemant voorkomt ten opzichte van de stopwoorden sterk toe. En bovendien worden stopwoorden dubbel geteld wanneer ze tussen twee dicht bijeen staande sleutelsemant-woorden in staan. Aangezien veel stopwoorden bovendien in collocaties voorkomen met bepaalde woordvormen dankzij hun functie in de zin (een simpel voorbeeld is “the” gevolgd door een zelfstandig naamwoord), kunnen ze te zwaar gaan tellen om nog weggefilterd te worden. Gemiddelde Precision / Recall bij variaties in parameter s (voor 4- en 1-keyword-runs) Tkw (grafiek volgende pagina) laat een heel ander beeld zien. Hier maken variaties geen verschil voor de normale runs, terwijl tkw = 0 iets beter presteert voor de 1-keywordruns. Het verschil blijft klein De effecten van tsq (onderste grafiek) hebben te maken met ontwikkelingen in de expand. De 4-keyword-runs hebben belang bij een afname in de expand in deze setup en de 1keyword-runs zijn beter af met een hogere expand. Het staafdiagram op pagina 26 ondersteunt dit. Tweak-Test – Wybo Wiersma 25 Gemiddelde Precision / Recall bij variaties in parameter tkw (voor 4- en 1-keyword-runs) Gemiddelde Precision / Recall bij variaties in parameter tsq (voor 4- en 1-keyword-runs) Tweak-Test – Wybo Wiersma 26 Gemiddelde expand van Sformula voor variaties in de parameters s, tkw en tsq (voor 4-keyword-runs (links) en voor 1-keyword-runs (rechts)) De tweakresultaten voor Sformula hebben opgeworpen dat het laatste deel van de bovenzijde van Sformula mogelijkerwijs verwijderd kan worden omdat ze weinig invloed uitoefent. Ook is er een zwakheid ontdekt in Sformula met betrekking tot het filteren van sleutelwoorden. Vooral dit laatste heeft serieuze implicaties voor Sformula wanneer er gebruik wordt gemaakt van sleutelsemanten die meer dan 1 woord bevatten. Tweak-Test – Wybo Wiersma 27 Resultaten: Sformula De parameterconfiguratie a = 1, b = 1, c = 1 bleek naar verwachting all-round optimaal te zijn. De resultaten van Sformula voor a = 1, b =1, c = 1 met variaties in de overige drie parameters zijn hieronder afgebeeld voor de 4-keyword-runs. De prestaties doen niet onder voor die van Lesk, zeker gezien het feit dat de optimale F-score 0.924 is bij een expand van 4.32 (s = 1, tkw = 1, tsq = 1). Dit is net iets hoger dan de score van Naked Keywords. De werkelijk optimale score, met inachtneming van de expand zit echter op een F-score van 0.879 met een expand van 10.34 (s = 1, tkw = 0, tsq = 1, hetgeen, afgezien van s = 1 de verwachtte optimale configuratie is!). De rode cirkel in de grafiek geeft het optimum weer voor de F-score 0.924 en de oranje cirkel geeft het punt weer waar het 0,879-optimum haar Fscore vindt. De rode, doorlopende lijn van Sformula waar de stopwoorden bleven staan, is een zeer zorgelijk geval. De precision is in dat geval namelijk dramatisch slecht (niet ver van Random Retrieval met een expand van 57). Sformula komt echter pas goed tot haar recht in de 1-keyword-runs (zie volgende pagina). Alle varianten scoren goed maar de verwachtte variant scoort het beste, namelijk een F-score van 0.843 bij een expand van 8.06 (de oranje cirkel). Het gaat hier – in tegenstelling tot bij de 4-keyword-runs in dit experiment waar Naked Keywords eigenlijk altijd beter is – om direct Precision/Recall-voordeel brengende query expansie. Naked Keywords scoorde 0.677 voor deze run, en Lesk 0.732; de door Sformula toegevoegde woorden brengen een verbetering van 15% tenopzicht van Lesk. Wanneer het belang van expand minder geacht wordt, kan de run waarin s wel 1 is ook aangemerkt worden als alternatief; de F-score was 0.855 bij een expand van 5,81 (de rode cirkel). Sformula presteert beter dan Lesk in de normale runs Tweak-Test – Wybo Wiersma Sformula presteert goed en optimaal in de 1-keyword-runs (met de verwachtte parameterconfiguratie a = 1, b = 1, c = 1, tkw = 0, tsq = 0, s = 0) 28 Tweak-Test – Wybo Wiersma 29 Conclusie Sformula presteerde niet slecht. Zeker niet in vergelijking met de WordNet algoritmes. Het structureel zwakke punt van de WordNet-algoritmes is dat ze absolute gelijkheden hanteren, los van het corpus. Maar afgezien daarvan is het maken van zoiets als WordNet ook nog heel arbeidsintensief, en het moet voor elke taal opnieuw gebeuren. Dit terwijl Sformula haar semantische relaties direct afleidt uit het corpus. In principe zou Sformula ook moeten werken op corpora in andere talen (niet tussen talen natuurlijk). Ook is Sformula stukken sneller dan de WordNet-gebaseerde algoritmes alhoewel hem dat ook deels zit in de implementatie van mijn toolset. Toch is Sformula nog zeker niet optimaal. Met name haar zwakte in het negeren van stopwoorden is zorgelijk. Bij sleutelsemanten van 1 sleutelwoord gaat het goed, maar als het er meer worden gaat het dramatisch mis. Er is nog meer onderzoek nodig om uit te zoeken of het ook mis gaat bij enkele sleutelwoorden die ontzettend vaak voorkomen (vermoedelijk wel). Misschien is het beter om voor de huidige vorm van Sformula om af te stappen van het idee van de sleutelsemanten. Misschien moet wel gewoon het gemiddelde van de waardes van meerdere 1-keyword-runs genomen worden. Het nadeel daarvan zal echter zijn dat de query te ver kan gaan afdrijven van haar kern en bovendien mist men dan het principe van de conceptuele collocaties. In elk geval blijft het gebruik van sleutelsemanten en vooral collocatiegebaseerde semantische gelijkheidsherkenning een interessant thema waar verder onderzoek naar gedaan zou moeten worden. Een idee voor een volgende versie van Sformula, afgezien van het fixen van de stopwoordenbug, is het toevoegen van een collocatiegebaseerde zoeksnuit. Op dit moment wordt alleen bij het expanderen van de queries gebruik gemaakt van collocaties. Aan de zoekzijde kan het echter ook zinvol zijn om samen voorkomende, gerelateerde woorden uit de (geëxpandeerde query) zwaarder te wegen.12 12 Zie ook deze paper (op dit moment nog niet gepubliceerd): Qianli Jin, Jun Zhao, Bo Xu, Window-based method for Information Retrieval (2004). Tweak-Test – Wybo Wiersma 30 Kanttekeningen Een probleem bij dit onderzoek is de implementatie van de tools. Veel van de tools (zoals met name ssemanticanalyse.pl) zijn namelijk aanvankelijk speciaal gemaakt voor Sformula. En bovendien was hun taak het uitvoeren van eenmalige trendonderzoeken. Het aflopen van meerdere runs is daarom inefficiënt geïmplementeerd. Voor Sformula valt dit nog mee (aangezien die toch vrij snel is, en met de voorgefabriceerde lijstjes toch enigszins efficiënt uitgewerkt) maar voor de WordNet-algoritmes niet. Het had bijna de helft van de (vele weken durende) run-time gescheeld wanneer een blijvende lijst was gebruikt met daarin de semantische gelijkheden die de WordNet algoritmes toekennen aan de verschillende woorden/synsets die gebruikt zijn in de verschillende runs. De grootste zwakte van het onderzoek als geheel is echter dat de resultaten gebaseerd zijn op slechts 1 dataset, en op slechts 1 query (2 als de 4- en 1-keyword-runs als aparte queries beschouwd worden). Wel is het zo dat ik ter controle een deel van de Sformula-tweakruns ook uitgevoerd heb op een tweede subCorpus (De oorspronkelijke clusters bevatten namelijk tweemaal zo veel mails. Een random sample van 50% uit deze clusters is het subCorpus geworden, de andere 50% zijn bewaard met de bedoeling om ze als controle te gebruiken). De resultaten hiervan weken niet – en heel soms hoogstens 0.01 – af van de eerdere runs qua precision-scores. Maar dan nog is dit beperkt bewijs. Een heel andere cluster-query op bijvoorbeeld het TREC-corpus kan totaal andere resultaten opleveren. Een aanzienlijke zwakte specifiek met betrekking tot de WordNet algoritmes is dat ssemanticanalyse.pl, de “zoekmachine” van dit onderzoek, geen gangbare woordfrequentiecorrecties zoals bijvoorbeeld tf-idf implementeert. Sformula is gemaakt met de bedoeling dat ze dergelijke correcties niet nodig zou hebben. De WordNet algoritmes daarentegen zouden er wellicht van kunnen profiteren, gezien hun lijvige expand´s. En natuurlijk is het feit dat er recentelijk een bug is ontdekt in het Wup-algoritme ook geen bevorderlijke zaak. Tweak-Test – Wybo Wiersma 31 Literatuurlijst: Banerjee, Satanjeev, Ted Pedersen, ‘Extended Gloss Overlaps as a Measure of Semantic Relatedness’ Proceedings of the Eighteenth International Joint Conference on Artificial Intelligence (2003). Budanitsky, Alexander, Graeme Hirst, ‘Semantic distance in WordNet: An experimental, application-oriented evaluation of five measures’ Workshop on WordNet and Other Lexical Resources in the North American Chapter of the Association for Computational Linguistics (2001). Cantos, Pascual, Aquilino Sanchez, ‘Lexical Constellations: What Collocates Fail to Tell’ International Journal of Corpus Linguistics (2001). Jing, Hongyan, Evelyne Tzoukermann, ‘Information Retrieval based on Context Distance and Morphology’ Annual ACM Conference on Research and Development in Information Retrieval: Proceedings of the 22nd annual international AMC SIGIR conference on Research and development in information retrieval (1999). Pedersen, Ted, Siddharth Patwardhan, Jason Michelizzi, ‘WordNet::Similarity – Measuring the Relatedness of Concepts’, Human Language Technology Conference (2004). Quanli Jin, Jun Zhao, Bo Xu, ‘Query expansion based on term similarity tree model’, Natural Language Processing and Knowledge Engineering, 2003. Proceedings. 2003 International Conference on (2003). Quanli Jin, Jun Zhao, Bo Xu, ‘Window-based Method for Information Retrieval’ Nog niet gepubliceerd, per e-mail ontvangen van Quanli Jin (2004).