03.05.2013 Views

Paper - Hogeschool Gent

Paper - Hogeschool Gent

Paper - Hogeschool Gent

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!