Paper - Hogeschool Gent
Paper - Hogeschool Gent
Paper - Hogeschool Gent
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Geassocieerde faculteit<br />
Toegepaste Ingenieurswetenschappen<br />
Valentin Vaerwyckweg 1, 9000 <strong>Gent</strong><br />
Academiejaar 2011–2012<br />
Sentimentdetectie op Sociale Netwerksites<br />
Sander Van den Broecke<br />
Promotoren en begeleiders:<br />
Prof. Dr. Ir. F. De Turck (IBCN-IBBT)<br />
Dr. T. Wauters (IBCN-IBBT)<br />
P. Leroux (IBCN-IBBT)<br />
J. Deleu (IBCN-IBBT)<br />
J. Roelandts (Massive//Media)<br />
Dr. H. Naessens (<strong>Hogeschool</strong> <strong>Gent</strong>)<br />
Masterproef voorgedragen tot het behalen van het diploma van<br />
MASTER IN DE INDUSTRIËLE WETENSCHAPPEN: INFORMATICA
De auteur en promotoren geven de toelating deze scriptie voor consultatie beschikbaar te<br />
stellen en delen ervan te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder<br />
de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting<br />
uitdrukkelijk de bron te vermelden bij het aanhalen van resultaten uit deze scriptie.<br />
The author and promoters give the permission to use this thesis for consultation and to<br />
copy parts of it for personal use. Every other use is subject to the copyright laws, more<br />
specifically the source must be extensively specified when using from this thesis.<br />
<strong>Gent</strong>, Juni 2012<br />
De promotor en begeleiders De auteur<br />
Prof. Dr. Ir. Filip De Turck Sander Van den Broecke<br />
Dr. Tim Wauters<br />
Philip Leroux<br />
Johannes Deleu<br />
Joost Roelandts<br />
Dr. Helga Naessens
Sentimentdetectie op Sociale Netwerksites<br />
Detectie van seksueel misbruik in Netlog-data
Woord vooraf<br />
Langs deze weg had ik graag een woord van dank gericht aan al de mensen die mij zowel<br />
rechtstreeks als onrechtstreeks gesteund hebben bij de realisatie van mijn eindwerk.<br />
In de eerste plaats wil ik Massive//Media bedanken voor het mogelijk maken van deze<br />
thesis. In het bijzonder wil ik mijn promotor dhr. Joost Roelandts bedanken voor zijn<br />
visie en voor het nalezen van mijn paper.<br />
Een woord van dank gaat ook uit naar mijn promotoren bij het IBCN. Ik bedank<br />
dhr. Philip Leroux voor zijn organisatorische inbreng en het nalezen van mijn paper. Wens<br />
ik ook dhr. Johannes Deleu the bedanken voor zijn vele geduld wanneer ik nog maar eens<br />
met een eigen versie van een algoritme kwam aanzetten.<br />
Daarnaast wil ik ook mevr. Helga Naessens, mijn interne promotor bedanken. Zij was<br />
altijd enthousiast tijdens het opvolgen van mijn werk.<br />
Tot slot bedank ik mijn vriendin Hannelore Vens op wie ik steeds kon rekenen en bedank<br />
ik mijn ouders voor hun onvoorwaardelijke steun gedurende mijn hele opleiding.<br />
iii
Abstract<br />
Deze scriptie gaat over het detecteren van seksueel misbruik op sociale netwerken met be-<br />
hulp van tekstuele data. Om te beginnen worden in een theoretisch stuk de verschillende<br />
onderdelen van het detectieproces naar voor gebracht. Er worden drie feature selectors<br />
en drie text classifiers uitvoerig belicht. Hierbij werd gesteund op werken van Pang &<br />
Lee (2008) en Manning et al. (2008). Vooraleer ingegaan wordt op de resultaten worden<br />
ook de oorsprong en de inhoud van de testdata uitgelegd waarna ook nog enkele bijzon-<br />
derheden aan de implementatie naar voor worden gebracht. Het resultaatgedeelte van<br />
deze scriptie geeft een stapsgewijze verklaring voor de verschillende keuzes die er gemaakt<br />
werden om tot een oplossing te komen voor het detectieprobleem. Het voorlaatste stuk<br />
van de resultaten behandelt enkele pogingen om de resultaten nog verder te verbeteren<br />
door het probleem van een onevenwichtige dataset aan te pakken. Hiermee wordt in het<br />
classificatieproces een precision en een recall van boven de 90% gerealiseerd. Het resultaat-<br />
hoofdstuk wordt afgesloten met nog enkele vaststellingen uit de tijdens de verbeteringsfase<br />
uitgevoerde clustering die kunnen dienen als basis voor verder onderzoek.<br />
iv
Abstract<br />
This thesis deals with the detection of sexual abuse on social networks using textual data.<br />
Starting with a theoretical piece the various components of the detection process are<br />
brought forward. Three feature selectors and three text classifiers are examined in de-<br />
tail. This was supported by work of Pang & Lee (2008) and Manning et al. (2008). Before<br />
outlining the results, the origin and contents of the test data are explained, followed by<br />
some details of the implementation. The results section of this thesis gives a step by step<br />
explanation of the different choices that were made to reach a solution to the detection<br />
problem. The middle section of the results discusses some attempts to further improve the<br />
results by addressing the problem of an imbalanced dataset. Using these improvements<br />
during the classification process pushed the precision and the recall above 90%. The result<br />
chapter concludes with some findings from the clustering that was performed during the<br />
improvement phase. These findings can serve as a basis for further research.<br />
v
Inhoudsopgave<br />
1 Introductie 1<br />
2 Theoretische achtergrond 3<br />
2.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
2.2 Feature selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
2.2.1 Document Frequency . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
2.2.2 Collection Frequency . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.2.3 Mutual information . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.2.4 Featurebewerkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2.5 Andere methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3 Text classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.1 Multinomial Naive Bayes . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.2 Binomial Naive Bayes . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.3.3 Support Vector Machines . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.3.4 Andere methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
2.4 Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
2.4.1 Ruimte voor verbetering . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
2.4.2 K-means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
2.4.3 Andere methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
3 Data 24<br />
3.1 Oorsprong en eigenschappen . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
3.2 Vereiste data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
3.2.1 Positieve documenten . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
3.2.2 Negatieve documenten . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.2.3 Realistische test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
vi
Inhoudsopgave vii<br />
4 Implementatie 30<br />
4.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
4.2 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
5 Resultaten 34<br />
5.1 Feature selector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
5.2 Text classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
5.3 Featurebewerkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
5.4 Optimalisatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
5.5 Clustering extra’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
6 Conclusie 55<br />
Bibliografie 57<br />
Bijlage A Woordenlijsten 61<br />
A.1 Nederlandse stopwoorden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
A.2 Engelse stopwoorden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
A.3 Beperkte featurelijst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
Bijlage B Resultaattabellen 66<br />
B.1 Initiële testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />
B.2 Multinomiaal naieve Bayes . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
B.3 Binomiaal naive Bayes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />
B.4 Support vector machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />
Bijlage C Figuren 74<br />
C.1 Feature selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />
C.2 Featurebewerkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />
Bijlage D Afkortingen 81
Hoofdstuk 1<br />
Introductie<br />
Tijdens deze scriptie werd samengewerkt met Massive//Media, eigenaar van de site Netlog.<br />
Netlog is een online community waar iedereen zijn sociale netwerk kan onderhouden of<br />
uitbreiden. Op Netlog maak je een profielpagina met een blog, foto’s, video’s, evenementen,<br />
afspeellijsten en nog veel meer, en deel je die met je vrienden. Netlog wordt ontwikkeld door<br />
Massive Media NV, gevestigd in <strong>Gent</strong>, België. Netlog staat voor enkele indrukwekkende<br />
cijfers zoals meer dan 96 miljoen leden en een verspreiding in meer dan 40 talen (Netlog<br />
(2012)).<br />
Online sociale netwerksites beschikken over zeer veel informatie van gebruikers. Al deze<br />
gegevens zijn een samengaan van verschillende informatiebronnen waaronder het invullen<br />
van een profielpagina, het plaatsen van reacties, het schrijven van blogberichten, ... In<br />
deze grote hoeveelheid teksten wordt naast waardevolle inhoud helaas ook misbruik (cy-<br />
berpesten, spam, etc.) en vragen naar hulp (over zelfdoding, depressie, studieproblemen,<br />
etc.) teruggevonden. Momenteel worden deze zaken hoofdzakelijk manueel gecontroleerd<br />
door de moderatoren van de netwerksites, wat gezien de grote hoeveelheid data, voor een<br />
bepaalde vertraging zorgt in het bestrijden van misbruik of het bieden van hulp.<br />
Het doel van deze thesis is het vinden van een praktische werkwijze om berichten te analy-<br />
seren. Er wordt gezocht naar methodieken om het sentiment in berichten van personen op<br />
een sociaal netwerk te detecteren. In deze thesis wordt de term “sentiment” ingevuld met<br />
“seksueel misbruik”. Er wordt dus niet zo zeer bepaald of een persoon goed of slecht gezind<br />
is, maar of er personen zijn die ongepast seksueel gedrag uiten. De concrete invulling van<br />
de thesis kan dus geformuleerd worden als het automatiseren van de detectie van seksueel<br />
misbruik. Automatisering betekent dat gevallen van misbruik sneller kunnen aangepakt<br />
worden om zo de kwaliteit van het sociaal netwerk nog verder te verhogen.<br />
1
Hoofdstuk 1. Introductie 2<br />
Voor de methodieken wordt gekeken naar lerende system (Manning et al. (2008)). Wanneer<br />
er nieuwe tekstdocumenten met misbruik op de website geplaatst worden, moet het systeem<br />
in staat zijn om zich aan te passen. De nieuwe, nog niet eerder behandelde documenten,<br />
kunnen daarbij woorden bevatten die nog niet eerder voorkwamen in misbruikberichten.<br />
Het systeem moet leren om de juiste nieuwe woorden een negatief of positief karakter toe<br />
te wijzen.<br />
Lerende systemen kunnen opgedeeld worden in twee grote categoriën. Er zijn de supervi-<br />
sed learning systemen en de unsupervised learning systemen. Deze laatste zal zelf criteria<br />
bepalen om documenten op te delen in verschillende groepen. De kans dat dit de gewenste<br />
scheiding tussen wel en geen seksueel misbruik oplevert, is zeer klein. Er moet dus be-<br />
roep gedaan worden op een supervised learning systeem. Dit soort systemen maakt een<br />
scheiding op basis van voorbeelden van de gewenste scheiding. Het aanleveren van docu-<br />
menten die reeds gelabeld zijn volgens wel en niet aanvaardbare inhoud moet uiteindelijk<br />
een systeem geven dat zelfstandig, zonder de labels, een onderscheid kan maken tussen<br />
de verschillende soorten documenten. Deze soorten documenten worden verder aange-<br />
duid als klassen. Hierbij is de positieve klasse de klasse die positief test voor seksueel<br />
misbruik. De manueel gelabelde voorbeelddocumenten wordt de trainingsdata of de trai-<br />
ningsset genoemd. Om het systeem te testen, wordt een deel van de gelabelde documenten<br />
achtergehouden. Door deze achtergehouden gelabelde documenten voor te schotelen aan<br />
het getrainde systeem kan getest worden of de training succesvol was. De achtergehouden<br />
documenten worden dan ook vanaf nu de testset genoemd.<br />
Sentimentdetectie kan ook aangewend worden voor de classificering van reviews (scheiding<br />
van positieve en negatieve commentaar op een product), de detectie van spamberichten,<br />
het aggregeren van reviews met een verschillende beoordelingsschaal, het detecteren van<br />
gemeenschappen die er eenzelfde mening op na houden, het samenvatten van teksten in ver-<br />
schillende kernzinnen, enz. De bijdrage die sentimentdetectie kan leveren bij commerciële<br />
bedrijven mag dus niet onderschat worden. Veel informatie rond de gebruikte methodieken<br />
kan dan ook in artikels met deze onderwerpen teruggevonden worden (Tang et al. (2009),<br />
Barbosa & Feng (2010), Jindal & Liu (2008)).
Hoofdstuk 2<br />
Theoretische achtergrond<br />
2.1 Inleiding<br />
Het verwezenlijken van een lerend systeem voor tekstclassificatie vergt twee grote com-<br />
ponenten. Elke component heeft verschillende parameters. Het meest optimale resultaat<br />
wordt bereikt wanneer elke component geoptimaliseerd is met de best mogelijke parame-<br />
ters.<br />
Een eerste component selecteert de termen in een document. Om te beginnen dient het<br />
begrip ‘term’ zo goed mogelijk beschreven te worden. Op welke tekens worden documenten<br />
gesplitst, wat gebeurt er met cijfers, enzovoort. Hoewel dit op het eerste zicht een eenvou-<br />
dige taak lijkt, zijn er enkele concrete problemen die moeten aangepakt worden. Hierbij<br />
mag niet nagelaten worden te vermelden dat deze problemen taalspecifiek zijn. Daar de<br />
verstrekte data hoofdzakelijk in het Nederlands is, worden de problemen zo veel moge-<br />
lijk verduidelijkt met Nederlandse voorbeelden. Meer hierover is terug te vinden in het<br />
hoofdstuk rond featurebewerkingen (hoofdstuk 2.2.4, p. 6). Daarna moet bepaald worden<br />
welke van die termen gebruikt worden om het document te klasseren. Dit is de taak van<br />
de feature selector.<br />
De tweede grote component is de text classifier zelf. Deze gebruikt de woorden die geselec-<br />
teerd werden door de feature selector om te bepalen in welke klasse een document wordt<br />
ingedeeld.<br />
In deze studie worden drie text classifiers geëvalueerd, telkens in combinatie met een feature<br />
selector. De text classifiers zijn multinomial naive Bayes (hoofdstuk 2.3.1, p. 10), binomial<br />
naive Bayes (hoofdstuk 2.3.2, p. 12) en support vector machines (hoofdstuk 2.3.3, p. 14).<br />
3
Hoofdstuk 2. Theoretische achtergrond 4<br />
Voor de feature selector werd afgewisseld tussen document frequency (hoofdstuk 2.2.1, p. 4),<br />
collection frequency (hoofdstuk 2.2.2, p. 5) en mutual information (hoofdstuk 2.2.3, p. 5).<br />
2.2 Feature selection<br />
De volgende paragrafen geven een antwoord op de vragen “Hoe wordt bepaald welke woor-<br />
den een document definiëren?” en “Welke bewerkingen kunnen uitgevoerd worden op de<br />
termen om de feature selectie en daarmee de classifier te verbeteren?” Het basisalgoritme<br />
(Manning et al. (2008)) om de k beste features voor een klasse c uit een groep documenten<br />
D te selecteren is:<br />
Algoritme 1 Selectie beste features per klasse<br />
function SelecteerFeatures(D, c, k)<br />
V ← ExtractheerW oordenschat(D)<br />
L ← []<br />
for each t ∈ V do<br />
A(t, c) ← BerekenBruikbaarheid(D, t, c)<br />
V oegT oe(L, 〈t, A(t, c)〉)<br />
return W oordenMetGrootsteW aarde(L, k)<br />
De volgende punten geven de verschillende werkwijzen die gebruikt werden voor de bere-<br />
kening van de waarde A(t, c).<br />
2.2.1 Document Frequency<br />
Deze techniek steunt zoals de naam aangeeft op frequenties. De frequenties die hier gebuikt<br />
worden, zijn documentfrequenties. Een frequentiegetal geeft dus aan in hoeveel documen-<br />
ten een woord voorkomt. Vooral bij grote aantallen features zou document frequency (DF)<br />
goed moeten presteren (Manning et al. (2008)). Er zijn echter flink wat woorden, met<br />
name stopwoorden (zie verder p. 9), die vaak tot heel vaak voorkomen zonder bij te dragen<br />
aan het classificatieproces. Een typisch voorbeeld van stopwoorden zijn lidwoorden. Voor<br />
de rest vraagt DF geen complexe berekeningen en is het noodzakelijke geheugen beperkt<br />
tot een frequentietabel.<br />
Om de selectie te kiezen werd, volgens algoritme 1, per label de gevraagde hoeveelheid<br />
features met de hoogste frequenties behouden. Dit wil zeggen dat als een text classifier<br />
getraind wordt met 500 features, dan elke klasse gedefinieerd wordt door 500 features.
Hoofdstuk 2. Theoretische achtergrond 5<br />
2.2.2 Collection Frequency<br />
Deze vorm van feature selectie werkt eveneens met frequenties. Collection frequentie (CF)<br />
houdt bij hoe vaak een woord voorkomt in alle documenten samen.<br />
Net als bij DF zijn de berekeningen eenvoudig en beperkt het geheugengebruik zich tot<br />
een frequentietabel.<br />
2.2.3 Mutual information<br />
Deze laatste feature selection techniek is de meest complexe van de drie beschouwde tech-<br />
nieken. Mutual information (MI) meet hoeveel informatie het al dan niet voorkomen van<br />
een term bijdraagt aan het maken van een correcte classificatie.<br />
I(U, C) = <br />
<br />
et∈{1,0} ec∈{1,0}<br />
P (U = et, C = ec) log 2<br />
P (U = et, C = ec)<br />
P (U = et)P (C = ec)<br />
(2.1)<br />
Hierbij is U een random variabele die de waarden et = 1 (het document bevat term t) en<br />
et = 0 (het document bevat term t niet) kan aannemen. C is een random variabele die de<br />
waarden ec = 1 (het document zit in klasse c) en ec = 0 (het document zit niet in klasse c)<br />
kan aannemen. Ut en Cc worden gebruikt wanneer niet uit de context kan afgeleid worden<br />
over welke term t en welke klasse c het gaat.<br />
Bovenstaande formule is equivalent met de volgende:<br />
I(U, C) = N11<br />
N log 2<br />
+ N10<br />
N log 2<br />
N N11<br />
N1. N.1<br />
N N10<br />
N1. N.0<br />
+ N01<br />
N log 2<br />
+ N00<br />
N log 2<br />
N N01<br />
N0. N.1<br />
N N00<br />
N0. N.0<br />
(2.2)<br />
Hierin staan de verschillende termen N voor het aantal documenten die de waarden et<br />
en ec bevatten die worden aangeduid door de subscripts. Zo staat N10 voor het aantal<br />
documenten die term t (et = 1) bevatten en niet tot de klasse c (ec = 0) behoren. De<br />
termen N met een punt in de index zijn minder beperkend. Voorbeeld: N1. = N10 + N11 is<br />
het aantal documenten die term t (et = 1) bevatten onafhankelijk van de aanwezigheid van<br />
term t. De minst beperkende term N (zonder subscript) is het totaal aantal documenten<br />
en is dus gelijk aan N00 + N01 + N10 + N11. Het invullen van de waarden voor U en C zoals<br />
hieronder toont het verband met formule (2.1).<br />
P (U = 1, C = 1) = N11<br />
N<br />
(2.3)
Hoofdstuk 2. Theoretische achtergrond 6<br />
Mutual information meet hoeveel informatie (in de informatietheoretische zin) een term<br />
bevat over een klasse. Als de verspreiding van een woord binnen een bepaalde klasse<br />
dezelfde is als de verspreiding over alle klassen, dan is de berekende waarde gelijk aan nul.<br />
De maximale waarde wordt bereikt wanneer de term een perfecte indicator is voor een<br />
klasse, indien een term dus enkel in één bepaalde klasse voorkomt.<br />
2.2.4 Featurebewerkingen<br />
Voorafgaande bewerkingen<br />
De allereerste bewerkingen die er gebeuren op de tekstdocumenten bestaan uit het instellen<br />
van de delimiters, het wegwerken van hoofdletters en het verwijderen van diakritische<br />
tekens en cijfers.<br />
De delimiters zijn de tekens die gebruikt worden om een document op te splitsen in ver-<br />
schillende woorden. De gebruikte programmeertaal (Java) laat toe om alle delimiters te<br />
definiëren in een enkele string-variabele.<br />
In de praktijk blijkt het echter onbegonnen werk om alle exotische ASCII-tekens die voor-<br />
komen in de dataset op te nemen in de delimiterstring. De initiële aanpak werd daarom<br />
gewijzigd naar het verwijderen van al wat geen letter uit het alphabet is.<br />
Een twijfelgeval voor het verwijderen, is het afbreekstreepje (-). Volgens Kraaij & Pohl-<br />
mann (1994) worden, voor de Nederlandse taal, de beste resultaten verkregen door noch<br />
op het afbreekstreepje te splitsen, noch het afbreekstreepje te behouden, maar door het<br />
te verwijderen. Zoals in onderstaand voorbeeld worden alle afbreekstreepjes dus gewoon<br />
weggegooid. Het vervangen van de streepjes zou leiden tot het splitsen van woorden.<br />
vb: doe-het-zelf-zaak → doehetzelfzaak<br />
Het wegwerken van hoofdletters spreekt voor zich. Alle hoofdletters worden vervangen<br />
door hun kleine letter.<br />
vb: VaN iEdEr MeNs Is Dr Ma 1 DuS k BeN uNiEk<br />
→ van ieder mens is dr ma 1 dus k ben uniek
Hoofdstuk 2. Theoretische achtergrond 7<br />
Het weglaten van cijfers is een vereenvoudiging. Om bijvoorbeeld ‘w8’ op te nemen in de<br />
frequentiebel als een equivalent van ‘wacht’ zou een vervanging van vele cijfers nodig zijn.<br />
Vele, niet alle, want bijvoorbeeld voetbaluitslagen zouden dan niet mogen omgezet worden.<br />
Het verwijderen van diakritische tekens komt neer op het verwijderen van accenten, trema’s,<br />
tildes en konsoorten. De letters worden evenwel behouden.<br />
Stemming<br />
vb: ç → c é → e ë → e ^e → e ~n → n<br />
Stemming is het proces waarbij woorden afgekapt worden om ze tot eenzelfde stamvorm te<br />
herleiden. Er wordt een rudimentaire poging ondernomen om afleidingen en vervoegingen<br />
weg te werken en de woordenschat in de testset te reduceren. Een kleinere woordenschat<br />
betekent dat in geheugenkritische systemen meer features kunnen opgeslagen worden.<br />
Stemming kan ook omschreven worden als een afgezwakte vorm van lemmatizering. Deze<br />
laatste heeft eveneens als doel om de woordenschat te verkleinen door woorden terug te<br />
voeren tot hun stam, maar gaat evenwel anders te werk. Lemmatizering steunt voor het<br />
herleiden van woorden op een taalkundige analyse. Een taalkundige analyse kan bovendien<br />
verder gaan dan enkel een woord reduceren tot zijn stam. Er kan ook een link gelegd worden<br />
tussen woorden die hetzelfde voorwerp aanduiden, maar weinig letters gemeenschappelijk<br />
hebben. Een voorbeeld is auto en wagen.<br />
Een morfologische analyse is echter niet het onderwerp van dit werkstuk en is dan ook niet<br />
geëvalueerd. Afgezien van de beschikbare tijd, waren noch de kennis, noch de bronnen<br />
daarvoor aanwezig. Maar men kan aannemen dat, indien rekenkracht en uitvoeringstijd<br />
geen punt zijn, lemmatizering de resultaten wellicht nog meer kan verbeteren in verhouding<br />
tot stemming. Of deze verbetering de moeite is, is zoals gezegd niet uitgewerkt.<br />
Wanneer het om de Engelse taal gaat, is reeds lang een algoritme beschikbaar dat goede<br />
resultaten haalt. Dit algoritme, genoemd naar zijn uitvinder, is gekend als Porter’s Al-<br />
gorithm. Onze data bestaat echter voornamelijk uit Nederlandstalige tekst. De beperkte<br />
Engelstalige content bestaat voor het overgrote deel uit songteksten. Het toepassen van<br />
Porter’s Algorithm op onze data zou van weinig nut zijn daar stemmingsalgoritmen per<br />
definitie taalspecifiek zijn.<br />
Een oplossing werd gevonden in de paper van Kraaij & Pohlmann (1994) getiteld “Porter’s<br />
Algorithm for Dutch”. Hierbij wordt gesteund op de bevindingen van Kraaij & Pohlmann
Hoofdstuk 2. Theoretische achtergrond 8<br />
(1994) om het afbreekstreepje niet te behouden als karakter en evenmin om woorden op<br />
die plaats te splitsen. In plaats daarvan worden afbreekstreepjes gewoon verwijderd. De<br />
Nederlandstalige variant van Porter’s Algorithm bestaat uit zes regelclusters. Deze regel-<br />
clusters hebben als doel...<br />
... morfologische verbuigingen zo veel mogelijk te omvatten.<br />
... enkel de affixen (omvat prefixen, infixen en suffixen) te verwijderen die niet zorgen<br />
voor een groot verlies aan informatie.<br />
...de meest frequente affixen te behandelen.<br />
De regelclusters worden gedefinieerd met behulp van enkele extra voorwaarden en/of func-<br />
ties. Deze functies zijn aangeduid in het regeloverzicht met behulp van afkortingen:<br />
M: maat, staat voor het aantal groepen van klinker(s)-medeklinker(s) die een woord<br />
bevat. Zo is de maat van het woord thesis gelijk aan 2 en van twee gelijk aan 0.<br />
De maat kan een voorwaarde zijn voor het uitvoeren van de regel.<br />
EM: eindigt op medeklinker. Ga door met het verwijderen van klinkers tot je bij een<br />
medeklinker komt.<br />
VK: verdubbel klinker, na het verwijderen van bepaalde suffixen kan het nodig zijn<br />
om de stamklinker te verdubbelen. Voorbeelden: rode → rood, lopen → loop, ...<br />
Bij het toepassen van de regels, uit tabel 2.1 (p. 9), dient de volgorde behouden te wor-<br />
den. De eerste cluster (regels 1 en 2) gaat over morfologische verbuiging van zelfstandige<br />
naamwoorden, adjectieven en werkwoorden. De tweede cluster (regels 3 en 4) behandelt<br />
verkleinwoorden. De derde cluster (regels 5 en 6) behandelt verbuigingen tot zelfstandige<br />
naamwoorden. De vierde cluster (regels 7 en 8) gaat over verbuigingen tot adjectieven.<br />
De vijfde cluster (regels 9 en 10) behandelt het affix ‘ge’ dat zowel voorkomt als suffix als<br />
infix. De zesde en laatste cluster (regels 11 en 12) zijn enkele regels die het resultaat van<br />
de vorige regels vervolmaken. Het ∅-teken betekent dat het affix dient te worden verwij-<br />
derd. In verdere grafieken en tabellen wordt het toepassen van stemming aangeduid met<br />
de letters ‘st’.
Hoofdstuk 2. Theoretische achtergrond 9<br />
1 en → ∅ M > 0 EK VK (-en, meervouden)<br />
2 e → ∅ M > 0 EK VK (-e, adjectieven)<br />
3 etj → ∅ EK VK (-etje, de eind-‘e’ werd al behandeld)<br />
4 tj → ∅ (-e, zelfde opmerking als hierboven)<br />
5 heid → ∅ M > 0 VK (-heid)<br />
6 ing → ∅ M > 0 (-ing)<br />
7 baar → ∅ M > 0 VK (-baar)<br />
8 ig → ∅ M > 0 (-ig)<br />
9 ge- → ∅ M > 0 (ge-)<br />
10 -ge- → ∅ (-ge-)<br />
11 v → f (-v → -f)<br />
12 pp → p (-pp → -p)<br />
Stopwoorden<br />
Tabel 2.1: Een Nederlandse versie van Porter’s Algorithm<br />
Om de definiëring van de klassen te verbeteren, kan het nuttig zijn om zeer frequente<br />
woorden niet op te nemen in de berekeningen. De hoge frequenties zorgen voor grote<br />
getallen bij de berekeningen en bovendien dragen de termen niet bij tot definiëring van<br />
een klasse. Manning et al. (2008) beschrijft de algemene trend in informatievergarende<br />
systemen, gaande van het gebruik van lange lijsten (200-300 termen) naar zeer kleine stop-<br />
woordlijsten (7-12 termen) naar helemaal geen stopwoordfiltering. Ook stopwoorden zijn,<br />
net als stemmingregels, zeer taalspecifiek. De stopwoordlijst die gebruikt werd voor de eer-<br />
ste metingen bestond uit 48 termen (1ste Keuze BV (2012)). Omdat deze stopwoordenlijst<br />
niet volstond voor de testen rond clustering is vanaf dan overgegaan op een langere lijst<br />
van 104 Nederlandse woorden (van Holten (2008)). Het opnemen van een Engelse stop-<br />
woordenlijst met 174 termen bleek eveneens een nuttige aanvulling. De stopwoordlijsten<br />
zijn opgenomen in de bijlages A.1 en A.2 (p. 61, 62). In verdere grafieken en tabellen wordt<br />
het filteren van stopwoorden aangeduid met de letters ‘sw’.<br />
Combinatie van stemming en stopwoorden<br />
Een combinatie van stemming en stopwoorden ligt voor de hand, maar levert daarom niet<br />
altijd betere resultaten op. Bij het evalueren van de verschillende text classifiers is de<br />
invloed van stemming en stopwoorden zowel apart als gecombineerd geëvalueerd.
Hoofdstuk 2. Theoretische achtergrond 10<br />
2.2.5 Andere methodes<br />
Document frequency, collection frequency en mutual information zijn slechts enkele metho-<br />
des voor het selecteren van features. Andere methoden zijn:<br />
χ 2 (chi square, Manning et al. (2008))<br />
Beslissingsbomen (Grabczewski & Jankowski (2005))<br />
2.3 Text classifier<br />
Zoals reeds eerder aangehaald werd, is de text classifier de module van het totaalsysteem<br />
die de beslissing neemt tot welke klasse een document behoort. Deze scriptie belicht drie<br />
text classifiers: twee vormen van naive Bayes en support vector machines.<br />
Alle behandelde classifiers zijn toepassingen van supervised learning. Er wordt dus gebruik<br />
gemaakt van een trainingset om een nieuw document te klasseren. Het testen van een<br />
supervised learning algoritme gebeurt door een deel van de gelabelde documenten achter<br />
te houden bij het trainen. Deze documenten worden dan in de testfase aangewend om de<br />
classificatie te beoordelen. De parameters voor de beoordeling zijn aan het begin van dit<br />
hoofdstuk reeds besproken.<br />
2.3.1 Multinomial Naive Bayes<br />
Naive Bayes is een statistische classifier. Dit betekent dat er gesteund wordt op kans-<br />
berekening en waarschijnlijkheden om te bepalen in welke categorie een document wordt<br />
ingedeeld. Wanneer een woord vaak voorkomt in een document van een bepaalde klasse<br />
in de trainingsset, dan is het waarschijnlijk dat een nieuw document uit de testset dat<br />
hetzelfde woord bevat ook tot die bepaalde klasse behoort.<br />
De kans dat een document d tot een klasse c behoort, wordt berekent als volgt:<br />
P (c|d) ∝ P (c) <br />
1≤k≤nd<br />
P (tk|c) (2.4)<br />
Hierbij is P (tk|c) de voorwaardelijke kans dat een term tk voorkomt in een document van<br />
klasse c. Uit vergelijking 2.4 volgt dat P (c|d) evenredig is met (∝) het product van de<br />
voorwaardelijke kansen voor alle termen uit het document d vermenigvuldigd met de kans
Hoofdstuk 2. Theoretische achtergrond 11<br />
P (c). Deze laatste geeft aan wat de waarschijnlijkheid is waarmee een document voorkomt<br />
in klasse c. P (c) is op voorhand natuurlijk niet gekend en wordt geschat uit de trainingsset.<br />
Bij classificatie wordt op zoek gegaan naar de klasse uit de klassenverzameling C die het<br />
beste past bij het te klasseren document. Voor deze klasse cbest is de waarschijnlijkheid<br />
maximaal.<br />
cbest = max<br />
c∈C<br />
= max<br />
c∈C<br />
ˆP (c|d) (2.5)<br />
ˆP (c) <br />
ˆP (tk|c) (2.6)<br />
1≤k≤nd<br />
Er staat ˆ P om aan te duiden dat de echte waarde van P (c) en P (tk|c) niet gekend zijn,<br />
maar geschat worden uit de trainingsset zoals verderop aangegeven.<br />
In vergelijking (2.6) worden veel probabiliteiten vermenigvuldigd. Dit kan leiden tot een<br />
underflow bij de berekeningen. Deze vermenigvuldiging wordt daarom vervangen door een<br />
optelling van de logaritmen van de probabiliteiten. De klasse met de hoogste logaritmische<br />
probabiliteit is nog steeds de meest waarschijnlijke, immers: log(xy) = log(x) + log(y) en<br />
de logaritmische functie is monotoon stijgend. Dit geeft:<br />
cbest = max<br />
c∈C<br />
<br />
log ˆ P (c) + <br />
1≤k≤nd<br />
log ˆ P (tk|c)<br />
<br />
(2.7)<br />
Hoe gaat nu het schatten van de parameters ˆ P (c) en ˆ P (tk|c) in zijn werk? Voor de schatting<br />
kunnen volgende formules (opgesteld als Maximum Likelihood Estimate, zie (Manning et al.,<br />
2008)) gebruikt worden:<br />
ˆP (c) = Nc<br />
N<br />
ˆP (t|c) =<br />
Tct<br />
<br />
t ′ ∈V<br />
Tct ′<br />
(2.8)<br />
(2.9)<br />
Hierbij is Nc het aantal documenten in klasse c en N nog steeds het totaal aantal docu-<br />
menten. Tct is het aantal keer dat term t voorkomt in klasse c waarbij het meervoudig<br />
voorkomen van een woord binnen één document meegeteld wordt. De noemer uit vergelij-<br />
king (2.9) is de som van de frequenties van alle woorden binnen de klasse c. ˆ P (t|c) is dus<br />
hetzelfde als de relatieve frequentie van term t in documenten behorende tot klasse c.
Hoofdstuk 2. Theoretische achtergrond 12<br />
Het probleem met een schatting als Maximum Likelihood Estimate is dat ze de waarde 0<br />
krijgt wanneer een term-klasse combinatie niet voorkomt in de trainingsset. In vergelij-<br />
king (2.6) worden alle probabiliteiten vermenigvuldigd. Een probabiliteit van 0 kan dus<br />
ongewild de ganse vermenigvuldiging reduceren tot nul. Dit probleem kan niet opgelost<br />
worden met enkele voorwaarden omdat de trainingsdata nooit groot genoeg is om zeld-<br />
zame term-klasse combinaties goed te representeren. De oplossing ligt in het toepassen<br />
van Laplace smoothing, die eenvoudig 1 optelt bij elk aantal. Alle woorden krijgen dus een<br />
uniforme initiële verdeling over alle klassen. Elk woord krijgt een startfrequentie 1 in elk<br />
document en deze frequentie wordt aangepast naarmate de trainingsdata verwerkt wordt.<br />
ˆP (t|c) =<br />
=<br />
Tct + 1<br />
<br />
t ′ ∈V<br />
Tct ′ + 1<br />
Tct + 1<br />
( <br />
t ′ (2.11)<br />
∈V<br />
Tct ′) + B′<br />
Hierbij is B ′ = |V | het aantal woorden in de woordenschat V .<br />
(2.10)<br />
Multinomial is de term die gebruikt wordt om aan te duiden dat er bij het berekenen van de<br />
waarschijnlijkheden rekening gehouden wordt met de frequentie dat een woord voorkomt<br />
in een document. Dit in tegenstelling tot een binomial naive Bayes classifier waar enkel<br />
gewerkt wordt met de aanwezigheid van woorden.<br />
Algoritme 2 (p. 13) is de pseudocode (Manning et al. (2008)) die aan de basis ligt van de<br />
gebruikte implementatie.<br />
2.3.2 Binomial Naive Bayes<br />
Deze classifier is eveneens een naive Bayes classifier. In plaats van een multinomial model<br />
heeft deze binomial naive bayes classifier een Bernoulli model. Dit Bernoulli model houdt<br />
enkel rekening met de aanwezigheid van woorden waar het multinomiale model rekening<br />
houdt met de frequenties van woorden. Wanneer een testdocument geklasseerd wordt, ge-<br />
bruikt de classifier enkel de binaire aanwezigheidsinformatie. Als gevolg hiervan maakt het<br />
Binomiale model typisch veel fouten bij het classificeren van lange documenten (Manning<br />
et al., 2008). Echt lange documenten zijn in onze dataset eerder uitzonderlijk.<br />
Het Bernoulli model -ook wel binomial model genoemd- impliceert dat de probabiliteiten<br />
nu anders berekend worden en ook de classificatieregels verschillen met het multinomial<br />
model. De term P (t|c) staat nu voor het aantal documenten van klasse c die term t bevat.
Hoofdstuk 2. Theoretische achtergrond 13<br />
Algoritme 2 Multinomiaal naive Bayes<br />
1: function TrainMultinomiaal(C, D)<br />
2: V ← ExtractheerW oordenschat(D)<br />
3: N ← T elAantalDocumenten(D)<br />
4: for each c ∈ C do<br />
5: Nc ← T elAantalDocumentenInKlasse(D, c)<br />
6: prior[c] ← Nc/N<br />
7: tekstc ← ConcateneerAlleDocumentenInKlasse(D, c)<br />
8: for each t ∈ V do<br />
9: Tct ← T elAantalT okensV anT erm(textc, t)<br />
10: for each t ∈ V do<br />
11: voorw kans[t][c] ← Tct+1 <br />
t ′ Tct ′+1<br />
12: return V, prior, voorw kans<br />
13:<br />
14: function DoeMNB(C, V, prior, voorw kans, d)<br />
15: W ← ExtraheerW oordenschat(V, d)<br />
16: for each c ∈ C do<br />
17: score[c] ← log prior[c]<br />
18: for each t ∈ W do<br />
19: score[c]+ = log voorw kans[t][c]<br />
20: return maxc∈C score[c]
Hoofdstuk 2. Theoretische achtergrond 14<br />
Een aanpassing van algoritme 2 (p. 13) levert algoritme 3 (p. 14).<br />
Algoritme 3 Bernoulli naive Bayes<br />
1: function TrainBernoulli(C, D)<br />
2: V ← ExtractheerW oordenschat(D)<br />
3: N ← T elAantalDocumenten(D)<br />
4: for each c ∈ C do<br />
5: Nc ← T elAantalDocumentenInKlasse(D, c)<br />
6: prior[c] ← Nc/N<br />
7: tekstc ← ConcateneerAlleDocumentenInKlasse(D, c)<br />
8: for each t ∈ V do<br />
9: Nct ← T elAantalDocumentInKlasseDieT ermBevat(D, c, t)<br />
10: voor kans[t][c] ← (Nct + 1)/(Nc + 2)<br />
11: return V, prior, voorw kans<br />
12:<br />
13: function DoeBNB(C, V, prior, voorw kans, d)<br />
14: vd ← ExtraheerW oordenschat(V, d)<br />
15: for each c ∈ C do<br />
16: score[c] ← log prior[c]<br />
17: for each t ∈ Vd do<br />
18: if t ∈ Vd then<br />
19: score[c]+ = log voorw kans[t][c]<br />
20: else<br />
21: score[c]+ = log 1 − voorw kans[t][c]<br />
22: return maxc∈C score[c]<br />
2.3.3 Support Vector Machines<br />
Deze classifier verschilt met de twee vorige text classifiers in het feit dat het een geo-<br />
metrische classifier is. Naive Bayes text classifiers steunen op waarschijnlijkheden, waar<br />
deze classifier steunt op vectoren. Elk document wordt omgezet naar een vector. Vertrek-<br />
kende vanuit de oorsprong van de vectorruimte duidt elke vector een punt aan. Een zeer<br />
eenvoudig voorbeeld dat makkelijk te visualiseren valt, is volgend document:<br />
alfa beta alfa beta beta
Hoofdstuk 2. Theoretische achtergrond 15<br />
Dit document kan uitgezet worden in de tweedimensionale “alfa beta”-ruimte als de vector<br />
v1 = (2, 3), zie figuur 2.1. Hierin zijn de coörinaten respectievelijk de frequenties van de<br />
woorden alfa en beta.<br />
beta<br />
3<br />
2<br />
1<br />
0<br />
(2,3)<br />
1 2 3 4<br />
Figuur 2.1: De vectorrepresentatie v1 van het voorbeeld.<br />
Omdat een document natuurlijk meer dan twee verschillende woorden kan bevatten, zijn<br />
de vectoren niet tweedimensionaal maar multidimensionaal. Er zijn evenveel dimensies als<br />
er verschillende woorden in de volledige dataset staan.<br />
De vectoren kunnen op verschillende manier gerepresenteerd worden. De eerste manier<br />
kwam reeds aan bod als (2, 3). Wanneer het aantal woorden toeneemt, wordt deze re-<br />
presentatie erg lang en bevat ze bovendien veel nullen. De grote overdaad aan nullen<br />
kan weggewerkt worden door over te gaan op ijle vectoren. Bij ijle vectoren bestaan de<br />
coördinaten uit een ID van de dimensie en de waarde. Omdat de waarden vergezeld zijn<br />
van een ID is het niet meer nodig om alle ID’s op te nemen en kunnen de nulwaarden<br />
weggelaten worden. Een uitbreiding van het vorige voorbeeld naar een collectie met vijf<br />
documenten levert het overzicht in tabel 2.2 (p. 16).<br />
Merk op dat hier gekozen werd voor letters als ID’s van de coördinaten. Voor de praktische<br />
implementatie werden woorden niet afgebeeld op letters maar op getallen.<br />
Uit Manning et al. (2008) kan geleerd worden dat classificatie in vectorruimten beter pres-<br />
teert wanneer gewerkt wordt met genormaliseerde TF*IDF vectoren (zie volgende alinea)<br />
in plaats van vectoren met frequenties. In een normaliseerde vector wordt de waarde in<br />
elke dimensie gedeeld door de lengte van de vector. De nieuw bekomen vector heeft dan<br />
alfa
Hoofdstuk 2. Theoretische achtergrond 16<br />
document (1) (2) (3)<br />
alfa beta alfa beta beta (2, 3, 0, 0, 0) a:2 b:3 g:0 d:0 r:0 a:2 b:3<br />
alfa gamma beta gamma (1, 1, 3, 0, 0) a:1 b:1 g:3 d:0 r:0 a:1 b:1 g:3<br />
delta rho (0, 0, 0, 1, 1) a:0 b:0 g:0 d:1 r:1 d:1 r:1<br />
gamma beta rho (0, 1, 1, 0, 0) a:0 b:1 g:1 d:0 r:1 b:1 g:1 r:1<br />
beta beta (0, 2, 0, 0, 0) a:0 b:0 g:0 d:0 r:0 b:2<br />
(1) = normale vector<br />
(2) = vector met ID’s<br />
(3) = ijle vector met ID’s<br />
Tabel 2.2: Voorbeelden van documentvectornotaties.<br />
een lengte gelijk aan 1 en wordt daarom ook een eenheidsvector genoemd. Hieronder staat<br />
de berekening van de normalisatie van v1 (de vector horende bij het eerste document uit<br />
het voorbeeld). De genormaliseerde vector wordt voorgesteld als v1 ′ .<br />
v1 ′ = v1<br />
v1 =<br />
1<br />
√<br />
22 + 32 × v1 = 1<br />
<br />
2<br />
√ × v1 = √13 ,<br />
13 3<br />
<br />
√ , 0, 0, 0<br />
13<br />
(2.12)<br />
TF*IDF-waarden van woorden in een document zijn producten van de frequentie van het<br />
woord in het document (TF, Term Frequency) en de inverse documentfrequentie (IDF,<br />
Inverse Document Frequency). Deze laatste wordt berekend als de logaritme van het aantal<br />
documenten in de collectie gedeeld door het aantal documenten in de collectie die het woord<br />
bevatten. Dit alles samen geeft:<br />
T F ∗ IDF = T F × log N<br />
DF<br />
Terug toegepast op het eerste document uit de voorbeeldcollectie geeft dit:<br />
woord N TF DF TF*IDF<br />
alfa 5 2 2 2 × log 5<br />
2<br />
beta 5 3 4 3 × log 5<br />
4<br />
De genormaliseerde TF*IDF-vector voor het eerste voorbeelddocument wordt daarmee:<br />
v1 ′ =<br />
1<br />
<br />
(2 × log 5<br />
2 )2 + (3 × log 5<br />
4 )2<br />
× (2 × log 5<br />
2<br />
(2.13)<br />
5<br />
, 3 × log , 0, 0, 0) (2.14)<br />
4<br />
= (0.9393, 0.3431, 0, 0, 0) (2.15)
Hoofdstuk 2. Theoretische achtergrond 17<br />
Wanneer elk document uitgezet is in de vectorruimte met behulp van zijn genormaliseerde<br />
TF*IDF vector poogt de SVM classifier om een hypervlak te vinden in de multidimensionale<br />
vectorruimte die de vectoren van de positieve en de negatieve documenten zo goed mogelijk<br />
scheidt. Dit hypervlak -ook wel beslissingsvlak- genoemd, is optimaal wanneer het zo ver<br />
mogelijk verwijderd is van de data. Dit betekent dat de positie van het hypervlak -en<br />
daarmee de beslissingsfunctie van de classifier- volledig gedefinieerd is door een klein aantal<br />
vectoren uit de dataset. Deze vectoren worden de steunvectoren genoemd en verklaren de<br />
naam van de classifier. De afstand van het hypervlak tot de steunvectoren noemt men de<br />
marge.<br />
Een eenvoudige dataset met twee dimensies geeft een classificatieprobleem zoals in onder-<br />
staande figuur.<br />
Marge<br />
Hypervlak<br />
Steunvectoren<br />
Figuur 2.2: Een tweedimensionaal classificatieprobleem met SVM oplossing.
Hoofdstuk 2. Theoretische achtergrond 18<br />
2.3.4 Andere methodes<br />
Voor de volledigheid worden nog enkele andere classifiers uit de literatuur vermeld. Wie<br />
nog meer classifiers wil bekijken, kan alvast volgende termen eens opzoeken:<br />
Minimum Cuts (Pang & Lee (2004))<br />
Maximum Entropy (Zhu et al. (2005))<br />
k-Nearest Neighbour (kNN, Manning et al. (2008))<br />
Decision Trees (Kohavi (1996))<br />
2.4 Clustering<br />
Net als classificatie verdeelt clustering data in verschillende groepen. Het grote verschil<br />
tussen de twee is dat classificatie een vorm is van ongesuperviseerd leren (unsupervised<br />
learning) terwijl clustering een vorm is van gesuperviseerd leren (supervised learning). In<br />
de inleiding is reeds verklaard dat de eerste vorm mikt op een opdeling zoals aangetoond<br />
met voorbeelden onder de vorm van trainingsdata. De tweede vorm, die in dit hoofdstuk<br />
behandeld wordt, steunt niet op voorbeelden.<br />
In de inleiding werd ook reeds aangehaald waarom ongesuperviseerde systemen niet ge-<br />
schikt zijn voor de beoogde classificatie. De kans dat een ongesuperviseerd leeralgoritme<br />
vanzelf de opdeling zal maken tussen documenten met en zonder seksueel misbruik is zeer<br />
onwaarschijnlijk. Een gesuperviseerd leeralgoritme is dus zeker hetgeen nodig is voor deze<br />
taak. Er is echter een manier waarop clustering kan bijdragen tot classificatie. Deze manier<br />
wordt verderop in dit hoofdstuk besproken.<br />
Clusterarlgoritmes kunnen op verschillende manieren onderverdeeld worden. Een eerste<br />
opdeling is vlakke (flat clustering) en hiërarchische clustering (hierachical clustering). En-<br />
kel hiërarchische clustering toont relaties tussen clusters. Een tweede opdeling is harde<br />
(hard clustering) en zachte clustering (soft clustering). Bij harde clustering kan een docu-<br />
ment slecht tot één enkele cluster behoren, dit in tegenstelling tot zachte clustering waar<br />
een eenzelfde document in meerdere clusters kan voorkomen. Volgens deze opdelingen is de<br />
hier besproken K-means clustering (hoofdstuk 2.4.2, p. 19) een vlakke en harde clustering.
Hoofdstuk 2. Theoretische achtergrond 19<br />
2.4.1 Ruimte voor verbetering<br />
Hoewel de resultaten van de classifier goed zijn (zie tabel 5.3, p. 46), is er nog ruimte<br />
voor verbetering. De documenten van de realistische test worden dan misschien nergens<br />
gebruikt om de classifier te trainen, de testset wordt wel gebruikt voor het afregelen van<br />
de featurebewerkingen en het bepalen van de feature- en documentverhouding. Wanneer<br />
de classifier met de “optimale parameters” wordt losgelaten op een volledig nieuw sample<br />
uit de database, duiken de resultaten terug omlaag. Dit fenomeen waarbij het algoritme<br />
teveel afgestemd wordt op een beperkte dataset noemt men overtraining. Het algoritme<br />
wordt te zeer geoptimaliseerd voor de testset en is niet robuust genoeg om bij elk database<br />
sample goede resultaten te geven. Dit om aan te geven dat er zeker nog ruimte is voor<br />
verdere verbetering.<br />
Eén mogelijke verbetering is om de realistische testset, die nu een kleine 2000 documenten<br />
bevat, nog verder uit te breiden. Op die manier zou de realistische testset een nog beter<br />
beeld vormen van de volledige database. Het logische gevolg is dat de afregeling van de<br />
parameters meer zou afgestemd zijn op de volledige database en nieuwe samples beter<br />
verwerkt zouden worden. Het nadeel van deze methode is dat het sterk uitbreiden van de<br />
realistische testset veel tijd vraagt.<br />
Een andere mogelijkheid is het verbeteren van het classificiatieproces door het toevoegen<br />
van een extra feature. Wanneer aan elk document een onderwerp wordt toegekend, kan<br />
dit meegegeven worden aan de text classifier als een extra feature. Wanneer de classifier<br />
detecteert dat documenten over een bepaald onderwerp gevoelig zijn voor seksueel misbruik<br />
kan hij leren om de documenten bij dit onderwerp gevoeliger te beoordelen. Het toekennen<br />
van een onderwerp aan elk document kan gebeuren op een ongesuperviseerde manier met<br />
bijvoorbeeld K-means clustering. Deze vorm van clustering wordt toegelicht in Manning<br />
et al. (2008) en is een wijd verspreid algoritme dankzij zijn eenvoud en efficiëntie.<br />
2.4.2 K-means<br />
Bij de constructie van het algoritme wordt een objectieffunctie gedefinieerd. De objec-<br />
tieffunctie is een maat voor de kwaliteit van de clustering. Tijdens de uitvoering van<br />
het algoritme wordt gepoogd om de objectieffunctie te minimaliseren. De objectieffunctie<br />
voor het K-means algoritme wordt bepaald op basis van de afstand tussen de verschillende<br />
data-elementen. In een tweedimensionaal vlak kan deze afstand gedefinieerd worden als<br />
de Euclidische afstand tussen twee punten. Zo wordt de afstand tussen twee datapunten
Hoofdstuk 2. Theoretische achtergrond 20<br />
P1(x1, y1) en P2(x2, y2) gegeven door vergelijking (2.16).<br />
d(P1, P2) = (x1 − x2) 2 + (y1 − y2) 2 (2.16)<br />
Echter, in hoofdstuk 2.3.3 (p. 14) is reeds eerder besproken dat de hier behandelde dataset<br />
niet tweedimensionaal maar multidimensionaal is.<br />
De objectieffunctie die gebruikt wordt in het K-means algoritme is gekend onder de naam<br />
residual sum of squares (RSS). Om de objectfunctie te kunnen uitleggen, is het nodig van<br />
te weten wat er bedoeld wordt met het begrip centroid. Per cluster wordt de centroid<br />
gedefinieerd als het gemiddelde van de clusterelementen. Indien aangenomen wordt dat de<br />
eenvoudige documenten uit tabel 2.3 tot één cluster ωk behoren, dan wordt de bijhorende<br />
centroid µk als volgt berekend:<br />
1. Normaliseer de documentvectoren zoals in hoofdstuk 2.3.3 (p. 14).<br />
Zie vergelijkingen 2.19 tot en met 2.21.<br />
2. Neem het gemiddelde van alle vectoren, zie vergelijking 2.22.<br />
v1 ′ =<br />
v2 ′ =<br />
v3 ′ =<br />
index document vi vi ′<br />
1 alfa beta beta (1, 2) (0.447, 0.894)<br />
2 alfa alfa alfa beta (3, 1) (0.948, 0.316)<br />
3 alfa alfa (2, 0) (1, 0)<br />
vi = documentvector (2.17)<br />
vi ′ = genormaliseerdedocumentvector (2.18)<br />
Tabel 2.3: Voorbeelddocumenten in de “alfa beta”-ruimte.<br />
<br />
1<br />
1<br />
√ × (1, 2) =<br />
12 + 22 √5 , 2<br />
<br />
√ = (0.447, 0.894) (2.19)<br />
5<br />
<br />
1<br />
√10 , 1<br />
<br />
√ = (0.948, 0.316) (2.20)<br />
10<br />
<br />
2<br />
× (2, 0) = √4 , 0 = (1, 0) (2.21)<br />
<br />
0.447 + 0.948 + 1<br />
=<br />
,<br />
3<br />
0.894 + 0.316 + 0<br />
<br />
= (0.798, 0.403) (2.22)<br />
3<br />
1<br />
√ × (3, 1) =<br />
32 + 12 1<br />
√ 2 2 + 0 2<br />
µk = v1 ′ + v2 ′ + v3 ′<br />
3
Hoofdstuk 2. Theoretische achtergrond 21<br />
Figuur 2.3 is een grafische voorstelling van het uitgewerkte voorbeeld. Merk op dat de<br />
centroidvector, in tegenstelling tot de documentvectoren, niet genormaliseerd wordt.<br />
beta<br />
(0.447,0.894)<br />
(0.798,0.403)<br />
(1,2)<br />
(0.948,0.316)<br />
(1,0)<br />
(2,0)<br />
Figuur 2.3: Grafische voorstelling van het centroidvoorbeeld.<br />
(3,1)<br />
Nu het begrip centroid verklaard is, kan RSS uitgelegd worden als de som van de ge-<br />
kwadrateerde verschillen tussen elke documentvector en de centroid van zijn cluster. In<br />
formulevorm:<br />
RSSk = <br />
|v − µk| 2<br />
RSS =<br />
v∈ωk<br />
K<br />
RSSk<br />
k=1<br />
alfa<br />
(2.23)<br />
(2.24)<br />
Tijdens de uitvoering van het K-means algoritme wordt geprobeerd om deze objectieffunctie<br />
te minimaliseren. Het algoritme gaat nu als volgt (met regelnummers uit algoritme 4<br />
(p. 22)):<br />
1. Bepaald het gewenste aantal clusters K.
Hoofdstuk 2. Theoretische achtergrond 22<br />
2. Selecteer K random documenten als initiële centroids, de seeds (regel 2).<br />
3. Initialiseer de centroids met de seeds (regel 3).<br />
4. Verplaats de centroids zolang het stopcriterium niet voldaan is (regel 5).<br />
Dit houdt in dat:<br />
(a) Elke cluster geledigd wordt (regel 6).<br />
(b) Voor elk document de dichtstbijzijnde centroid bepaald wordt (regel 8).<br />
(c) Voor elke cluster de nieuwe centroid berekend wordt (regel 11).<br />
Algoritme 4 K-means<br />
1: function Kmeans(〈v1, ..., vN〉, K)<br />
2: 〈s1, ..., sK〉 ← SelecteerRandomSeeds(〈v1, ..., vN〉, K)<br />
3: for k = 1 → K do<br />
4: µk ← sk<br />
5: while StopcriteriumNietV oldaan do<br />
6: for k = 1 → K do<br />
7: ωk ← {}<br />
8: for n = 1 → N do<br />
9: j ← arg minj ′ |µj ′ − vn|<br />
10: ωj ← ωj<br />
{vn}<br />
11: for k = 1 → K do<br />
12: µk ← 1 <br />
|ωk| v∈ωk v<br />
13: return 〈ω1, ..., ωK〉<br />
Voor het stopcriterium zijn verschillende mogelijkheden die hieronder kort worden opge-<br />
somd.<br />
Een vast aantal iteraties is voltooid.<br />
De RSS-waarde valt beneden een opgelegde drempelwaarde.<br />
De vermindering van de RSS-waarde valt beneden een opgelegde drempelwaarde.<br />
Het resultaat tussen twee iteraties is niet meer gewijzigd: de documenten veranderen<br />
niet meer van cluster en de centroids blijven dezelfde.
Hoofdstuk 2. Theoretische achtergrond 23<br />
Tijdens de testen is gebruik gemaakt van de laatst optie als stopcriterium. Dit betekent dat<br />
voor elke uiteindelijke cluster de objectieffunctie minimaal is. Dit minimum is echter een<br />
lokaal minimum. Bij een tweede uitvoering van de clustering op dezelfde dataset zullen met<br />
grote waarschijnlijkheid andere seeds geselecteerd worden, de keuze is immers willekeurig.<br />
Andere seeds kunnen tot verschillende clusteringen leiden.<br />
Naast de keuze voor een stopcriterium moet ook de waarde van het gewenste aantal clusters<br />
K, ook wel de kardinaliteit van de clustering genoemd, bepaald worden. Het uitvoeren van<br />
deze bepaling van een optimale waarde is echter een NP-probleem (Aloise et al. (2009)).<br />
Gelukkig zijn enkele heuristieken beschikbaar ((Manning et al., 2008)) om een aanvaardbare<br />
waarde te vinden. Op deze heuristieken wordt hier niet verder ingegaan. Het beschikbare<br />
werkgeheugen van de toestellen waarop de testen gedraaid werden, limiteerde immers het<br />
aantal clusters.<br />
2.4.3 Andere methodes<br />
Zoals aangehaald in de inleiding van het hoofdstuk (p.18) bestaan er naast K-means (een<br />
vlakke harde clustering) nog verschillende andere vormen van clustering. De verschillende<br />
vormen die nog aangehaald worden in (Manning et al., 2008) zijn:<br />
Expectation-Maximization (EM, een vlakke zachte clustering)<br />
Hierarchical agglomerative clustering (HAC)<br />
Single-link agglomerative clustering<br />
Complete-link agglomerative clustering<br />
Group-average agglomerative clustering<br />
Centroid similarity agglomerative clustering<br />
Divisive clustering<br />
Enkel de eerstgenoemde is geen hiërarchische clustering.
Hoofdstuk 3<br />
Data<br />
3.1 Oorsprong en eigenschappen<br />
De data waarmee gewerkt werd tijdens het evalueren van de verschillende tekstclassificeer-<br />
ders en technieken is afkomstig van Netlog. Het gaat om openbare data, meer specifiek:<br />
blogberichten en commentaren hier op. De dataset van Netlog, die geleverd werd in enkele<br />
SQL-dumps, is goed voor 8.283.641 blogberichten, 12.852.999 blogcommentaren en een<br />
lijst van 51.994 geblokkeerde gebruikers. Blogberichten en commentaren zijn gelinkt aan<br />
gebruikers door middel van een ID. Namen en andere persoonlijke data zijn begrijpelijk<br />
omwille van privacyredenen niet opgenomen in de SQL-dumps.<br />
Hoewel deze data, met een totaal van 21.136.640 berichten, op het eerste zicht vrij om-<br />
vangrijk lijkt, dient deze voor het doel van dit onderzoek flink te worden uitgedund. Zo<br />
bevat de lijst van bijna 52.000 geblokkeerde gebruikers niet enkel profielen die geblokkeerd<br />
zijn vanwege het posten van seksueel ongepaste inhoud. In totaal zijn zo’n elf verschillende<br />
types van blokkering gedefinieerd. De twee types die voor ons van toepassing zijn, zijn de<br />
profielen ‘sexprofiel’ en ‘pedofielprofiel’. Er is echter ook nog het type ‘other’. Aangezien<br />
de opdeling in verschillende misbruikprofielen niet van in het begin is toegepast, zijn alle<br />
profielen van voor zekere datum ondergebracht onder ‘other’. De standaardzin eindigend<br />
op ‘... is een jongerencommunity en geen sekssite!’ als commentaar laat weinig twijfel<br />
bestaan over de echte reden van blokkering. Omdat het profiel ‘other’ zeker niet alleen<br />
gevallen van seksueel misbruik aanduidt, is besloten om dit type niet te gebruiken.<br />
24
Hoofdstuk 3. Data 25<br />
3.2 Vereiste data<br />
Uit deze ruime dataset wordt een selectie gemaakt voor het gebruik in supervised learning.<br />
Concreet betekent dit dat de data die aan het algoritme verstrekt worden, moet gelabeld<br />
zijn. Er moet dus een indicatie aan een tekstdocument gekoppeld worden die aanduidt of<br />
het document een geval is van seksueel misbruik.<br />
Daar de data geleverd werd in een SQL-dump is besloten om verder te werken met data-<br />
basestructuren en niet met bijvoorbeeld losse tekstbestanden.<br />
3.2.1 Positieve documenten<br />
Positieve documenten zijn documenten waar volgens de inhoud een positief antwoord kan<br />
gegeven worden op de vraag “Is er bij dit document sprake van seksueel misbruik?”. Een<br />
document bestaat voor blogberichten uit een titel en een corpus. Voor blogcommentaren<br />
is er enkel een corpus.<br />
De data bevat nu wel geklasseerde profielen, maar geen geklasseerde documenten die als<br />
trainingsset kunnen dienen. Daarom moest deze trainingsdata op een andere manier wor-<br />
den verkregen. Hieronder staan de verschillende technieken en query’s die gebruikt werden<br />
bij de initiële selectie van positieve data.<br />
Eerst werden uit de tabel met geblokkeerde gebruikers die gebruikers geselecteerd die ge-<br />
blokkeerd zijn omwille van seksuele misdragingen, zijnde de types ‘seksprofiel’ en ‘pedofiel-<br />
profiel’. De kans dat de berichten van deze gebruikers seksuele inhoud bevatten, is relatief<br />
groot. Dit betekent echter niet dat alle berichten van deze selectie van geblokkeerde gebrui-<br />
kers zomaar kunnen toegevoegd worden aan de tabel met seksueel misbruik. Een gebruiker<br />
kan zo bijvoorbeeld 100 berichten hebben waarvan 99 zonder seksueel misbruik, maar ge-<br />
blokkeerd worden omwille van dat ene bericht dat wel als ongepast geklasseerd wordt. Het<br />
toevoegen van de 99 toegelaten berichten zou de resultaten van de text classifier flink om-<br />
laag halen. Als extra criterium werd daarom een selectie gemaakt waarbij de gebruikers<br />
geblokkeerd zijn omwille van seksuele berichten en die bovendien maar één enkel bericht<br />
hebben. De kans dat een gebruiker geblokkeerd werd vanwege dit ene bericht is nu vrij<br />
groot. De data die nu geselecteerd is, wordt selectie Y genoemd. Maar ook nu mag er nog<br />
niet beslist worden om al deze documenten zonder meer te klasseren als seksueel misbruik.<br />
Een gebruiker kan geblokkeerd zijn voor seksuele reden en maar één tekstbericht hebben,<br />
maar 20 seksuele foto’s. Of misschien bestaat dat ene bericht uit enkel een niet toegelaten
Hoofdstuk 3. Data 26<br />
filmpje. Beeldmateriaal is geen onderwerp van deze scriptie en wordt niet behandeld. Een<br />
bericht met enkel video-tags en video-ID’s werd dan ook manueel uit selectie Y gefilterd.<br />
De redenering is analoog voor berichten met uitsluitend foto-tags en foto-ID’s. Omdat het<br />
gaat om Nederlandstalige data is een extra manuele filtering uitgevoerd op berichten die<br />
volledig Engelstalig zijn. Dit zijn voor het overgrote merendeel songteksten. Het filteren<br />
van selectie Y op berichten met uitsluitend beeldmateriaal, uitsluitend Engelstalige in-<br />
houd en berichten die helemaal niet seksgerelateerd zijn, leverde selectie X. Onderstaande<br />
query werd op de twee beschikbare datatabellen (blogs en blogs_comments) uitgevoerd<br />
goed voor twee selecties X1 van 380 documenten en X2 van 109 documenten. Daarna<br />
werden de resultaten samengevoegd tot een eindresultaat van 489 documenten.<br />
SELECT "0" AS id,<br />
"blog" AS source,<br />
concat(blogs.title,’ ’,blogs.message) AS message<br />
FROM ( SELECT userid,type,reason<br />
FROM blocked_users<br />
JOIN reason_types ON reason_type=id<br />
WHERE type IN (’SEX’,’PEDOPHILE’)<br />
LIMIT 1000 ) AS x<br />
JOIN blogs ON blogs.userid=x.userid<br />
GROUP BY x.userid<br />
HAVING count(1)=1<br />
INTO outfile ’/tmp/output.csv’<br />
FIELDS TERMINATED BY ’,’<br />
ENCLOSED BY ’"’<br />
LINES TERMINATED BY ’\n’;<br />
De eerste velden zijn noodzakelijk om de data in de daarvoor aangemaakte databasetabel te<br />
laden. De limit-clausule laat toe om het resultaat van de query op te delen in verschillende,<br />
meer overzichtelijke stukken voor revisiea. ook de vier laatste lijnen zijn ter eenvoud van<br />
revisie en zorgen voor de uitvoer naar een bestand in CSV-formaat. Dit CSV-bestand<br />
wordt in een laatste stap geconverteerd naar een bestand met MySQL-query’s voor invoer<br />
in de database.<br />
Bovenstaande redenering en filtering werd ook uitgevoerd met seksueel geblokkeerde ge-<br />
bruikers met niet één, maar twee berichten. De having-clausule uit de query wordt daarvoor<br />
op =2 gezet. De kans op berichten met seksuele inhoud blijft vrij groot. Deze keer werd
Hoofdstuk 3. Data 27<br />
na revisie een selectie X3 van 90 documenten bekomen. Dit brengt het totaal op 579<br />
documenten met seksueel onaanvaardbare inhoud.<br />
3.2.2 Negatieve documenten<br />
Aangezien er met enkel positieve gegevens niet kan getraind worden, is er nood aan een<br />
voldoende grote verzameling negatieve gegevens. Vooral indien de verhouding tussen posi-<br />
tieve en negatieve data uit de realistische data geëvenaard moet worden, is zelfs een ruime<br />
set negatieve data nodig. De verhouding en scheefheid in de klassenverdeling, ook wel class<br />
skew genoemd, wordt later besproken (p 44). Onderstaande MySQL-query werd gebruikt<br />
voor de selectie van negatieve data:<br />
SELECT "0" AS id,<br />
FROM blogs<br />
"blog" AS source,<br />
concat(blogs.title,’ ’,blogs.message) AS "message"<br />
WHERE userid NOT IN ( SELECT userid<br />
LIMIT 0,500<br />
FROM blocked_users<br />
char_length(blogs.message)>50<br />
INTO OUTFILE ’/tmp/blogs-neg-output.csv’<br />
FIELDS TERMINATED BY ’,’<br />
ENCLOSED BY ’"’<br />
LINES TERMINATED BY ’\n’;<br />
WHERE reason_type in (0,2,10) ) AND<br />
De eerste twee kolommen zijn noodzakelijk voor de structuur van de nieuwe tabel waarin de<br />
negatieve data wordt ondergebracht. Extra eisen voor de opgevraagde documenten zijn dat<br />
de gebruiker niet mag opgenomen zijn in de lijst met geblokkeerde gebruikers en bovendien<br />
moeten de documenten ten minste 50 karakters bevatten. Deze laatste eis zorgt ervoor<br />
dat het aantal mogelijke features per document in de negatieve data omhoog getrokken<br />
wordt. Deze eis werd niet toegepast bij de positieve documenten omdat de uiteindelijke<br />
set positieve documenten dan nog verder krimpt. De limit-clausule kan gevarieerd worden<br />
om blokken van 500 documenten op te vragen. De data in de tabel met negatieve data<br />
is samengesteld uit het tweemaal uitvoeren van deze query (limit 0,500 en limit 500,500).<br />
De laatste vier lijnen zijn enkel voor het wegschrijven van de geselecteerde data naar
Hoofdstuk 3. Data 28<br />
een CSV-bestand. Na revisie, want ook deze data is manueel gescand, werd dit CSV-<br />
bestand dan geconverteerd naar een lijst MySQL-insert-query’s. De data die zo overblijft<br />
als geverifieerde negatieve data bestaat uit 944 documenten.<br />
Dat ook hier revisie noodzakelijk was, heeft te maken met het feit dat een bericht duidelijk<br />
ongewenste seksuele inhoud kan bevatten, maar door de mazen van het net geglipt zijn<br />
bij de manuele detectie van Netlog. Soms is het echter veel subtieler. Zo is er een zeer<br />
expliciet verhaal rond een verkrachting die net de bedoeling heeft om te shockeren en<br />
mensen hiervoor te waarschuwen. Wanneer dit verhaal door iemand gepubliceerd wordt<br />
met de bijhorende waarschuwing en oproep tot verspreiding om het taboe rond verkrachting<br />
te doorbreken, dan is het verhaal toegestaan. Wie louter het verhaal post op zijn blog<br />
(zonder de waarschuwingen en antitaboe-oproep) en daarmee enkel de seksuele inhoud<br />
weergeeft, wordt wel geclassificeerd als seksueel misbruiker. Andere vormen van berichten<br />
die seksgerelateerde termen bevatten maar geen misbruik zijn, kunnen samengevat worden<br />
in drie categorieën. Deze categorieën staan hieronder verduidelijkt met een voorbeeldje.<br />
Humoristische definitie<br />
Lef = midden in de nacht bezopen thuiskomen met een parfum luchtje om je heen en<br />
lipstick op je kleding, je vrouw op haar kont slaan en zeggen: “Jij bent de volgende.”<br />
Seksmop<br />
Er lopen twee domme blondjes op straat.<br />
Zegt de een tegen de ander: “Heb jij ook een roze clitoris?”<br />
Waarop de ander antwoordt: “Weet ik niet, mijn man doet de tuin.”<br />
Wist je dat...<br />
WIST JE DAT...<br />
...de gemiddelde lengte van een piemel (slap) 8,9 cm is?<br />
...de gemiddelde lengte van een stijve 13,2 - 16,2 cm is?<br />
...de langste piemel ooit gemeten 33 cm was?<br />
...de kortste piemel ooit gemeten 1,5 cm is?<br />
...een man tijdens zijn leven gemiddeld 7200 keer ejaculeert?<br />
...waarin 2000 keer door masturberen?<br />
...een man in zijn leven gemiddeld 53 liter sperma de wereld inhelpt?<br />
...de gemiddelde snelheid van een ejaculatie 45 km/uur is?
Hoofdstuk 3. Data 29<br />
3.2.3 Realistische test<br />
Voor de realistische test werd random data geselecteerd. Het randomizatieproces was het<br />
volgende:<br />
1. Bepaal de gewenste grootteorde van de sample.<br />
2. Bereken de drempelwaarde als verhouding van de gewenste grootte en de grootte van<br />
de beschikbare data.<br />
3. Genereer voor elk document een random waarde.<br />
4. Voeg de documenten met een bijhorende waarde kleiner dan de drempelwaarde toe<br />
aan de sample.<br />
In een eerste ronde werden 1008 documenten geselecteerd. De tweede ronde was goed voor<br />
948 documenten. Voor de query gebruikt bij deze selectie wordt verwezen naar hoofd-<br />
stuk 4.2 (p. 32). Het resultaat van elke ronde werd manueel doorgenomen en de gevallen<br />
van seksueel misbruik aangeduid. De eerste en tweede ronde waren goed voor respectieve-<br />
lijk 25 en 17 positieve documenten. Dit zorgt voor een misbruikverhouding van 42 op 1956<br />
documenten. Omgerekend betekent dit dat ongeveer 2, 15% van de blogberichten niet door<br />
de beugel kunnen vanwege ongepaste seksuele inhoud.<br />
De samples tonen aan dat de hoeveelheid data rond seksueel misbruik relatief klein is<br />
ten opzichte van alle data. Om de verhoudingen van een realistische dataset beter te<br />
kunnen benaderen bij het trainen is dus in verhouding veel meer negatieve data nodig.<br />
Momenteel zijn dat 579 positieve documenten tegenover 944 negatieve documenten. Deze<br />
aantallen weerspiegelen niet de gewenste verhoudingen. Daarom werden volgens het reeds<br />
eerder gebruikte sampelingmechanisme nog 14880 random documenten geselecteerd die<br />
indien nodig kunnen toegevoegd worden aan de hoeveelheid negatieve data. Deze laatste<br />
14880 documenten werden dus niet manueel overlezen, maar vanuit de steekproeven kan er<br />
besloten worden dat ook hier de hoeveelheid positieve documenten zeer laag was. Wanneer<br />
er dus random documenten toegevoegd worden aan de negatieve data kan er vanuit gegaan<br />
worden dat de negatieve invloed op het trainingsgedeelte van de algoritmes beperkt blijft.<br />
Het getal 14880 is afkomstig van het algoritme waaraan gevraagd werd 15000 documenten<br />
te samplen. Dit aantal extra documenten is voldoende groot om al de testen in deze scriptie<br />
te kunnen uitvoeren.
Hoofdstuk 4<br />
Implementatie<br />
In dit hoofdstuk worden kort enkele bijzonderheden besproken die tijdens de implementatie<br />
van de classifiers en feature selector methodes aan bod kwamen. De gebruikte program-<br />
meertaal was Java en de data werd geleverd in een SQL-dump. Dit hoofdstuk is dan ook<br />
zo ingedeeld.<br />
Voor de evaluatie van de SVM classifier werd de Java implementatie van een bestaande<br />
bibliotheek gebruikt: liblineair (Waldvogel (2011)).<br />
4.1 Java<br />
Gezien het inladen van grote hoeveelheden data, dient er efficiënt te worden omgesprongen<br />
met het beschikbare geheugen. Met name bij uitvoering van de clustering dienen zoveel<br />
mogelijk documenten in het geheugen te worden geladen. Onder de vorm van de door<br />
Netlog geleverde SQL-dump neemt de data 9,89 GB aan ruimte in beslag. De clustering<br />
werd echter beperkt tot de blogdocumenten, nog steeds goed voor 4,70 GB aan data. De<br />
beschikbare toestellen voor de testen beschikten allemaal over 4 GB aan RAM-geheugen,<br />
nog steeds ontoereikend om alle blogdata in het geheugen te laden. Meer data inladen<br />
dan de capaciteit van het RAM-geheugen en het besturingssysteem periodiek delen laten<br />
wegschrijven en ophalen van de harde schijf is geen optie wanneer enige performantie<br />
gewenst is.<br />
Wanneer alle data gefilterd wordt zoals aangegeven in hoofdstuk 2.2.4 (p. 6) daalt de om-<br />
vang van de blogdata naar 2,4 GB. Wanneer de volgorde van de woorden in de documenten<br />
opgeofferd wordt en de woorden vergezeld worden van hun frequentie binnen het document<br />
is dit nog steeds voldoende informatie en daalt de omvang naar 2,1 GB.<br />
30
Hoofdstuk 4. Implementatie 31<br />
Het inladen van 2,1 GB data in de Java virtuele machine (JVM) onder de vorm van Java-<br />
objecten is echter nog steeds niet mogelijk. Er moet ingecalculeerd worden dat ook het<br />
besturingssysteem wat RAM-geheugen voor zich neemt en Java-objecten voor zeer veel<br />
overhead zorgen naar geheugen toe. De data dient dus zoveel mogelijk gereduceerd te<br />
worden tot primitieve types. In Java zijn dit onder meer de types int, boolean, double<br />
en float.<br />
Bij het inladen van de data voor clustering werden daarom de onderstaande structuren<br />
gebruikt.<br />
HashMap words<br />
Hiermee worden woorden gekoppeld aan een integerwaarde als ID. De integerwaarden<br />
beginnen vanaf 0 en worden per 1 geïncrementeerd.<br />
String[] words_inv<br />
Wanneer de documenten dienen te worden uitgeschreven ter controle is een inverse<br />
koppeling noodzakelijk. Het woord-ID telt hier als index in de array.<br />
double[] idf<br />
Elk woord heeft een IDF-waarde. Voor de berekeningen van deze waarde zie hoofd-<br />
stuk 2.3.3 (p. 14).<br />
int[][] documents<br />
In de eerste dimensie staan de verschillende documenten. De tweede dimensie bevat<br />
de ID’s van de woorden per document.<br />
double[][] documents_values<br />
Bij elk woord-ID uit de vorige structuur hoort een genormaliseerde TF*IDF-waarde.<br />
Voor de berekeningen wordt opnieuw verwezen naar hoofdstuk 2.3.3 (p. 14).<br />
int[] documents_length<br />
Deze data hoort bij de eerste dimensie en bevat de lengte van elk document. Dit is<br />
dus de lengte van de rij woord-ID’s uit de variabele documents.<br />
int[] documents_id<br />
De documenten hebben dan wel een numeriek ID, dit getal kan niet gebruikt worden<br />
als index in de datastructuren omdat dit ID niet sequentieel is. Als de ID’s van<br />
de documenten moeten uitgeschreven worden bij het resultaat, dan moeten ze ook<br />
opgeslagen worden.
Hoofdstuk 4. Implementatie 32<br />
int[][] centroids<br />
Deze structuur heeft veel weg van de variabele documents. De inhoud is echter geen<br />
document maar de centroid van de cluster. In de eerste dimensie staan dus het aantal<br />
clusters en in de tweede dimensie staat het aantal woorden in de centroidvector.<br />
double[][] centroids_values<br />
Analoog aan documents_values hoort bij elk woord-ID een genormaliseerde TF*IDF-<br />
waarde.<br />
int[] centroids_length<br />
Analoog aan documents_length, de lengte van elke centroidvector.<br />
int[] clusters<br />
Het uiteindelijke eindresultaat van de clustering. De index legt vast over welk do-<br />
cument het gaat (het document met het ID horende bij documents_id[index]) en<br />
de waarde legt vast bij welke cluster het document hoort. Merk op dat hier geen<br />
variabele centroids_id nodig is, de centroid-ID’s zijn sequentieel.<br />
4.2 MySQL<br />
De meest eenvoudige query’s bij het selectieproces voor een realistische testset uit hoofd-<br />
stuk 3.2.3 (p. 29) zouden de volgende kunnen zijn:<br />
SELECT message AS document<br />
FROM blogs<br />
WHERE id=x<br />
SELECT message AS document<br />
FROM blogs<br />
LIMIT y,1<br />
Bij de linkse query is het probleem echter dat de ID’s bij het genereren van de random<br />
waardes niet gekend zijn. Het rijnummer daarentegen is wel gekend. Het probleem van<br />
de rechtse query is performantie. Wanneer y groot wordt, moeten telkens grote aantal-<br />
len records overgeslagen worden bij elke uitvoering. Daarom werd onderstaande query<br />
gehanteerd:<br />
SELECT message AS document<br />
FROM ( SELECT @row:=@row+1 AS rownum, message<br />
FROM ( SELECT @row:=0 ) r, blogs ) AS ranked<br />
WHERE rownum IN ( SELECT number<br />
FROM sample_numbers );
Hoofdstuk 4. Implementatie 33<br />
Alle geselecteerde rijnummers zijn weggeschreven naar een tabel sample_numbers. Een<br />
teller @row wordt geïncrementeerd terwijl de tabel overlopen wordt. Van zodra een rij-<br />
nummer in de sample_numbers-tabel aanwezig is, wordt het document opgenomen in het<br />
resultaat van de query. Deze laatste opzoeking gaat snel, er zijn immers maar ongeveer<br />
1000 records in de sample_numbers-tabel.
Hoofdstuk 5<br />
Resultaten<br />
Inleiding<br />
In dit hoofdstuk wordt een stapsgewijze verklaring gegeven voor de keuze van de beste<br />
feature selector en de beste text classifier. Daarna wordt bepaald wat de beste featurebe-<br />
werkingen zijn voor de gekozen combinatie van feature selector en text classifier.<br />
Vervolgens worden twee vormen van optimalisatie naar voor gebracht. Van elke optima-<br />
lisatievorm wordt bestudeerd hoe groot de, hopelijk positieve, invloed op de resultaten<br />
is.<br />
Merk op dat in dit hoofdstuk enkel de definitieve keuze naar voor gebracht wordt. Omdat<br />
het niet ondenkbaar is dat een bepaalde combinatie van feature selector en text classifier<br />
zou kunnen verbeterd worden tot resultaten boven diegene die verkregen werden met de<br />
eerst gekozen combinatie, zijn alle mogelijk combinaties uitvoerig getest. De resultaten<br />
van deze tests zijn opgenomen in de bijlagen B.2, B.3 en B.4 (vanaf p. 70).<br />
34
Hoofdstuk 5. Resultaten 35<br />
Beoordelingsparameters<br />
De beoordeling van de uitgewerkte technologieën gebeurt aan de hand van enkele stan-<br />
daardparameters. Deze zijn respectievelijk de precision (P), de recall (R), de F1 measure<br />
(F1), de true positive rate (TPR) en de false positive rate (FPR). Om deze begrippen te ver-<br />
duidelijken, wordt gebruikgemaakt van volgende terminologie, samengevat in onderstaande<br />
tabel:<br />
Beoordeling<br />
Werkelijkheid<br />
true false<br />
true true positive (TP) false positive (FP)<br />
false false negative (FN) true negative (TN)<br />
Tabel 5.1: Een overzicht van de soorten beoordelingen.<br />
False positives en false negatives worden ook wel type I en type II fouten genoemd.<br />
De grootheden voor de beoordelingen worden nu als volgt gedefinieerd:<br />
T P<br />
T P +F P<br />
De fractie van het aantal positief geklasseerde documenten die juist geklasseerd zijn.<br />
precision =<br />
T P<br />
T P +F N<br />
De fractie van het aantal positive documenten die gevonden zijn.<br />
recall =<br />
2×P ×R<br />
P +R<br />
Het gewogen gemiddelde van de precision en de recall.<br />
F1 measure =<br />
true positive rate =<br />
T P<br />
P<br />
= T P<br />
T P +F N<br />
Dit komt overeen met de recall.<br />
false positive rate =<br />
F P<br />
N<br />
= F P<br />
F P +T N<br />
In de tests wordt gestreefd naar een algoritme die een zo goed mogelijke afweging maakt<br />
tussen precision en recall. De F1 measure moet dus maximaal zijn. Er moet opgemerkt<br />
worden dat alle concrete cijfergegevens afkomstig zijn uit eigen tests, geoptimaliseerd waar<br />
mogelijk voor de eigen data.
Hoofdstuk 5. Resultaten 36<br />
Een andere manier om de gebruikte methode te evalueren, is door de resultaten uit te<br />
zetten in een ROC-curve (Receiver Operating Characteristic). ROC-curves zijn afkomstig<br />
uit de signaaldetectietheorie en werden tijdens WO II ontwikkeld voor de analyse van<br />
radarbeelden (Tape (2012)). Voor de constructie van de curve bij een binaire classifier<br />
worden twee operator characteristics, met name de true positive rate en de false positive<br />
rate, uitgezet op beide assen waarbij de beslissingsdrempel van de classifier als variabele<br />
genomen wordt. Ter verduidelijking: elke text classifier zet documenten op basis van<br />
hun inhoud om naar getallen. Bij het trainen wordt aan de hand van deze waarden een<br />
beslissingsdrempel opgesteld. Alle documenten die bij verwerking een waarde opleveren<br />
boven de beslissingsdrempel worden in de ene klasse gestopt en alle documenten met een<br />
waarde onder de beslissingsdrempel komen in de andere klasse terecht. Een ROC-curve<br />
geeft aan wat er gebeurt wanneer de beslissingsdrempel omhoog en omlaag verschoven<br />
wordt. De twee extreme situaties zijn deze waarbij respectievelijk geen en alle documenten<br />
in een bepaalde klasse terecht komen. ROC-curves visualiseren zo de wisselwerking tussen<br />
true positives (TP) en false postives (FP). Op de X-as van de ROC-curve komt de false<br />
positive rate en op de Y-as wordt de true positive rate uitgezet. De diagonaal van de<br />
oorspong naar helemaal rechtsboven (1,1) in de grafiek komt overeen met een random<br />
classifier. Immers, de diagonale lijn betekent dat er voor elke drempelwaarde evenveel<br />
kans is dat een document in een bepaalde klasse terecht komt. Dit komt overeen met de<br />
kansen gegenereerd door een goede random generator, vandaar de term random classifier.<br />
Figuur 5.1: Een eenvoudige ROC-curve met in stippellijn de random classifier.
Hoofdstuk 5. Resultaten 37<br />
Bij de uiteindelijke beoordeling van een classifier wordt gekeken naar het gebied onder de<br />
curve (Area Under the Curve of AUC, voor meer uitleg zie Tape (2012)). Een rudimentaire<br />
indeling voor classifiers aan de hand van hun AUC is als volgt :<br />
90-100% = excellent<br />
80-90% = goed<br />
70-80% = redelijk<br />
60-70% = zwak<br />
50-60% = slecht<br />
Een interessante eigenschap van ROC curves is bovendien dat ze ongevoelig zijn voor onge-<br />
lijke klassenverdeling (Fawcett (2006)). Dit laatste betekent dat er een grote ongelijkheid<br />
is tussen de groottes van de verschillende klassen. In hoofdstuk 3.2.3 (p. 29) rond realis-<br />
tische data hebben we reeds kunnen besluiten dat dit bij ons het geval is. De resultaten<br />
op verdere pagina’s zullen trouwens aantonen dat een ongelijke klassenverdeling een grote<br />
invloed heeft op de kwaliteit van de classifier.<br />
De gegevens nodig voor het genereren van de ROC-curves waren alleen vlot beschikbaar<br />
bij eigen implementaties. Daarom is er geen ROC-data voor de SVM classifier die getest<br />
werd aan de hand van een open source bibliotheek (Waldvogel (2011)).<br />
5.1 Feature selector<br />
Voor het kiezen van een feature selector zijn er drie keuzes. De opties werden hierboven<br />
reeds besproken (zie paginanummers tussen haakjes). Voor het verdere verloop van dit<br />
hoofdstuk zal gebruikgemaakt worden van de afkortingen.<br />
1. Collection frequency (CF, p. 5)<br />
2. Document frequency (DF, p. 4)<br />
3. Mutual information (MI, p. 5)<br />
Figuur 5.2 (p. 38) geeft een overzicht van de F1 measure wanneer MNB (multinomial naive<br />
bayes) gecombineerd wordt met verschillende feature selectors. De cijfergegevens die hier-<br />
voor gebruikt zijn, werden gegenereerd met een evenwichtige trainingsset van 400 positieve
Hoofdstuk 5. Resultaten 38<br />
en 400 negatieve documenten. Ook de testset was evenwichtig, zijnde 100 positieve en<br />
100 negatieve documenten. Evenwichtige training en testen tonen het potentieel van de<br />
gebruikte algoritmes aan.<br />
Het eerste datapunt van elke lijn werd bekomen door de feature selector 100 features te<br />
laten selecteren voor elke klasse, het tweede datapunt van elke lijn wordt bepaald door 200<br />
features, enz. Telkens in stappen van 100 tot het maximum aantal features voor de testset<br />
bereikt werd.<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur 5.2: MNB gecombineerd met drie verschillende feature selectors.<br />
Merk op dat de verschillende feature selectors tot verschillende feature-aantallen komen.<br />
Zo vindt CF en DF elk 10841 features in de trainingsset terwijl MI er slechts 8926 vindt.<br />
Oorzaak is natuurlijk de manier waarop de feature selector features extraheert uit de data.<br />
De grafiek kan daarom ook gemaakt worden met het percentage gebruikte features op de<br />
horizontale as. Met dezelfde dataset als hierboven geeft dit figuur 5.3 (p. 39).<br />
Omdat op dit punt nog geen keuze gemaakt is voor de text classifier, werd elke text classifier<br />
gecombineerd met de drie feature selectors (zie bijlage C.1, p. 74). Hoewel de percentages<br />
van de verschillende combinaties verschillen, vertonen de figuren enkele gelijkenissen.<br />
CF<br />
DF<br />
MI
Hoofdstuk 5. Resultaten 39<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0,0% 10,0% 20,0% 30,0% 40,0% 50,0% 60,0% 70,0% 80,0% 90,0% 100,0%<br />
% gebruikte features<br />
Figuur 5.3: MNB gecombineerd met drie verschillende feature selectors.<br />
Gelijkenissen rond minima en maxima:<br />
CF en DF zijn aan elkaar gewaagd, zowel hun maxima als hun mimima situeren zich<br />
ronde dezelfde feature-aantallen.<br />
MI presteert merkelijk beter dan CF of DF.<br />
Gelijkenissen rond verloop van de grafieken:<br />
CF en DF presteren niet goed wanneer minder dan 10% van de features gebruikt<br />
wordt om de klassen te definiëren.<br />
De resultaten van CF en DF dalen wanneer 50% van de features gebruikt wordt.<br />
MI is de meest stabiele feature selector (minst grillige grafiek).<br />
MI vertoont een lichte stijging naar mate het aantal gebruikte features toeneemt.<br />
De MI is dan ook de feature selector waarmee wordt verder gewerkt.<br />
CF<br />
DF<br />
MI
Hoofdstuk 5. Resultaten 40<br />
5.2 Text classifier<br />
Voor het kiezen van een text classifier zijn er eveneens drie keuzes. Ook hier werden de<br />
opties reeds besproken (zie paginanummers tussen haakjes). Voor het verdere verloop van<br />
dit hoofdstuk zal gebruikgemaakt worden van de afkortingen.<br />
1. Binomial naive Bayes (BNB, p. 12)<br />
2. Multinomial naive Bayes (MNB, p. 10)<br />
3. Support vector machine (SVM, p. 14)<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur 5.4: MI gecombineerd met drie verschillende text classifiers.<br />
Figuur 5.4 laat er weinig twijfel over bestaan dat SVM de beste is van de drie geteste text<br />
classifiers. De combinatie BNB+MI produceert F1 measures ronde de 70%, voor MNB+MI<br />
draait dit rond de 80%. De combinatie SVM+MI scoort nog beter met resultaten die<br />
starten rond de 90% voor weinig features en stijgen tot boven de 97% voor bijna alle<br />
BNB<br />
MNB<br />
features. Deze laatste combinaties is dan ook degene waar verder mee gewerkt wordt.<br />
SVM
Hoofdstuk 5. Resultaten 41<br />
5.3 Featurebewerkingen<br />
Tabel B.3 (p. 68) is, zoals elke tabel rond featurebewerkingen, het resultaat van vier<br />
testreeksen. De betekenis van de rij- en kolomtitels is als volgt:<br />
- = geen enkele featurebewerking wordt toegepast<br />
sw = stopwoordfiltering wordt toegepast<br />
st = stemming wordt toegepast<br />
sw+st = sw en st worden gezamenlijk toegepast<br />
min/max R = de minimale en maximale recall<br />
min/max P = de minimale en maximale precision<br />
min/max F1 = de minimale en maximale F1 measure<br />
min/max AUC = de minimale en maximale area under the curve<br />
Initieel waren ook nog de volgende rijen voorzien:<br />
av = afbreekstreepjes verwijderen<br />
min freq X = de minimaal vereiste frequentie van woorden om opgenomen te worden<br />
in de berekeningen. Zo betekent “min freq 3” dat woorden die minder dan drie keer<br />
voorkomen niet worden meegenomen in de berekeningen wegens te zeldzaam.<br />
Deze twee rijen zijn echter niet meer opgenomen in de tabellen in dit hoofdstuk. Zo was<br />
de invloed van afbreekstreepjes op de F1 measure nooit groter dan enkele tienden van een<br />
procent. Er is daarom geopteerd om het paper van Kraaij & Pohlmann (1994) te volgen<br />
en alle afbreekstreepjes te verwijderen.<br />
Het filteren van zeldzame woorden gebeurde naar aanleiding van het paper van Forman<br />
(2003). Ook het filteren van zeldzame woorden toonde bij de uitgevoerde testen nooit een<br />
betekenisvolle invloed, terug maximaal enkele tienden van een procent. Bij het uitvoeren<br />
van de testen is geopteerd om zeldzame woorden niet te filteren.<br />
Voor enkele cijfergegevens rond deze beslissingen wordt verwezen naar bijlage B.1 (p. 66).
Hoofdstuk 5. Resultaten 42<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur 5.5: De invloed van stopwoorden en stemming voor BNB met MI.<br />
-<br />
sw<br />
st<br />
sw+st<br />
Om de mogelijke effecten van featurebewerkingen te demonstreren wordt even de combina-<br />
tie BNB+MI gebruikt. Hieronder zijn de mogelijke invloeden van stemming en stopwoor-<br />
den op de basisgrafiek zonder featurebewerkingen (-) en de invloed op het classificatieproces<br />
weergegeven.<br />
De invloed van stemming ten opzichte van de basisgrafiek:<br />
Het totaal aantal features wordt met ongeveer 7% verminderd.<br />
De grafiek wordt samengedrukt naar links, maxima worden eerder bereikt.<br />
Het stemmingsproces zorgt voor een merkbare vertraging van het classificatieproces.<br />
De invloed van stopwoordfiltering ten opzichte van de basisgrafiek:<br />
Het totaal aantal features wordt verminderd met de grootte van de stopwoordlijst.<br />
De combinatie van Nederlandse en Engelse stopwoorden die hier gebruikt werd, ver-<br />
mindert het totaal aantal features met ongeveer 1%.
Hoofdstuk 5. Resultaten 43<br />
De volledige grafiek schuift naar boven. In grafiek 5.5 stijgen de resultaten met een<br />
kleine 10%.<br />
Het filteren van stopwoorden zorgt niet voor een merkbare vertraging van het classi-<br />
ficatieproces.<br />
Voor de combinatie SVM+MI zijn de effecten van featurebewerkingen op de resultaten<br />
nauwelijks aanwezig, zie figuur 5.6. Natuurlijk zorgt stemming nog steeds voor een vertra-<br />
ging van het classificatieproces. Voor de verdere bespreking van de combinatie SVM+MI<br />
wordt daarom ook geen enkele featurebewerking toegepast. Alle mogelijke vertragingen die<br />
featurebewerkingen kunnen hebben op het classificatieproces worden daarmee vermeden.<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur 5.6: De invloed van stopwoorden en stemming voor SVM met MI.<br />
-<br />
sw<br />
st<br />
sw+st
Hoofdstuk 5. Resultaten 44<br />
5.4 Optimalisatie<br />
Nu de beste combinatie van text classifier en feature selector vastgelegd is op SVM+MI<br />
is het tijd om te kijken naar de resultaten bij een realistische test. De gegevens van de<br />
realistische dataset staan beschreven in hoofdstuk 3.2.3 (p. 29).<br />
test min P min R min F1 max P max R max F1<br />
evenwichtig 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
realistisch 14,2% 78,0% 24,2% 39,4% 92,7% 55,1%<br />
Tabel 5.2: Resultaten voor verschillende tests bij SVM met MI.<br />
De minimale en maximale recall dalen respectievelijk met 4,0% en 3,3%. Deze dalingen<br />
verdwijnen echter in het niets in vergelijking met de dalingen van 79,6% en 49,6% bij<br />
de minimale en maximale precision. Het gevolg is dat de F1 measure eveneens stevig<br />
omlaag gaat. Wat volgt zijn twee vormen van optimalisatie, elke met de bedoeling om de<br />
resultaten bij de realistische test terug op te krikken. Alle volgende tabellen bevatten dan<br />
ook uitsluitend resultaten op de realistische dataset.<br />
Beïnvloeden van de parameterverhoudingen<br />
Zoals blijkt uit de realistische testset is de klassenverdeling zeer onevenwichtig. Dit one-<br />
venwicht wordt ook wel data skew of “datascheefheid” genoemd (Tang & Liu (2005)). Uit<br />
de realistische dataset kan besloten worden dat de hoeveelheid seksueel ongepast materiaal<br />
slechts enkele procenten bedraag van de totale hoeveelheid data. Als we het misbruik-<br />
percentage uit de realistische dataset afronden, wordt een misbruikpercentage van 2% of<br />
een verhouding van 1/50 bekomen. Het doel van onevenwichtig trainen is nu om diezelfde<br />
verhouding ook door te voeren in de trainingsdata. Het immers logisch dat een realistische<br />
trainingsset beter zal presteren op een realistische testset.<br />
Het onevenwicht in de trainingsdata kan op twee manieren bekomen worden.<br />
1. Onevenwichtig trainen op het aantal documenten.<br />
2. Onevenwichtig trainen op het aantal features.<br />
Beide zijn sterk met elkaar verwant. Het aantal documenten voor een klasse opdrijven,<br />
betekent immers dat het aantal beschikbare features voor die klasse mee omhoog gaat. In<br />
de eerste methode zit dus zeker een deel van het effect van de tweede methode vervat.
Hoofdstuk 5. Resultaten 45<br />
Een onevenwicht in documenten kan op twee manieren bereikt worden. De beschikbare<br />
evenwichtige dataset van 500 positieve en 500 negatieve documenten kan afgebouwd wor-<br />
den naar bijvoorbeeld 100 positieve en 500 negatieve. De 500 moeizaam verkregen positieve<br />
documenten afbouwen is echter geen goed idee. 500 documenten is gezien de grote data-<br />
hoeveelheid reeds miniem en deze dataset verder afbouwen zou zorgen voor een slechtere<br />
definiëring van de positieve klasse.<br />
Het alternatief is om de verzameling negatieve trainingsdocumenten flink uit te breiden.<br />
Maar om ook maar enigszins in de buurt te komen van de verhouding 1/50, gaat het hier<br />
over duizenden nieuwe negatieve documenten die allemaal zouden moeten gecontroleerd<br />
worden. Deze controle zou echter flink wat tijd in beslag nemen. Daarom is geopteerd om<br />
random documenten te samplen en deze zonder controle toe te voegen aan de negatieve<br />
trainingsset. Precies omdat de klassenverhouding zo groot is, mag de controle overgeslagen<br />
worden. Er kan immers met grote waarschijnlijkheid gezegd worden dat 98% van alle<br />
documenten die toegevoegd worden aan de negatieve trainingsset ook effectief negatief<br />
zijn.<br />
Om de verhouding tussen features en documenten te tonen zijn enkele nieuwe kolommen<br />
gedefinieerd in tabel 5.3 (p. 46). Hieronder volgt een verduidelijking van de kolomtitels:<br />
NoF+ = number of features positive, het aantal features in de positieve trainingsset<br />
NoF- = number of features negative, het aantal features in de negatieve trainingsset<br />
NoF ratio = NoF+ / NoF-<br />
TrS+ = training set positive, het aantal documenten in de positieve trainingsset<br />
TrS- = training set negative, het aantal documenten in de negatieve trainingsset<br />
TrS ratio = TrS+ / NoF-<br />
Voor de realistische testset is deze laatste verhouding dus ongeveer gelijk aan 1/50 = 0, 02.<br />
Voor het gemak van de besprekingen zijn de testen genummerd. Deze nummering staat<br />
links van tabel 5.3 (p. 46) en komt terug in figuur 5.7 en 5.8 (p. 47). Merk op dat de<br />
horizontale as van de figuren terug het percentage gebruikte features toont. Test 1 is de<br />
baseline en komt overeen met de tweede rij uit tabel 5.2 (p. 44).
Hoofdstuk 5. Resultaten 46<br />
NoF+ NoF- NoF ratio TrS+ TrS- TrS ratio min P min R min F1 max P max R max F1<br />
1 5633 4660 1,2088 500 500 1,000 14,2% 78,0% 24,2% 39,4% 92,7% 55,1%<br />
Onevenwichtig trainen op documenten Feature-intervallen: [1000-max] (stappen van 1000)<br />
2 4897 8847 0,5535 500 1000 0,500 15,0% 85,4% 25,5% 26,6% 92,7% 41,3%<br />
3 4416 12605 0,3503 500 1500 0,333 22,4% 80,5% 35,2% 34,7% 90,2% 50,0%<br />
4 4157 15364 0,2706 500 2000 0,250 26,4% 82,9% 40,0% 43,5% 90,2% 58,7%<br />
5 3914 18270 0,2142 500 2500 0,200 27,0% 80,5% 40,5% 44,4% 90,2% 59,0%<br />
6 3741 20678 0,1809 500 3000 0,167 28,4% 80,5% 42,0% 49,3% 85,4% 62,5%<br />
7 3593 22704 0,1583 500 3500 0,143 36,3% 78,0% 50,0% 50,7% 85,4% 63,0%<br />
8 3417 24584 0,1390 500 4000 0,125 40,2% 78,0% 53,7% 51,5% 85,4% 63,6%<br />
9 3211 27183 0,1181 500 4500 0,111 33,8% 65,9% 44,6% 53,6% 73,2% 61,9%<br />
Onevenwichtig trainen op features Document-intervallen: [500-2500] (stappen van 100)<br />
10 4000 4000 1,0000 500 500-2500 22,6% 85,4% 36,1% 46,2% 92,7% 60,5%<br />
11 4000 3000 1,3333 500 500-2500 22,8% 80,5% 36,5% 49,3% 92,7% 63,8%<br />
12 4000 2000 2,0000 500 500-2500 22,0% 80,5% 35,4% 50,0% 90,2% 64,3%<br />
13 4000 1000 4,0000 500 500-2500 23,1% 80,5% 36,8% 48,6% 90,2% 62,7%<br />
14 4000 500 8,0000 500 500-2500 22,8% 82,9% 36,2% 64,3% 90,2% 74,2%<br />
15 4000 250 16,0000 500 500-2500 28,7% 80,5% 42,3% 78,3% 90,2% 82,8%<br />
16 4000 200 20,0000 500 500-2500 35,2% 78,0% 48,5% 76,0% 92,7% 83,5%<br />
17 4000 150 26,6667 500 500-2500 29,6% 70,7% 41,7% 84,1% 92,7% 87,1%<br />
18 4000 100 40,0000 500 500-2500 29,9% 75,6% 43,2% 90,5% 92,7% 91,6%<br />
19 4000 50 80,0000 500 500-2500 34,9% 70,7% 46,8% 94,7% 90,2% 91,4%<br />
20 3000 4000 0,7500 500 500-2500 20,3% 80,5% 33,2% 38,2% 92,7% 52,3%<br />
21 2000 4000 0,5000 500 500-2500 17,5% 78,0% 29,2% 31,7% 92,7% 45,5%<br />
22 1000 4000 0,2500 500 500-2500 10,6% 78,0% 18,8% 25,6% 90,2% 39,1%<br />
23 500 4000 0,1250 500 500-2500 7,8% 70,7% 14,2% 18,1% 90,2% 29,8%<br />
Tabel 5.3: Effect van onevenwichtig trainen op SVM+MI.
Hoofdstuk 5. Resultaten 47<br />
F1<br />
F1<br />
1,00<br />
0,90<br />
0,80<br />
0,70<br />
0,60<br />
0,50<br />
0,40<br />
0,30<br />
0,20<br />
0,10<br />
0,00<br />
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%<br />
1,0<br />
0,9<br />
0,8<br />
0,7<br />
0,6<br />
0,5<br />
0,4<br />
0,3<br />
0,2<br />
0,1<br />
% gebruikte features<br />
1 (baseline) 2 3 4 7<br />
Figuur 5.7: Optimalisatie door onevenwichtige trainen op documenten.<br />
0,0<br />
500 1000 1500 2000 2500 3000 3500<br />
Aantal trainingsdocumenten = (TrS+) +( TrS-)<br />
10 (baseline) 14 16 19<br />
Figuur 5.8: Optimalisatie door onevenwichtige trainen op features.
Hoofdstuk 5. Resultaten 48<br />
Naar mate de TrS ratio daalt, stijgen de minimale en maximale F1 measure. Deze stijging<br />
word mooi geïllustreerd door de testen 2, 3, 4 en 7 in figuur 5.7 (p. 47). Bij een TrS ratio<br />
van 0, 125 (test 7) is het effect maximaal. De TrS ratio nog verder verkleinen, zorgt ervoor<br />
dat de resultaten terug dalen. Onderstaande tabel toont de grootste verbeteringen tussen<br />
de baseline (test 1) en test 7.<br />
min F1 △ min F1 max F1 △ max F1<br />
1 24,2% 55,1%<br />
7 53,7% +29,5% 63,6% +8,5%<br />
16 48,5% +24,3%<br />
18 91,6% +36,5%<br />
Tabel 5.4: De grootste verbeteringen met onevenwichtig trainen.<br />
De tweede manier van optimalisatie door onevenwicht focust op de NoF ratio. In de eerste<br />
manier wordt de baseline verbetert door de TrS ratio te verminderen in de richting van de<br />
TrS ratio van de testset en NoF- en NoF+ niet te limiteren. Voor de tweede manier wordt<br />
de NoF ratio vastgelegd en mogen NoF- en NoF+ variëren. Er werd een nieuwe baseline<br />
gecreëerd voor dit soort test. De resultaten van de nieuwe baseline zijn aangeduid als test<br />
10. De NoF ratio werd vastgelegd op 1, 00 en TrS- wordt gevarieerd van 500 tot en met<br />
2500. De TrS ratio varieert daarmee van 1, 0 tot en met 0, 2.<br />
Om de NoF ratio aan te passen, zijn er terug verschillende mogelijkheden. Eén daarvan<br />
is om de NoF+ te beperken. Dit wordt gedemonstreerd in testen 20 tot en met 23. De<br />
resultaten zijn echter niet naar verwachting. Ten opzichte van de nieuwe baseline zijn er<br />
enkel dalende resultaten te noteren naar mate de NoF ratio afneemt.<br />
Een tweede mogelijkheid om de NoF ratio aan te passen, is het beperken van NoF-. Bij deze<br />
manier van onevenwichtig trainen worden de beste resultaten geproduceerd. De maximale<br />
F1 measure stijgt zelfs boven de 90%. Pas wanneer de NoF ratio gelijk wordt aan 8, 00 in<br />
test 14 begint de maximale F1 measure flink te stijgen. In test 16 maakt de minimum F1<br />
measure een sprong omhoog. De F1 measure piekt in test 18, wanneer de NoF ratio 40<br />
bedraagt. De resultaten verbeteren dus wanneer het omgekeerde van de NoF ratio (hier:<br />
(1/40) −1 = 0, 025) de class skew benadert (in te realistische test: 0, 02). In test 19 worden<br />
de negatieve documenten gedefinieerd aan de hand van slechts 50 features. Uitprinten<br />
van deze 50 features (zie bijlage A.3, p. 64) toont dat het om zeer frequente woorden
Hoofdstuk 5. Resultaten 49<br />
gaat, stopwoorden worden immers niet gefilterd. Ondanks het feit dat de negatieve klasse<br />
nauwelijks gedefinieerd is, worden in combinatie met een goed gedefinieerde positieve klasse<br />
verrassend goede resultaten geproduceerd.<br />
Toevoegen van clusteringfeatures<br />
Na onevenwicht trainen is dit de tweede vorm van optimalisatie. Om de eerste optimalisa-<br />
tievorm te kunnen toepassen, dient de klassenverdeling (class skew) gekend te zijn. Omdat<br />
hiervoor de testset gebruikt werd, kan dit gezien worden als een vorm van overtraining.<br />
Informatie uit de testset wordt gebruikt in de trainingsset om betere resultaten te produ-<br />
ceren. Wanneer de testset geen goede representatie is van de volledige dataset, is de kans<br />
groot dat classifier nog steeds zwakke resultaten zal leveren.<br />
De tweede vorm van optimalisatie steunt daarom op clustering om extra informatie te<br />
kunnen toevoegen aan de trainingsdata. In het ideale geval wordt de volledige dataset<br />
geclusterd. Een bewerking die veelal bemoeilijkt wordt door de grote hoeveelheid data en<br />
waarbij men moet afrekenen met de beperkingen van het beschikbare werkgeheugen van<br />
de machine waarop de clustering wordt uitgevoerd. De documenten en de centroidvectoren<br />
zijn de grootste objecten die in het geheugen worden geladen. Voor de test was een machine<br />
met 4GB RAM-geheugen beschikbaar, goed voor een clustering van maximaal 300.000 do-<br />
cumenten in 512 clusters. Om het effect van meer of minder clusters te bestuderen werden<br />
ook testen uitgevoerd met 64, 128 en 256 clusters. De testen worden nu geïdentificeerd met<br />
een ID samengesteld uit het aantal documenten (300.000 = 300k) en het aantal clusters.<br />
Het vergaren van clusterinformatie levert voor elke geclusterd document één extra feature<br />
op, namelijk zijn cluster-ID. Deze cluster-ID’s zijn afkomstig van een bewerking op de<br />
volledige (of toch zo groot mogelijke) dataset en worden niet afgeleid uit enkel de testset.<br />
Overtraining zoals bij de eerste vorm van optimalisatie wordt hier dus vermeden. Merk op<br />
dat de kwaliteit van een clustering fel verbetert wanneer de stopwoorden gefilterd worden.<br />
Die filtering is daarom ook hier toegepast, de baseline is nu gelijk aan SVM+MI met<br />
stopwoordfiltering.
Hoofdstuk 5. Resultaten 50<br />
min P min R min F1 max P max R max F1<br />
baseline 12,6% 73,2% 21,8% 36,9% 92,7% 52,8%<br />
300k64 19,6% 75,6% 31,2% 39,5% 92,7% 53,5%<br />
300k128 9,4% 63,4% 16,4% 21,7% 95,1% 35,2%<br />
300k256 13,3% 78,0% 22,7% 29,0% 95,1% 44,2%<br />
300k512 8,2% 73,2% 14,8% 14,7% 95,1% 25,4%<br />
Tabel 5.5: Effect van clustering op SVM+MI.<br />
Uit tabel 5.5 volgt dat het toevoegen van clusteringfeatures aan het classificatieproces<br />
geen positieve invloed heeft. Figuur 5.9 bevestigt dat hoe groter het aantal clusters is,<br />
hoe slechter de classifier presteert. Enkel met 64 clusters komen de resultaten terug in de<br />
buurt van de baseline. Bovendien kan in het begin van grafiek 300k64 een scherpe daling<br />
waargenomen worden. De hoge startwaarde en de daling van de F1 measure valt in het<br />
gebied waar de gezamenlijke hoeveelheid clusterfeatures groter dan of gelijk is aan het<br />
aantal features per klasse aangebracht door de MI feature selector.<br />
F1<br />
1,00<br />
0,90<br />
0,80<br />
0,70<br />
0,60<br />
0,50<br />
0,40<br />
0,30<br />
0,20<br />
0,10<br />
0,00<br />
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%<br />
% gebruikte features<br />
Figuur 5.9: Optimalisatie door extra clustering features.<br />
baseline<br />
300k64<br />
300k128<br />
300k256<br />
300k512
Hoofdstuk 5. Resultaten 51<br />
Inzoomen op het eerste deel van de grafiek voor test 300k64 (figuur 5.10) toont dat de hoge<br />
precision de oorzaak is van de hoge beginwaarden. De precision start immers op waarde 1,<br />
alle positief geklasseerde documenten zijn dan ook daadwerkelijk positief voor ongepaste<br />
seksueel inhoud. Zolang de clusterfeatures de overhand hebben, blijft de precision hoog.<br />
Er kan dus geargumenteerd worden dat de clustering betere features levert aan de classifier<br />
dan de MI feature selector.<br />
1,0<br />
0,9<br />
0,8<br />
0,7<br />
0,6<br />
0,5<br />
0,4<br />
0,3<br />
0,2<br />
0,1<br />
0,0<br />
0% 2% 4% 6% 8% 10% 12%<br />
% gebruikte features<br />
Figuur 5.10: Inzoomen op het begin van test 300k64 met toevoeging van P en R.<br />
Voor de eerste zes datapunten van elke grafiek uit figuur 5.10 zijn de aantallen MI features<br />
gelijk aan 10, 20, 30, 40, 50 en 60 voor elke klasse. Aan die features worden telkens 29 extra<br />
cluster features toegevoegd. De tweemaal 29 komt voort uit de hier uitgevoerde clustering<br />
waarbij de negatieve en de positieve trainingsdocumenten elk over 29 clusters verspreid<br />
liggen. Dit betekent nog niet dat het hier om 58 verschillende clusters gaat.<br />
Het grote nadeel aan het verwerken van clusteringinformatie in het classificatieproces is de<br />
tijd die de clustering in beslag neemt. Clusteringen van grote hoeveelheden data nemen<br />
flink wat tijd in beslag. De eigen implementatie deed er met een Intel Core i5 (een 2,5GHz<br />
processor) bijna exact 24 uur over om 300.000 documenten te clusteren. Mits gebruik van<br />
een rekencluster en een geschikte multithreaded implementatie kan de benodigde tijd wel-<br />
P<br />
R<br />
F1
Hoofdstuk 5. Resultaten 52<br />
licht flink teruggeschroefd worden. Op die manier zou de classifier bijvoorbeeld periodiek<br />
kunnen geüpdated worden met een nieuwe clustering. De tijd nodig voor het trainen van<br />
de classifier is verwaarloosbaar in vergelijking met de clustertijd. De grootste trainingen<br />
(bijvoorbeeld test 9 uit tabel 5.3 met 5000 documenten, goed voor bijna 30400 features)<br />
gebeuren nog steeds in enkele seconden.<br />
5.5 Clustering extra’s<br />
Afgaande op enkele trefwoorden of de meeste typische documenten van een cluster, komen<br />
verschillende andere thema’s naar voor. Tussen deze thema’s zitten zowel uitingen van<br />
emoties zoals verdriet, frustratie en depressie, als ook opvattingen over recente nieuwsfeiten.<br />
Zeker de vragen naar hulp of berichten die aangeven dat mensen het moeilijk hebben met<br />
verwerken van een bepaalde gebeurtenis zijn nuttig voor de moderatoren van het sociaal<br />
netwerk. Wat volgt zijn enkele voorbeelden van de aangehaalde thema’s en de bijhorende<br />
trefwoorden van de clusters. De informatie werd gehaald uit een clustering van 300.000<br />
documenten in 512 clusters. Een groot aantal clusters betekent immers dat meer thema’s<br />
opgedeeld worden in een eigen cluster en dat het onderwerp duidelijker naar voor komt.<br />
Wat opvalt, is hoe weinig variatie er soms zit tussen de verschillende berichten van één<br />
cluster. De berichten worden dan ook zeer frequent gekopieerd en opnieuw online gezet<br />
door de verschillende gebruikers van het sociaal netwerk.<br />
Uitingen van droefheid en depressie. Vaak gaat het hier om berichten zonder veel<br />
variatie.<br />
Sleutelwoorden: verdriet, wanhoop, meisje<br />
1. Ik zie een meisje met veel verdriet.<br />
Ik wil haar helpen, maar spiegels praten niet.<br />
2. ik zie een meisje met heel veel verdriet ik wil haar helpen<br />
maar ik kan niet tegen spiegels praten :(<br />
Omgaan met een sterfgeval.<br />
Sleutelwoord: afscheid<br />
1. Als ik naar het liedje ‘afscheid nemen bestaat niet’ luister, denk<br />
ik altijd in mijn eigen waarom ik dan al zoveel afscheid heb moeten<br />
nemen
Hoofdstuk 5. Resultaten 53<br />
2. Afscheid nemen van iemand die je dierbaar was , is enorm moeilijk .<br />
Ik kreeg telefoon gisteren ochtend van mijn zus dat mijn opa gestorven<br />
was . De pijn die ik toen voelde wens ik niemand , ik had men opa<br />
al een hele tijd niet meer gezien . Dus heb ook niet echt te goed<br />
afscheid kunnen nemen . Vrijdag moet ik de laatste groet doen en ben<br />
er eigenlijk bang voor omdat ik niet weet hoe zwaar het me zal tillen<br />
dan zaterdag begravenis . dus ik hoop echt dat niemand afscheid moet<br />
niemand zoals ik dat moet doen . Niemand van de familie liet me iets<br />
weten . Dus als jullie iemand moet laten gaan doe dat snel en neem<br />
de tijd om afscheid te nemen want ik heb dat niet kunnen doen !!!!!<br />
3. Ik kon helaas geen afscheid nemen<br />
Ik kan helaas niet bij je zijn<br />
Maar ik denk aan jullie en voel de pijn<br />
Pijn die een leven lang zal duren<br />
Het had ook anders kunnen zijn...<br />
Uitingen van frustraties en boosheid<br />
Sleutelwoorden: gvd, godverdomme<br />
1. Als ik nie in u gezicht ga janken, denkt ge meteen dat ik helemaal<br />
geen pijn heb MAA GVD, GE HEBT ME ECHT WAAR POKKE VEEL PIJN GDAAN!<br />
2. speelt dan gvd nie zo memyn voete ? wtf<br />
3. Shit gast ! hoe moet kik u nu gvd nog kunnen vertrouwen ? xs<br />
4. ik haat u ! ik haat u ! ik haat u , tot de dood.<br />
want gij ‘bitch’ hebt godverdomme myn leven verkloot<br />
5. jongen door u zo hard met onze vriendschap van 1jaar en zoveel fucking<br />
maanden te zien spelen maakt ge me godverdomme echt kapot ! ;(<br />
6. eens je geboren bent en ze beginne met je te pesten gaat dat nooit<br />
meer weg ! kben da gvd zo beu<br />
Scheldtirades.<br />
Sleutelwoorden: hoer, bitch, slet, eikel<br />
1. Noem me een bitch, noem me een slet ;<br />
maar kijk eerst in de spiegel<br />
naar u lelijk zelfportret ;)
Hoofdstuk 5. Resultaten 54<br />
2. Liever Een Seut. Dan Een Slet Lyk Ghy.. c:<br />
3. euhm dikke slet, ’kzou ma kalm doen ze.<br />
4. Noem mij slet, noem mij bitch.<br />
Noem mij wat je wilt, mij boeit het geen moer.<br />
Maar bitch, je weet toch ; jij bent hier de hoer.<br />
5. je hoeft niet in de boom te hangen om een eikel te zijn<br />
Aanhalingen van de actualiteit, vaak in een spottende context.<br />
Sleutelwoorden: pedofiel, kerk (deze sleutelwoorden zijn uiteraard variabel)<br />
1. Ben je pedofiel & zoek je werk?<br />
ga dan soliciteren by de kerk<br />
2. seg manne zijde ne pedofiel zonder werk?<br />
voor mijn part moogde gerust is gaan solliciteren in de kerk.<br />
daar hebben ze er al wel genoeg,<br />
dus ge komt misschien op de wachtlijst te staan,<br />
maar geen nood, ooit moogde wel is naar de gevangenis gaan (:<br />
Vragenlijsten met ongepaste vragen. De vragenlijsten worden frequent gekopieerd<br />
en bevatten al snel 30 vragen of meer. Bepaalde vragen (zie voorbeelden) kunnen<br />
echter niet door de beugel. De voorbeelden zijn hier ingekort en de ongepaste vragen<br />
geselecteerd.<br />
Sleutelwoorden: slaan, kussen<br />
1. [ ] Me tegen een muur duwen en kussen?<br />
[ ] Naar mijn thuis komen en gewoon chillen?<br />
[ ] Me slaan?<br />
[ ] Me slaan als ik het vroeg?<br />
[ ] Me kussen?<br />
[ ] Willen dat ik jou kus?<br />
2. 17. Ben ik lief?<br />
18. Hoe lang ken je me al?<br />
...<br />
33. Hebben we ooit al seks gehad?<br />
34. Zou je Seks met me willen ?
Hoofdstuk 6<br />
Conclusie<br />
Tijdens het onderzoek werden goede resultaten genoteerd voor de classificatie van tekst-<br />
documenten door een gesuperviseerd leeralgoritme. De verschillende componenten, feature<br />
selector en text classifier, werden uitvoerig belicht. Op basis van de resultaten uit eigen<br />
tests werd beslist dat een support vector machine als text classifier gecombineerd met<br />
mutual information als feature selector de combinatie is die de beste cijfers geeft.<br />
Een ongelijke klassenverdeling vormt een probleem voor het efficiënt classificeren van tekst-<br />
documenten. Dit probleem kan het best aangepakt worden door het onevenwichtig in de<br />
data op één of andere manier door te voeren in de trainingsdata van de text classifier. Zo-<br />
wel onevenwichtig trainen op documenten als het onevenwichtig trainen op features levert<br />
significante verbeteringen. In het beste geval wordt een F1 measure van 91,6% bereikt.<br />
Zowel precision als recall liggen daarbij boven de 90%.<br />
Het opnemen van clusteringsfeatures tijdens de classificatie levert slechts in een zeer beperkt<br />
gebied een verbetering. Dit gebied wordt afgebakend door de hoeveelheid gebruikte features<br />
om de klassen te definiëren. De extra informatie die uit de clustering kan gehaald worden, is<br />
evenwel niet miniem en nodigt uit tot verder onderzoek. Met de juiste trainingsdocumenten<br />
moet de classifier in staat zijn om niet enkel seksueel misbruik, maar bijvoorbeeld ook<br />
gevallen van depressie, pestgedrag of spam te detecteren.<br />
55
Hoofdstuk 6. Conclusie 56<br />
De conclusie is dat een lerend systeem zeker kan bijdragen tot de automatisatie van onge-<br />
paste documenten op sociale netwerksites. Een classifier kan zo automatisch documenten<br />
aanbrengen ter revisie voor de moderatoren. Documenten die door de moderator definitief<br />
als positief gemarkeerd worden, kunnen daarna opgenomen worden in de trainingsset van<br />
het leeralgoritme. Een grotere trainingsset zal de classifier zeker ten goede komen. Het<br />
opstellen van een goede trainingsset, representatief voor de volledige dataverzameling, is<br />
immers cruciaal voor de prestatie van de classifier.
Bibliografie<br />
1ste Keuze BV (2012). English stopwords. http://www.ranks.nl/resources/stopwords.<br />
html. Geraadpleegd op 18 augustus 2012.<br />
D. Aloise, A. Deshpande, P. Hansen & P. Popat (2009). Np-hardness of euclidean sum-<br />
of-squares clustering. Mach. Learn., 75(2):245–248. ISSN 0885-6125. URL http://dx.<br />
doi.org/10.1007/s10994-009-5103-0.<br />
L. Barbosa & J. Feng (2010). Robust sentiment detection on twitter from biased and noisy<br />
data. In Proceedings of the 23rd International Conference on Computational Linguistics:<br />
Posters, COLING ’10, pp. 36–44. Association for Computational Linguistics, Strouds-<br />
burg, PA, USA. URL http://dl.acm.org/citation.cfm?id=1944566.1944571.<br />
T. Fawcett (2006). An introduction to roc analysis. Pattern Recogn. Lett., 27(8):861–874.<br />
ISSN 0167-8655. URL http://dx.doi.org/10.1016/j.patrec.2005.10.010.<br />
G. Forman (2003). An extensive empirical study of feature selection metrics for text<br />
classification. J. Mach. Learn. Res., 3:1289–1305. ISSN 1532-4435. URL http://dl.<br />
acm.org/citation.cfm?id=944919.944974.<br />
K. Grabczewski & N. Jankowski (2005). Feature selection with decision tree criterion. In<br />
Proceedings of the Fifth International Conference on Hybrid Intelligent Systems, HIS<br />
’05, pp. 212–217. IEEE Computer Society, Washington, DC, USA. ISBN 0-7695-2457-5.<br />
URL http://dx.doi.org/10.1109/ICHIS.2005.43.<br />
N. Jindal & B. Liu (2008). Opinion spam and analysis. In Proceedings of the internati-<br />
onal conference on Web search and web data mining, WSDM ’08, pp. 219–230. ACM,<br />
New York, NY, USA. ISBN 978-1-59593-927-2. URL http://doi.acm.org/10.1145/<br />
1341531.1341560.<br />
57
Bibliografie 58<br />
R. Kohavi (1996). Scaling up the accuracy of naive-bayes classifiers: a decision-tree hy-<br />
brid. In PROCEEDINGS OF THE SECOND INTERNATIONAL CONFERENCE ON<br />
KNOWLEDGE DISCOVERY AND DATA MINING, pp. 202–207. AAAI Press.<br />
W. Kraaij & R. Pohlmann (1994). Porter’s stemming algorithm for dutch. In Informatie-<br />
wetenschap 1994: Wetenschappelijke bijdragen aan de derde STINFON Conferentie, pp.<br />
167–180.<br />
C. D. Manning, P. Raghavan & H. Schtze (2008). Introduction to Information Retrieval.<br />
Cambridge University Press, New York, NY, USA. ISBN 0521865719, 9780521865715.<br />
Netlog (2012). Over netlog. http://nl.netlog.com/go/about. Geraadpleegd op 28 juli<br />
2012.<br />
B. Pang & L. Lee (2004). A sentimental education: sentiment analysis using subjectivity<br />
summarization based on minimum cuts. In Proceedings of the 42nd Annual Meeting<br />
on Association for Computational Linguistics, ACL ’04. Association for Computatio-<br />
nal Linguistics, Stroudsburg, PA, USA. URL http://dx.doi.org/10.3115/1218955.<br />
1218990.<br />
B. Pang & L. Lee (2008). Opinion mining and sentiment analysis. Found. Trends Inf.<br />
Retr., 2(1-2):1–135. ISSN 1554-0669. URL http://dx.doi.org/10.1561/1500000011.<br />
H. Tang, S. Tan & X. Cheng (2009). A survey on sentiment detection of reviews. Expert<br />
Syst. Appl., 36(7):10760–10773. ISSN 0957-4174. URL http://dx.doi.org/10.1016/<br />
j.eswa.2009.02.063.<br />
L. Tang & H. Liu (2005). Bias analysis in text classification for highly skewed data. In<br />
Proceedings of the Fifth IEEE International Conference on Data Mining, ICDM ’05, pp.<br />
781–784. IEEE Computer Society, Washington, DC, USA. ISBN 0-7695-2278-5. URL<br />
http://dx.doi.org/10.1109/ICDM.2005.34.<br />
T. G. Tape (2012). The area under an roc curve. http://gim.unmc.edu/dxtests/ROC3.<br />
htm. Geraadpleegd op 3 juli 2012.<br />
D. van Holten (2008). Dutch stop words. http://www.damienvanholten.com/blog/<br />
dutch-stop-words/. Geraadpleegd op 18 augustus 2012.<br />
B. Waldvogel (2011). Java version of liblinear. http://www.bwaldvogel.de/<br />
liblinear-java/. Geraadpleegd op 3 juli 2012.
Bibliografie 59<br />
S. Zhu, X. Ji, W. Xu & Y. Gong (2005). Multi-labelled classification using maximum<br />
entropy method. In In Proc. SIGIR, pp. 274–281. ACM Press.
Appendices<br />
60
Bijlage A<br />
Woordenlijsten<br />
A.1 Nederlandse stopwoorden<br />
1. aan<br />
2. af<br />
3. al<br />
4. alles<br />
5. als<br />
6. altijd<br />
7. andere<br />
8. ben<br />
9. bij<br />
10. daar<br />
11. dan<br />
12. dat<br />
13. de<br />
14. der<br />
15. deze<br />
16. die<br />
17. dit<br />
18. doch<br />
19. doen<br />
20. door<br />
21. dus<br />
22. een<br />
23. eens<br />
24. en<br />
25. er<br />
26. ge<br />
27. geen<br />
28. geweest<br />
61<br />
29. haar<br />
30. had<br />
31. heb<br />
32. hebben<br />
33. heeft<br />
34. hem<br />
35. het<br />
36. hier<br />
37. hij<br />
38. hoe<br />
39. hun<br />
40. iemand<br />
41. iets<br />
42. ik<br />
43. in<br />
44. is<br />
45. ja<br />
46. je<br />
47. kan<br />
48. kon<br />
49. kunnen<br />
50. maar<br />
51. me<br />
52. meer<br />
53. men<br />
54. met<br />
55. mij<br />
56. mijn
Bijlage A. Woordenlijsten 62<br />
57. moet<br />
58. na<br />
59. naar<br />
60. niet<br />
61. niets<br />
62. nog<br />
63. nu<br />
64. of<br />
65. om<br />
66. omdat<br />
67. ons<br />
68. ook<br />
69. op<br />
70. over<br />
71. reeds<br />
72. te<br />
73. tegen<br />
74. toch<br />
75. toen<br />
76. tot<br />
77. u<br />
78. uit<br />
79. uw<br />
80. van<br />
A.2 Engelse stopwoorden<br />
1. a<br />
2. about<br />
3. above<br />
4. after<br />
5. again<br />
6. against<br />
7. all<br />
8. am<br />
9. an<br />
10. and<br />
11. any<br />
12. are<br />
13. aren’t<br />
14. as<br />
15. at<br />
16. be<br />
17. because<br />
18. been<br />
81. veel<br />
82. voor<br />
83. want<br />
84. waren<br />
85. was<br />
86. wat<br />
87. we<br />
88. wel<br />
89. werd<br />
90. wezen<br />
91. wie<br />
92. wij<br />
19. before<br />
20. being<br />
21. below<br />
22. between<br />
23. both<br />
24. but<br />
25. by<br />
26. can’t<br />
27. cannot<br />
93. wil<br />
94. worden<br />
95. zal<br />
96. ze<br />
97. zei<br />
98. zelf<br />
99. zich<br />
100. zij<br />
101. zijn<br />
102. zo<br />
103. zonder<br />
104. zou<br />
28. could<br />
29. couldn’t<br />
30. did<br />
31. didn’t<br />
32. do<br />
33. does<br />
34. doesn’t<br />
35. doing<br />
36. don’t
Bijlage A. Woordenlijsten 63<br />
37. down<br />
38. during<br />
39. each<br />
40. few<br />
41. for<br />
42. from<br />
43. further<br />
44. had<br />
45. hadn’t<br />
46. has<br />
47. hasn’t<br />
48. have<br />
49. haven’t<br />
50. having<br />
51. he<br />
52. he’d<br />
53. he’ll<br />
54. he’s<br />
55. her<br />
56. here<br />
57. here’s<br />
58. hers<br />
59. herself<br />
60. him<br />
61. himself<br />
62. his<br />
63. how<br />
64. how’s<br />
65. i<br />
66. i’d<br />
67. i’ll<br />
68. i’m<br />
69. i’ve<br />
70. if<br />
71. in<br />
72. into<br />
73. is<br />
74. isn’t<br />
75. it<br />
76. it’s<br />
77. its<br />
78. itself<br />
79. let’s<br />
80. me<br />
81. more<br />
82. most<br />
83. mustn’t<br />
84. my<br />
85. myself<br />
86. no<br />
87. nor<br />
88. not<br />
89. of<br />
90. off<br />
91. on<br />
92. once<br />
93. only<br />
94. or<br />
95. other<br />
96. ought<br />
97. our<br />
98. ours<br />
99. ourselves<br />
100. out<br />
101. over<br />
102. own<br />
103. same<br />
104. shan’t<br />
105. she<br />
106. she’d<br />
107. she’ll<br />
108. she’s<br />
109. should<br />
110. shouldn’t<br />
111. so<br />
112. some<br />
113. such<br />
114. than<br />
115. that<br />
116. that’s<br />
117. the<br />
118. their<br />
119. theirs<br />
120. them<br />
121. themselves<br />
122. then<br />
123. there<br />
124. there’s<br />
125. these<br />
126. they<br />
127. they’d<br />
128. they’ll
Bijlage A. Woordenlijsten 64<br />
129. they’re<br />
130. they’ve<br />
131. this<br />
132. those<br />
133. through<br />
134. to<br />
135. too<br />
136. under<br />
137. until<br />
138. up<br />
139. very<br />
140. was<br />
141. wasn’t<br />
142. we<br />
143. we’d<br />
144. we’ll<br />
145. we’re<br />
146. we’ve<br />
147. were<br />
148. weren’t<br />
149. what<br />
150. what’s<br />
151. when<br />
152. when’s<br />
A.3 Beperkte featurelijst<br />
1. als<br />
2. ben<br />
3. com<br />
4. doen<br />
5. een<br />
6. eens<br />
7. eerste<br />
8. eigen<br />
9. en<br />
153. where<br />
154. where’s<br />
155. which<br />
156. while<br />
157. who<br />
158. who’s<br />
159. whom<br />
160. why<br />
161. why’s<br />
162. with<br />
163. won’t<br />
164. would<br />
10. gedaan<br />
11. hard<br />
12. heb<br />
13. hebben<br />
14. hebt<br />
15. hoe<br />
16. ik<br />
17. ja<br />
18. je<br />
165. wouldn’t<br />
166. you<br />
167. you’d<br />
168. you’ll<br />
169. you’re<br />
170. you’ve<br />
171. your<br />
172. yours<br />
173. yourself<br />
174. yourselves
Bijlage A. Woordenlijsten 65<br />
19. jij<br />
20. jou<br />
21. kijk<br />
22. laten<br />
23. lekker<br />
24. mag<br />
25. maken<br />
26. man<br />
27. meisje<br />
28. met<br />
29. mij<br />
30. nl<br />
31. of<br />
32. om<br />
33. op<br />
34. open<br />
35. te<br />
36. that<br />
37. the<br />
38. toe<br />
39. toen<br />
40. van<br />
41. voor<br />
42. wanneer<br />
43. weer<br />
44. wil<br />
45. willen<br />
46. word<br />
47. wow<br />
48. wub<br />
49. zijn<br />
50. zou
Bijlage B<br />
Resultaattabellen<br />
B.1 Initiële testen<br />
Het verwijderen van afbreekstreepjes toont geen grote invloed op de resultaten. Hieronder<br />
zijn enkele resultaten weergegeven voor verschillende text classifiers (TC) gecombineerd<br />
met enkele feature selectors (FS).<br />
TC+FS afbr.streepje min F1 min AUC max F1 max AUC<br />
BNB+DF<br />
BNB+MI<br />
MNB+DF<br />
MNB+MI<br />
SVM+DF<br />
SVM+MI<br />
nee 47,5% 46,3% 73,4% 49,3%<br />
ja 47,5% 46,3% 73,2% 49,3%<br />
nee 69,9% 71,0% 83,2% 76,5%<br />
ja 69,9% 69,4% 83,3% 76,3%<br />
nee 56,8% 44,6% 86,1% 48,9%<br />
ja 56,8% 44,7% 85,9% 48,9%<br />
nee 74,0% 44,9% 85,7% 76,2%<br />
ja 73,3% 44,7% 85,0% 76,4%<br />
nee 52,9% 87,3%<br />
ja 53,7% 87,6%<br />
nee 81,0% 99,0%<br />
ja 81,0% 99,0%<br />
Tabel B.1: Weglaten van afbreekstreepjes voor verschillende classifiers.<br />
66
Bijlage B. Resultaattabellen 67<br />
Het filteren van zeldzame woorden wijzigt de resultaten nauwelijks. In de eerste rij worden<br />
geen woorden gefilterd. Voor de tweede rij worden enkel woorden beschouwd die minsten<br />
tweemaal voorkomen, voor de derde rij woorden die mistens driemaal voorkomen, etc.<br />
min freq min P min R min F1 max P max R max F1<br />
1 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
2 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
3 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
4 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
5 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
Tabel B.2: Filteren van zeldzame woorden bij SVM met MI.
Bijlage B. Resultaattabellen 68<br />
B.2 Multinomiaal naieve Bayes<br />
Overzicht van alle testen voor de MNB classifier.<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 65,5% 52,0% 64,6% 43,0% 85,2% 81,0% 79,4% 46,7%<br />
sf 64,5% 46,0% 59,4% 83,9% 80,0% 79,4%<br />
st 61,5% 50,0% 64,1% 91,3% 86,0% 79,8%<br />
sf+st 59,2% 50,0% 63,7% 87,7% 84,0% 80,6%<br />
Realistische tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 2,7% 43,9% 5,0% 4,3% 82,9% 8,2%<br />
sf 2,5% 53,7% 4,7% 4,3% 85,4% 8,2%<br />
st 2,9% 43,9% 5,5% 4,4% 82,9% 8,3%<br />
sf+st 2,3% 43,9% 4,4% 4,3% 82,9% 8,1%<br />
Tabel B.3: Resultaten voor verschillende featurebewerkingen bij MNB met CF.<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 64,5% 43,0% 56,2% 40,0% 89,8% 81,0% 81,0% 44,7%<br />
sf 60,2% 46,0% 60,1% 87,0% 87,0% 80,2%<br />
st 60,2% 46,0% 60,1% 87,0% 87,0% 80,2%<br />
sf+st 59,1% 49,0% 62,0% 88,2% 86,0% 80,8%<br />
Realistische tests<br />
- 2,3% 31,7% 4,4% 4,1% 80,5% 7,8%<br />
sf 2,4% 51,2% 4,5% 4,4% 82,9% 8,3%<br />
st 2,4% 36,6% 4,5% 4,4% 80,5% 8,4%<br />
sf+st 2,2% 46,3% 4,3% 4,4% 82,9% 8,3%<br />
Tabel B.4: Resultaten voor verschillende featurebewerkingen bij MNB met DF.
Bijlage B. Resultaattabellen 69<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 67,6% 76,0% 79,2% 47,9% 82,6% 99,0% 84,0% 63,4%<br />
sf 83,8% 76,0% 80,9% 94,4% 95,0% 89,9%<br />
st 67,1% 78,0% 78,2% 85,2% 98,0% 88,5%<br />
sf+st 79,0% 73,0% 80,7% 94,0% 94,0% 90,0%<br />
Realistische tests<br />
- 2,8% 75,6% 5,5% 3,2% 92,7% 6,1%<br />
sf 2,9% 73,2% 5,6% 4,3% 90,2% 8,1%<br />
st 2,8% 78,0% 5,4% 3,2% 92,7% 6,2%<br />
sf+st 2,7% 78,0% 5,3% 4,1% 92,7% 7,9%<br />
Tabel B.5: Resultaten voor verschillende featurebewerkingen bij MNB met MI.
Bijlage B. Resultaattabellen 70<br />
B.3 Binomiaal naive Bayes<br />
Overzicht van alle testen voor de BNB classifier.<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 48,4% 67,0% 59,8% 43,0% 65,0% 93,0% 71,3% 46,7%<br />
sf 52,0% 54,0% 62,8% 75,0% 95,0% 75,7%<br />
st 49,0% 66,0% 59,0% 68,8% 93,0% 70,5%<br />
sf+st 50,0% 60,0% 63,1% 78,9% 97,0% 74,4%<br />
Realistische tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 1,9% 58,5% 3,8% 2,4% 85,4% 4,7%<br />
sf 2,0% 61,0% 3,9% 2,6% 92,7% 5,0%<br />
st 1,8% 53,7% 3,4% 2,4% 82,9% 4,6%<br />
sf+st 1,9% 61,0% 3,7% 2,5% 87,8% 4,9%<br />
Tabel B.6: Resultaten voor verschillende featurebewerkingen bij BNB met CF.<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 49,4% 63,0% 61,1% 42,8% 63,9% 94,0% 70,7% 47,1%<br />
sf 52,0% 56,0% 64,7% 76,7% 96,0% 74,5%<br />
st 49,0% 66,0% 59,6% 70,8% 93,0% 77,3%<br />
sf+st 51,2% 60,0% 63,4% 73,2% 96,0% 74,8%<br />
Realistische tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 1,6% 51,2% 3,1% 2,5% 87,8% 4,9%<br />
sf 1,8% 56,1% 3,4% 2,5% 92,7% 4,9%<br />
st 1,7% 58,5% 3,3% 2,5% 87,8% 4,8%<br />
sf+st 1,8% 58,5% 3,6% 2,5% 87,8% 4,9%<br />
Tabel B.7: Resultaten voor verschillende featurebewerkingen bij BNB met DF.
Bijlage B. Resultaattabellen 71<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 53,8% 93,0% 69,9% 60,0% 70,5% 100,0% 80,2% 76,2%<br />
sf 62,5% 91,0% 76,9% 85,3% 100,0% 89,7%<br />
st 53,2% 93,0% 69,4% 69,9% 100,0% 79,8%<br />
sf+st 59,9% 90,0% 74,9% 83,9% 100,0% 88,7%<br />
Realistische tests<br />
bewerkingen min P min R min F1 min AUC max P max R max F1 max AUC<br />
- 2,2% 95,1% 4,4% 2,6% 100,0% 5,1%<br />
sf 2,4% 87,8% 4,6% 3,1% 100,0% 5,9%<br />
st 2,2% 97,6% 4,4% 2,6% 100,0% 5,0%<br />
sf+st 2,3% 92,7% 4,5% 2,9% 100,0% 5,6%<br />
Tabel B.8: Resultaten voor verschillende featurebewerkingen bij BNB met MI.
Bijlage B. Resultaattabellen 72<br />
B.4 Support vector machine<br />
Overzicht van alle testen voor de SVM classifier.<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 max P max R max F1<br />
- 85,8% 81,0% 84,5% 93,3% 91,0% 89,6%<br />
sf 89,6% 81,0% 85,3% 95,6% 87,0% 90,5%<br />
st 86,7% 81,0% 85,4% 93,4% 91,0% 90,5%<br />
sf+st 92,4% 80,0% 86,0% 95,4% 90,0% 91,8%<br />
Realistische tests<br />
bewerkingen min P min R min F1 max P max R max F1<br />
- 4,5% 68,3% 8,4% 5,4% 82,9% 10,2%<br />
sf 4,2% 68,3% 8,0% 5,3% 87,8% 10,1%<br />
st 4,4% 70,7% 8,3% 5,3% 82,9% 10,0%<br />
sf+st 4,2% 70,7% 8,0% 5,6% 87,8% 10,4%<br />
Tabel B.9: Resultaten voor verschillende featurebewerkingen bij SVM met CF.<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 max P max R max F1<br />
- 85,7% 81,0% 84,4% 93,5% 88,0% 89,6%<br />
sf 89,4% 79,0% 84,5% 94,4% 87,0% 90,2%<br />
st 86,7% 81,0% 85,3% 93,5% 91,0% 90,3%<br />
sf+st 89,4% 80,0% 86,0% 94,3% 88,0% 90,7%<br />
Realistische tests<br />
bewerkingen min P min R min F1 max P max R max F1<br />
- 4,3% 63,4% 8,1% 5,2% 82,9% 9,7%<br />
sf 4,2% 68,3% 7,9% 6,1% 82,9% 11,4%<br />
st 4,4% 68,3% 8,3% 5,3% 85,4% 9,9%<br />
sf+st 4,2% 68,3% 8,0% 5,4% 85,4% 10,1%<br />
Tabel B.10: Resultaten voor verschillende featurebewerkingen bij SVM met DF.
Bijlage B. Resultaattabellen 73<br />
Evenwichtige tests<br />
bewerkingen min P min R min F1 max P max R max F1<br />
- 93,8% 82,0% 88,6% 99,0% 96,0% 97,5%<br />
sf 94,7% 81,0% 88,0% 99,0% 95,0% 96,9%<br />
st 96,8% 85,0% 90,9% 99,0% 97,0% 98,0%<br />
sf+st 94,8% 84,0% 90,3% 99,0% 95,0% 96,9%<br />
Realistische tests<br />
bewerkingen min P min R min F1 max P max R max F1<br />
- 14,2% 78,0% 24,2% 39,4% 92,7% 55,1%<br />
sf 12,6% 73,2% 21,8% 36,9% 92,7% 52,8%<br />
st 15,5% 85,4% 26,5% 39,6% 92,7% 54,5%<br />
sf+st 15,0% 78,0% 25,1% 31,6% 92,7% 46,8%<br />
Tabel B.11: Resultaten voor verschillende featurebewerkingen bij SVM met MI.
Bijlage C<br />
Figuren<br />
C.1 Feature selectors<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur C.1: BNB gecombineerd met drie verschillende feature selectors.<br />
74<br />
CF<br />
DF<br />
MI
Bijlage C. Figuren 75<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur C.2: MNB gecombineerd met drie verschillende feature selectors.<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
Figuur C.3: SVM gecombineerd met drie verschillende feature selectors.<br />
CF<br />
DF<br />
MI<br />
CF<br />
DF<br />
MI
Bijlage C. Figuren 76<br />
C.2 Featurebewerkingen<br />
F1<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.4: Invloed van featurebewerkingen op BNB met CF.<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.5: Invloed van featurebewerkingen op BNB met DF.
Bijlage C. Figuren 77<br />
F1<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.6: Invloed van featurebewerkingen op BNB met MI.<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.7: Invloed van featurebewerkingen op MNB met CF.
Bijlage C. Figuren 78<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.8: Invloed van featurebewerkingen op MNB met DF.<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.9: Invloed van featurebewerkingen op MNB met MI.
Bijlage C. Figuren 79<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.10: Invloed van featurebewerkingen op SVM met CF.<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.11: Invloed van featurebewerkingen op SVM met DF.
Bijlage C. Figuren 80<br />
F1<br />
1,00<br />
0,95<br />
0,90<br />
0,85<br />
0,80<br />
0,75<br />
0,70<br />
0,65<br />
0,60<br />
0,55<br />
0,50<br />
0 1000 2000 3000 4000 5000 6000<br />
Aantal features<br />
-<br />
sw<br />
st<br />
sw+st<br />
Figuur C.12: Invloed van featurebewerkingen op SVM met MI.
Bijlage D<br />
Afkortingen<br />
AUC − area under the curve<br />
BNB − binomial naive bayes<br />
CF − collection frequency<br />
DF − document frequency<br />
F1 − F1 measure<br />
FN − false negative<br />
FP − false positive<br />
FPR − false positive rate<br />
IDF − inverse document frequency<br />
MI − mutual information<br />
MNB − multinomial naieve bayes<br />
NoF- − number of negative features<br />
NoF+ − number of positive features<br />
P − precision<br />
R − recall<br />
ROC − receiver operator characteristic<br />
sf − stopwoordfiltering<br />
st − stemming<br />
SVM − support vector machine<br />
TF − term frequency<br />
TN − true negative<br />
TP − true positive<br />
TPR − true positive rate<br />
TrS+ − number of positive training documents<br />
TrS- − number of negative training documents<br />
81