• No results found

Gebeurtenissen detecteren met behulp van hashtags

N/A
N/A
Protected

Academic year: 2021

Share "Gebeurtenissen detecteren met behulp van hashtags"

Copied!
30
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Gebeurtenissen detecteren met

behulp van hashtags

Begeleiding: Gosse Bouma, Rik van Noord Uitvoering: Erik Nijenhuis

Datum: 2018-08-08

(2)

Samenvatting

In deze scriptie presenteren we een methode voor het detecteren van events op Twit-ter op basis van hashtags. We behandelen het filTwit-teren van hashtags en tweets, het sa-menstellen van een dataset, het selecteren van features en het classificeren van events en non-events.

Allereerst hebben we de meest populaire hashtags per dag geselecteerd uit de ruwe Twitter data. Vervolgens zijn alle hashtags die op een dag 100 keer of vaker voorko-men handmatig geannoteerd. We gebruiken de geannoteerde dataset voor het trainen van het machine-learning model. Onze baseline-methode gebaseerd op Naive Bayes in combinatie met token-counts behaalde een score van 86,5% met 10-fold cross-validatie. In de onderstaande tabel zijn de resultaten voor precision, recall en F1-score opgenomen:

Naïve Bayes baseline:

Precision Recall F1-score Event 0.75 0.72 0.73

Non-event 0.94 0.94 0.94 Avg/total 0.90 0.90 0.90

Vervolgens hebben we geëxperimenteerd met een classifier gebaseerd op de Linear Support Vector Classification (SVC). Hieraan hebben we meerdere features toege-voegd om zo een betere score te verkrijgen. Dit gaf uiteindelijk een score van 86,9% met 10-fold cross-validatie. De meest nuttige features zijn onder andere:

- lengte van het document - TF-IDF score

- hashtags - mentions - URL’s

LinearSVC + features:

Precision Recall F1-score Event 0.82 0.56 0.67

Non-event 0.91 0.97 0.94

Avg/total 0.89 0.89 0.89

Ten koste van de recall hebben we de precision voor events met 7% kunnen verbete-ren door het toevoegen van de extra features. Met Naive Bayes model gaf het toevoe-gen van de extra features geen verbetering. Mogelijk heeft ons model ook nog baat bij aanvullende trainingsdata.

De wordcloud op de voorpagina is gegenereerd op basis van de frequentie van event-hashtags in de dataset, waarbij populaire event-hashtags groter zijn weergegeven en minder frequente hashtags kleiner worden weergegeven. Deze hashtags zijn toegepast in tweets die betrekking hebben op een event.

(3)

Woord vooraf

Deze masterscriptie is tot stand gekomen in het kader van de opleiding Informatie-kunde (MA) aan de Rijksuniversiteit Groningen. Mijn dank gaat uit naar de betrokken scriptiebegeleiders, voor hun goede raad & advies, onmisbare feedback en vooral veel geduld gedurende het gehele proces.

Erik Nijenhuis

(4)

Inhoud

1 Inleiding ... 5 2 Gerelateerd onderzoek ... 8 2.1 Event detection ... 8 2.2 Sociale media ... 8 2.3 Nederlandstalige tweets ... 9 3 Methode ... 11 3.1 Onderzoeksopzet ... 11 3.2 Dataset... 11 3.3 Aanpak ... 13 4 Event detection ... 14 4.1 Baseline classifier ... 14

4.2 Support vector classification (SVC) ... 15

5 Discussie en conclusie ... 17 5.1 Discussie ... 17 5.2 Antwoord op de onderzoeksvragen ... 18 5.3 Conclusie ... 19 Literatuurlijst ... 20 Appendix ... 21

A.1 Baseline classifier ... 21

A.2 SVC classifier ... 23

A.3 Annotatie-richtlijnen ... 26

(5)

1

Inleiding

Met behulp van sociale media kunnen gebruikers berichten met elkaar en de rest van de wereld delen. Soms reageert men op een nieuwsbericht, of maakt men zelf onder-deel uit van het nieuws. Hierdoor zijn gebruikers van sociale media en microblogs in het bijzonder als het ware journalisten geworden. Dit heeft grote gevolgen voor de snelheid van de verspreiding van nieuws. Uit voorgaand onderzoek van (Sakaki, Okazaki, & Matsuo, 2010) is bijvoorbeeld gebleken dat aardbevingen op sociale media veel sneller kunnen worden gedetecteerd dan in de traditionele media zoals kranten, radio en tv.

Helaas zijn niet alle berichten op Twitter nieuwswaardig, dit komt doordat tweets veel verschillende onderwerpen en ruis bevatten (Li, Sun, & Datta, 2012). Een groot deel van de berichten op Twitter bestaan uit persoonlijke mededelingen, maar ook spam en reclame. Een bijkomend probleem is dat de berichten erg kort kunnen zijn. In het geval van Twitter gaat het om tekstberichten van maximaal 280 tekens (tot voor kort was dit beperkt tot slechts 140 tekens) met daarbij eventueel een foto, video of link.

Als onderdeel van het bericht kunnen gebruikers hashtags aan hun tweet toevoegen. Een hashtag is een woord of combinatie van meerdere woorden voorafgegaan door een hekje (#). Het heeft als doel om berichten over hetzelfde onderwerp te kunnen groeperen. Meestal worden er één of meerdere hashtags aan het eind van het tekstbe-richt geplaatst, maar in sommige gevallen worden ze ook in de lopende tekst ge-plaatst. We kunnen deze hashtags gebruiken om nieuwswaardige tweets en onder-werpen automatisch te herkennen, we noemen dit ook wel Event Detection.

Voor ons onderzoek zijn we op zoek naar nieuwswaardige gebeurtenissen (events) op Twitter. Het nauwkeurig detecteren van events is nuttig voor diverse toepassingen. Zo kunnen overheden en hulporganisaties het gebruiken om snel te reageren op inci-denten. Nieuwsmedia kunnen het gebruiken om in te spelen op de laatste ontwikke-lingen en bij het ontdekken van nieuws, als input voor de berichtgeving. Daarnaast kan het extra waarde geven om relevante tweets bij artikelen en (nieuws)berichten weer te geven, kranten zoals het Dagblad van het Noorden (DvhN) doen dit al door relevante tweets te embedden bij artikelen op hun website. Op basis van de tekst van het nieuwsbericht zou dit in de toekomst geautomatiseerd plaats kunnen vinden. Ook kunnen bedrijven en organisaties deze informatie aanwenden, zodat ze bijvoorbeeld snel kunnen reageren op een verstoring van een dienst, bij zowel een grote of kleinere storing in de dienstverlening.

Niet alle berichten op sociale media hebben betrekking op events, daarom is het be-langrijk om te definiëren wat we verstaan onder events: Een event is een bebe-langrijke, nieuwswaardige gebeurtenis die plaatsvindt of heeft gevonden binnen een bepaald tijdvak. Het gaat hierbij om realistische gebeurtenissen, met een onderwerp, plaats en tijd. Voorbeelden van events zijn natuurrampen zoals vulkaanuitbarstingen, aardbe-vingen, overstromingen, storm en wervelwinden. Maar ook door mensen veroorzaak-te gebeurveroorzaak-tenissen zoals ongevallen, aanslagen, schietpartijen en branden. Een event hoeft niet altijd negatief of dramatisch te zijn, een optreden, voorstelling of een sport-evenement vallen er ook onder, het is een breed begrip.

(6)

Indien een tweet met één of meerdere hashtags, informatie bevat over een event dan spreken we van een event-hashtag. Gelijkwaardige tweets met dezelfde hashtag(s) gaan waarschijnlijk over hetzelfde onderwerp. Als het bericht geen betrekking heeft op een event, dan betreft het een non-event-hashtag. De hashtags geven extra infor-matie over het soort event, voor het onderzoek willen we deze inforinfor-matie graag be-nutten voor het detecteren van events en non-events.

Voor ons onderzoek maken we gebruik van supervised learning, er is hiervoor speci-fiek gekozen zodat we vooraf de gewenste categorieën: event en non-event kunnen definiëren. Bij unsupervised learning is bij aanvang immers niet duidelijk welke cate-gorieën er zijn. We zijn voornamelijk geïnteresseerd in het zo goed mogelijk onder-scheiden van de event en non-events. Dit heeft als voorwaarde dat er voldoende gela-belde training data beschikbaar dient te zijn. We stellen voor dit doel een nieuwe da-taset samen met daarin handmatig geannoteerde hashtag-tweet combinaties. We ge-bruiken deze dataset, in combinatie met een aantal nog te selecteren features om een nieuw model te trainen. Voor het onderzoek maken we gebruik van binaire classifica-tie, dit houdt in dat er slechts twee categorieën zijn, events en non-events. Als aller-laatste stap voeren we het getrainde model uit op de test-set.

De hiervoor besproken zaken hebben geleid tot de volgende onderzoeksvraag:

Hoe kunnen we, met behulp van hashtags, nieuwswaardige gebeurtenissen detecteren?

Om de onderzoeksvraag te kunnen beantwoorden is deze opgesplitst in een aantal deelproblemen, deze zijn:

- Hoe kan een geschikte dataset worden samengesteld? - Welke machine learning algoritmes zijn geschikt?

- Hoe kan een model worden getraind en getest ten behoeve van classificatie? - Welke verschillende features kunnen worden toegepast? Denk aan:

o woord frequenties o TF-IDF

o tijd/plaats

o gebruikersnamen.

We concentreren ons voor het onderzoek op de microblogdienst Twitter. Op het mo-ment van schrijven heeft Twitter ongeveer 2,6 miljoen Nederlandse gebruikers, waar-van iets minder dan 1 miljoen dagelijkse gebruikers (onderzoek Newcom, 2017). Het aantal actieve gebruikers neemt wel steeds verder af. We kijken naar Nederlandstalige berichten op Twitter. Bij het detecteren van events maakt het niet uit of deze wel of niet in Nederland plaatsvinden, het detecteren van events is niet beperkt tot het bin-nenland. We zullen ons voornamelijk richten op de tekst van de Tweet, wel kan het nuttig zijn om overige informatie zoals metadata behorende bij de tweet aan te wen-den. Het is bij aanvang van het onderzoek niet duidelijk hoeveel procent van alle Ne-derlandse tweets informatie over events bevatten, mogelijk is dit slechts een beperkt percentage.

In het verleden is er al veel onderzoek gedaan naar het detecteren van gebeurtenissen op Twitter, relatief nieuw is dat we dit op basis van hashtags willen uitvoeren. In het volgende hoofdstuk behandelen we gerelateerde onderzoeken. Hoofdstuk drie gaat in op ons eigen onderzoek en de gekozen aanpak (methode). In hoofdstuk vier behande-len we het selecteren van features en het bouwen van een classifier op basis van

(7)

Py-resultaten van het onderzoek te presenteren. Tot slot geven we in het laatste hoofd-stuk antwoord op de centrale onderzoeksvraag en de deelproblemen.

(8)

2

Gerelateerd onderzoek

Het concept event detection in combinatie met traditionele media bestaat al langer, maar het toepassen ervan op sociale media is pas van de laatste jaren. Dit brengt wel een aantal aanvullende problemen met zich mee. Zo merken onder andere (Weng, Yao, Leonardi, & Lee, 2011) (Li, Sun, & Datta, 2012) (Van Canneyt, et al., 2014) op dat berichten op sociale media dikwijls erg kort zijn en daarnaast veel ruis en verschillen-de onverschillen-derwerpen bevatten. Voor verschillen-deze en anverschillen-dere problematiek zullen we een geschikte oplossing moeten te vinden.

2.1

Event detection

Aanvankelijk werd event detection uitgevoerd op formele teksten, met name acade-mische papers en nieuwsartikelen. Deze documenten zijn goed geschreven, met een goede structuur en hebben een duidelijk onderwerp. In tegenstelling tot Twitter waar 40% van alle tweets nutteloze informatie bevatten (Weng, Yao, Leonardi, & Lee, 2011). Volgens (Van Canneyt, et al., 2014) zijn er grofweg twee verschillende aanpakken: do-cument-pivot en feature-pivot. Waarbij er in het eerste geval wordt gekeken naar de overeenkomsten tussen de verschillende documenten. Deze documenten worden ver-volgens geclusterd op onderwerp. Bij de feature-pivot aanpak gebruikt men statisti-sche methodes, zoals TF-IDF om zo bursty n-grammen binnen een bepaald tijdvak te vinden. Dit zijn termen die ten opzichte van de voorgaande periode plotseling toene-men (Van Canneyt, et al., 2014).

2.2

Sociale media

Event detection op Twitter verschilt in dat van formele teksten op diverse vlakken, zo zijn berichten vaak kort en ongestructureerd. In het onderzoek van (Ritter, Etzioni, Clark, & others, 2012) proberen de onderzoekers automatisch een kalender met events en de bijbehorende tijd en datum te vullen. Ze doen dit doormiddel van part-of-speech tagging in combinatie met het herkennen van named entities (NER) op basis van vooraf getrainde modellen. Deze methode is overigens semi-supervised. Het werk van (Becker, Naaman, & Gravano, 2011) lijkt nog het meest op dat van ons, gezien het feit dat ze event en non-events op Twitter van elkaar willen scheiden en dat ook doen middels supervised learning. Ze maken hierbij echter geen gebruik van hashtags als speciale features. Het heeft ook een aantal overeenkomsten met het werk van

(Sankaranarayanan, Samet, Teitler, Lieberman, & Sperling, 2009) waarbij clusters van hashtags met hetzelfde onderwerp worden geproduceerd. In het paper van (Van Canneyt, et al., 2014) hebben de onderzoekers ervoor gekozen om allereerst vast te stellen of een Twitter gebruiker een auteur is van nieuwswaardige berichten. Dat wil zeggen, of het een twitter account van een krant, nieuwswebsite of TV-programma is. Dit doen ze door handmatig 10.000 Twitter gebruikers te annoteren om zo de kans te berekenen of een gebruiker al dan niet een uitgever van nieuws is. Het doel is om zo spam en ongewenste tweets bij de bron te kunnen filteren, tweets van gebruikers die geen uitgever zijn worden zodoende buiten beschouwing gelaten.

(9)

Hashtags

Als onderdeel van een bericht op Twitter kunnen gebruikers hashtags toepassen in hun tweet. (Feng, et al., 2015) geeft een definitie van hashtags als een manier om be-richten van een specifiek onderwerp te groeperen. Het voordeel van hashtags is dat ze weinig ruis bevatten en dat alleen breed gedragen hashtags populair worden. Verder stellen ze dat hashtags, aan de hand van de bijbehorende tweets vertegenwoordigd kunnen worden als (lange) documenten. Hoewel hashtags vaak wel als feature wor-den gebruikt is er nog niet uitgebreid onderzoek gedaan naar het effect van hashtags voor het toepassen van event detection. Het onderzoek van (Yang & Rayz, 2018) kijkt wél specifiek naar hashtags voor het unsupervised clusteren van events. Hierbij pro-beren ze om hashtags die bij hetzelfde event horen bij elkaar te clusteren middels K-means. Dit wijkt af van ons eigen onderzoek, wij willen immers vaststellen of hashtags wel of geen event beschrijven.

2.3

Nederlandstalige tweets

Voor het Nederlands zijn er ook een aantal relevante papers gevonden. Zo maken (Kunneman & van den Bosch, 2014) gebruik van een term-pivot clustering methode om tweets over hetzelfde onderwerp te groeperen in meerdere classes (multinomial classification). De Cohen’s Kappa voor de handmatig geannoteerde dataset was 0.25, met een standaarddeviatie van 0.11. De precisie voor de test-set betrof ongeveer 80%. In het vervolgonderzoek door (Kunneman & van den Bosch, 2016) gaan ze verder, maar nu willen ze ook toekomstige events kunnen voorspellen. Dit lijkt veel op het onderzoek van (Ritter, Etzioni, Clark, & others, 2012) en borduurt hier met een paar aanpassingen ook verder op voort. Het onderzoek van (Galinkin & ten Thij, 2016) zoekt naar nieuwsberichten op Twitter. Het maakt hierbij gebruik van vector support model (VSM) op basis van de TF-IDF scores van elke tweet. Als trainingsdata gebrui-ken ze tweets van de NOS en Nu.nl daarbij scrapen ze ook het bijbehorende nieuws-bericht via de URL. De precisciescore bedroeg 91% voor nieuws-berichten met een URL en 58% zonder URL. Bij het onderzoek van (van Noord, Kunneman, & van den Bosch, 2016) maken de auteurs gebruik van een Naive Bayes classifier voor het classificeren van events. In plaats van binaire classificatie, zijn er tien verschillende soorten events gedefinieerd, te weten: Sport, politiek, broadcast, publiek evenement, software, spe-ciale dag, sospe-ciale actie, celebrity news, advertenties en overige events. Het doel is om tweets in te delen in de correcte categorie. Hierbij zijn diverse features gebruikt zoals, tweet count, bag of words, sentiment, event date en score. Dit heeft geresulteerd in een precision, recall and F1-score van respectievelijk 0.67, 0.67 en 0.65.

De bovenstaande voorbeelden geven ons een goed beeld wat een vergelijkbaar sys-teem voor het Nederlands zou kunnen presteren, zodat we onze methode aan de hand hiervan enigszins kunnen vergelijken. Kanttekening hierbij is dat wij geen multinomi-al classification, maar binaire classificatie doen op basis van supervised learning. Hierdoor zijn de scores misschien niet een op een met elkaar te vergelijken.

Datasets

Twitter-datasets zijn niet triviaal, het verzamelen van tweets is wel mogelijk maar het opnieuw distribueren van de data is niet toegestaan. Wat je in de praktijk ziet is dat de data op individuele basis gedownload dient te worden via de Twitter API, op basis van de Tweet IDs. Dit brengt moeilijkheden met zich mee, soms zijn berichten verwij-derd of bestaat de gebruikersaccount niet meer. In dat geval mist er dus informatie en

(10)

vallen er gaten in de dataset. Voor ons onderzoek willen we graag kijken naar Neder-landstalige tweets op Twitter, een dergelijke dataset hiervoor was niet beschikbaar. Zodoende is deze zelf samengesteld, meer hierover in hoofdstuk vijf.

Voor hun dataset hebben (Kunneman & van den Bosch, 2016) en (van Noord, Kunneman, & van den Bosch, 2016) gebruikgemaakt van TwiNL dit is de opvolger van twiqs.nl door (Sang & van den Bosch, 2013) In het geval van TwiNL bevat de ver-zameling ongeveer 40% van het totale aantal Nederlandstalige tweets, dit is door toe-doen van de beperkingen in de Twitter API. Ook bij gebruik van TwiNL moet men de data zelf downloaden op basis van het Tweet ID. In het geval van (Galinkin & ten Thij, 2016) is de data afkomstig van RTreporter.

(11)

3

Methode

Voor ons onderzoek willen we gebeurtenissen op Twitter kunnen detecteren. Om dit doel te bereiken dienen we events en non-events van elkaar te kunnen onderscheiden op basis van binaire classificatie. In dit hoofdstuk gaan we dieper in op de toegepaste methode en de gebruikte dataset.

3.1

Onderzoeksopzet

Allereerst dienen we vast te stellen wat het begrip ‘event’ inhoudt. Een event is een geplande of ongeplande gebeurtenis met een bepaalde impact op een groot deel van de bevolking. Events kunnen gaan over optredens, concerten, (sport)wedstrijden, uit-zendingen, gebeurtenissen (natuur), enzovoorts. Belangrijk hierbij is dat een event nieuwswaardig dient te zijn. Gezien we de twee gewenste categorieën reeds vooraf weten, maken we voor het onderzoek gebruik van supervised learning. Omdat het een classificatie probleem betreft, is het noodzakelijk om gelabelde training-data te verkrijgen. Aangezien er geen kant en klare geannoteerde dataset voorhanden is, heb-ben we zelf een training-set samengesteld. Het verkrijgen van geannoteerde data is erg arbeidsintensief en in ons geval ook onderhevig aan subjectiviteit. De definitie van een event is namelijk vrij te interpreteren. Om ervoor te zorgen dat het annoteren ob-jectief verloopt, zijn er annotatierichtlijnen opgesteld (zie bijlage B). Om de kwaliteit van de labels te waarborgen controleren we de data middels de inter-annotator agreement score op basis van Cohen's kappa. Voor de data maken we gebruik van een binair label; wel of geen event.

Machine learning

Met behulp van de training-set trainen we vervolgens een classifier op basis van de vooraf geselecteerde features. Naast de features heeft ook de keuze voor een type clas-sifier invloed op de resultaten. Hiertoe zijn er verschillende clasclas-sifiers met elkaar ver-gelijken om zo de beste selecteren voor ons beoogde doel. Door middel van empirisch onderzoek is gebleken dat zowel Naive Bayes (NB) als Linear Support Vector Classifi-cation (SVC) goed presteren voor onze documenten.

3.2

Dataset

Allereerst dienen we een dataset te selecteren of samen te stellen, om praktische rede-nen is besloten om het Nederlandstalige Twitter corpus van de RUG hiervoor te ge-bruiken. Dit is een verzameling van tweets uit België en Nederland en omvat een groot deel van het totale aantal Nederlandstalige tweets op Twitter. Vervolgens moe-ten we de tweets filteren, verwerken en features selecteren. We houden hierbij een tijdvak van 24 uur aan waarin tweets/berichten over een event zich moeten bevinden. Voor elke dag, bestaande uit 24 uren hebben we de frequenties van alle hashtags bij-gehouden. Vervolgens hebben we per dag alle hashtags met een frequentie >100 gese-lecteerd. Voor elke unieke hashtag is per dag een document aangemaakt met daarin alle tweets die bij de hashtag horen. Dit resulteerde in een grote verzameling van unieke documenten, ieder document representeert een hashtag. Alle tweets in het do-cument geven als het ware een omschrijving weer van de hashtag in kwestie. Op dit

(12)

moment weten we nog niet of een hashtag-document wel of geen betrekking heeft op een event. Hiervoor moeten we ieder document eerst handmatig labelen.

3.2.1 Annotatie

We waarborgen de kwaliteit van de labels door een deel van de documenten door een tweede annotator te nogmaals te laten labelen. Het is gezien de omvang niet realis-tisch om dit voor alle documenten te doen, daarom maken we een selectie. Om dit zo eerlijk mogelijk te laten verlopen hebben we tien dagen genomen, per dag zijn er tien willekeurig geselecteerde hashtags en voor iedere hashtag zijn er tien bijbehorende tweets. In totaal zijn dit 100 documenten en 1.000 tweets. Hierbij moet worden opge-merkt dat de verdeling van 30/70 niet opgaat, dat gaat namelijk over de gehele data-set. Terwijl dit slechts een subset van de data betreft, op sommige dagen komen meer events voor dan op andere dagen.

Vervolgens hebben we de labels met elkaar vergeleken om zo de inter-annotator agreement score (Cohen’s kappa) te berekenen. Deze methode houdt ook rekening met het feit dat er op basis van kans voor een label is gekozen. In ons geval is er over-eenstemming in 92 van de 100 gevallen, op basis hiervan is de Cohens kappa bere-kend, deze bedraagt 0.65.

(Viera, Garrett, & others, 2005)

Op basis van deze interpretatie kunnen we vaststellen dat de door ons behaalde inter-annotator agreement score van 0.65 behoort tot de groep ‘substantiële overeenstem-ming’. In slechts acht gevallen waren de twee annotatoren het oneens:

Datum Hashtag Annotator A Annotator B

20170104 mendesarmy 0 1 20170105 ado 0 1 20170107 facup 1 0 20170109 iphone 0 1 20170109 scheerenveen 0 1 20170111 schaatsen 1 0 20170111 vtmfamilie 0 1 20170112 pgb 1 0

(13)

3.2.2 Pre-processing

We nemen alle tweets (tekst) bij de hashtag en slaan deze per dag en hashtag op als een document. Ieder document geeft een weergave of samenvatting weer van een hashtag en is uniek voor die dag. Hierdoor kan het voorkomen dat er voor dezelfde hashtag meerdere documenten zijn (met andere inhoud). Op deze manier verkrijgen we een corpus met gelabelde documenten met twee categorieën, events en non-events .

3.3

Aanpak

Voor de representatie van de data maken we gebruik van een bag-of-words model. De tweet tekst is hierbij genormaliseerd en getokeniseerd. Ieder document beschrijft een hashtag, met alle tweets die deze hashtag hebben toegepast. Aan de hand van de meest informatieve features, zijn proefondervindelijk aanvullende features geselec-teerd.

We hebben ons model getraind op basis van de geannoteerde training-set. We hebben getest met zowel een Naive Bayes (NB) als een op Linear Support Vector Classificati-on (SVC) gebaseerde classifier in combinatie met verschillende features.

We voerden experimenten uit op de dataset uit om een simpele baseline vast te stellen en om tot een goede keuze voor een classifier te komen. We maken gebruik van de Scikit-learn bibliotheek in Python. Om overfitting te voorkomen hebben we onder an-dere gebruikgemaakt van 10-fold cross-validation. In het volgende hoofdstuk gaan we in op de uitgevoerde experimenten en nemen we alvast een voorproefje op de resulta-ten.

(14)

4

Event detection

In dit hoofdstuk bespreken we het samenstellen van de training-data, het vaststellen van een baseline, het trainen van de classifiers en het selecteren van de features.

4.1

Baseline classifier

Ons volgende doel is om een baseline vast te stellen, zodat we een richtlijn hebben voor de door ons te ontwikkelen classifier. De meest eenvoudige baseline is om tel-kens de klasse te kiezen die de meerderheid heeft, in ons geval de non-events. We zouden dan een score krijgen van ongeveer 70%. Deze baseline zou alle non-events correct classificeren, maar met als gevolg alle events als non-events bestempelen. Dit is niet wat we willen, we zijn immers vooral geïnteresseerd in de events en niet zozeer in de non-events.

We maken hiervoor een nieuwe classifier met behulp van Python en de Scikit-learn bibliotheek voor machine learning. We gebruiken hiervoor Naïve Bayes (NB) met bi-naire classificatie. Onze documenten beschouwen we als bag-of-words. Als enige fea-ture gebruiken we token counts, hiervoor gebruiken me Scikit-learn’s CountVectori-zer. Deze functie regelt het tokenizeren en het tellen van de tokens in de tekst, er wordt geen gebruik gemaakt van stopwoorden. Vervolgens trainen we een model op basis van een training-set en evalueren het met een test-set.

Om te beginnen hebben we een simpele baseline op basis van een Count Vectorizer met de standaard tokenizer, voor de classifier gebruiken we Naive Bayes. De resulta-ten staan in de onderstaande tabel. Voor de baseline behaalden we een 10-fold cross-validation score van 0.865.

Naïve Bayes baseline:

Precision Recall F1-score Event 0.75 0.72 0.73

Non-event 0.94 0.94 0.94

Avg/total 0.90 0.90 0.90

Belangrijke tokens voor events:

De, rt, https, rtl7darts, co, van, een, het, is, en, op, in, voor, wkdarts, met, wat, dat, ik, je, gerwen.

Belangrijke tokens voor non-events:

https, co, de, rt, in, op, een, van, en, voor, nieuws, het, is, nieuwstwitter, met, je, bij, 2017, jaar, ik.

Hierbij dient opgemerkt te moeten worden dat er geen Nederlandstalige stop-woordenlijst is toegepast, mogelijk is dit wel wenselijk zodat algemeen veelgebruikte woorden buiten beschouwing kunnen worden gelaten. De gedachte is dat deze woor-den niet specifiek iets zeggen over een event of non-event en dat ze in beide tweets even veel worden gebruikt.

(15)

Indien we de standaard tokenizer vervangen door een gespecialiseerde Tweet-tokenizer levert dit een verbetering op voor de recall van de categorie events, de pre-cision gaat echter wel naar beneden. Voor de non-events is er weinig verschil, echter wij zijn voornamelijk geïnteresseerd in de groep events. Met deze aangepaste baseline behaalden we een 10-fold cross-validation score van 0.857.

Naïve Bayes baseline:

Precision Recall F1-score Event 0.75 0.72 0.73

Non-event 0.94 0.94 0.94

Avg/total 0.90 0.90 0.90

Belangrijke tokens voor events:

. : ! de rt van #rtl7darts , het een … en is op in voor ? #wkdarts met wat

Belangrijke tokens voor non-events:

: . de in rt op ! een … van en , voor #nieuws het #nieuwstwitter ? is - '

We merken op dat we nu ook leestekens en hashtags terug kunnen vinden in het lijst-je. Tot zover onze baseline, voor onze nieuwe classifier we willen graag een hogere score behalen dan de 75% voor de precisie van events, het liefst met een zo hoog mo-gelijke recall. In de volgende paragraven gaan we hiervoor op zoek naar een geschikte classifier en nieuwe aanvullende features.

4.2

Support vector classification (SVC)

Voor ons experiment hebben we getest met een andere classifier, op basis van Support Vector Classification (SVC).

SVC unbalanced:

Precision Recall F1-score Event 1.00 0.04 0.08

Non-event 0.82 1.00 0.90

Avg/total 0.85 0.82 0.75

Op het eerste gezicht lijkt de precisie erg hoog, maar bij nader inzien blijkt de recall voor events zeer laag. Mogelijk komt dit omdat er veel meer data is voor non-events dan events. De dataset is dus uit balans, dit kunnen we compenseren door de parame-ter class_weight='balanced’ mee te geven. Zie de onderstaande tabel voor het effect.

SVC balanced:

Precision Recall F1-score Event 0.50 0.36 0.42

Non-event 0.86 0.92 0.89

Avg/total 0.79 0.81 0.80

(16)

Voor onze volgende experimenten maken we gebruik van de Linear Support Vector Classification (SVC) in Scikit-learn. Deze classifier gebaseerd op LinearSVC is speciaal geschikt voor binaire classificatie door het toepassen van de one-vs-the-rest methode.

LinearSVC:

Precision Recall F1-score Event 0.65 0.44 0.52

Non-event 0.88 0.94 0.91

Avg/total 0.84 0.85 0.84

De voorgaande experimenten zijn gebaseerd op de baseline, alleen de gebruikte classi-fier wijkt af. Er zijn nog geen extra features aan toegevoegd. We zijn vervolgens op zoek gegaan naar features die ons kunnen helpen de scores te verbeteren. Dit is daan op basis van het stapelen van diverse features. Als we een feature hadden ge-vonden en getest en die verbeterde de score dan voegden we de feature toe. Als de score niet toenam of zelfs afnam lieten we de feature weg. Uiteindelijk hebben we de volgende features geselecteerd:

- lengte van het document - TF-IDF score

- hashtags - mentions - URL’s

- plaatsnamen.

Tijdens het annoteren viel het ons op dat indien er een plaatsnaam werd gebruikt als hashtag, dat het dan dikwijls om een non-event ging. Wij hebben hiermee getest door plaatsnamen te herkennen en te vervangen, maar dit leverde geen verbetering op. Zelfs als wij alle plaatsnamen verwijderen uit de tweets maakte het niet veel uit voor de scores. Vervolgens hebben wij de classifier getraind in combinatie met deze featu-res, dit gaf een 10-fold cross-validation score van 0.869.

LinearSVC + features:

Precision Recall F1-score Event 0.82 0.56 0.67

Non-event 0.91 0.97 0.94

Avg/total 0.89 0.89 0.89

Belangrijke tokens voor events:

Gerwen van rt mention de finale eerste was oppassen heemstraat nachtclub michael wedstrijd wat niveau plegen pas het giroud.

Belangrijke tokens voor non-events:

url co onze voor stemmen bd ze je weemoedt seizoen heeft galavoorstelling januari neiuwe vuurwerk pos zaterdag terug rouw zie.

Hierbij moet worden opgemerkt dat de TweetTokenizer niet is toegepast. Tevens is de recall voor events helaas minder hoog dan we graag willen zien, de precision is wel veel hoger dan de baseline van 75% voor events. Tot slot hebben we de classifier ook nog even vervangen door Naive Bayes, want die werkte immers al zeer goed voor de baseline. Na het toevoegen van alle features ging de score met Naive Bayes niet

(17)

om-5

Discussie en conclusie

In dit hoofdstuk bespreken we de resultaten van het onderzoek, we geven antwoord op de centrale onderzoeksvraag en deelvragen en tot slot trekken we een algehele conclusie. In dit hoofdstuk bespreken we de resultaten en uitkomst van het onder-zoek, tevens geven we antwoord op de centrale onderzoeksvraag.

5.1

Discussie

Door hun aard en om technische redenen zijn Tweets doorgaans erg kort, tot voor kort kunnen berichten op Twitter maximaal 140 tekens lang zijn. Onlangs is deze harde li-miet opgeschoven naar 280 tekens, maar niet iedereen maakt gebruik van deze moge-lijkheid. Het merendeel van de tweets zijn nog steeds erg kort. Door het combineren van meerdere Tweets met dezelfde hashtag binnen een periode van 24 uur verkrijgen we een groter document met meer informatie over hetzelfde onderwerp. In het docu-ment staan daarnaast ook andere hashtags die ook te maken hebben met hetzelfde onderwerp. Indien we een langere periode nemen, bijvoorbeeld een paar dagen dan lopen we de kans dat er meer vervuiling optreedt. We lopen dan namelijk de kans dat het gaat om een nieuw of ander event.

De door ons opgestelde baseline op basis van Naive Bayes in combinatie met een vec-tor count werkt al zeer goed, door het toepassen van een Tweet tokenizer was het mo-gelijk om de precisie voor events nog wat te verhogen. Vervolgens hebben we geëxpe-rimenteerd met een lineaire SVC, we hebben hieraan extra features toegevoegd. Bij het annoteren viel het ons op dat tweets met plaatsnamen meestal geen event betroffen. En omdat plaatnamen uniek zijn, lijkt het ons een goed idee om deze te generaliseren, door ze te vervangen door het generieke PLAATSNAAM, zodat de classifier ze hopelijk beter kan herkennen. Dit had echter maar een zeer gering effect op de resultaten. Om erachter te komen waarom dit zo is hebben we bij wijze van test alle plaatsnamen verwijderd. Hieruit bleek dat het wel of niet opnemen van plaatsnamen geen noe-menswaardig effect had op de resultaten, het voegt weinig informatie toe voor het classificeren van events.

Bij het opvragen van de meest informatieve vectorizer features bleek de top-20 vooral te bestaan uit hashtags. In ons geval is dit ongewenst, we willen immers niet dat de classifier alleen de hashtags gaat leren (hoewel de titel van deze scriptie dat misschien wel impliceert). Daarom hebben we alle hashtags vervangen door de placeholder HASHTAG. We hebben dezelfde techniek ook toegepast voor URL’s en mentions dit zijn de gebruikersnamen. Verder leverde het toepassen van TF-IDF ook nog een grote ver-betering op.

Opgemerkt dient te worden dat het model is getraind met een trainingset uit een be-perkte periode. Voor een completer resultaat zou er bijvoorbeeld getraind kunnen worden met een heel jaar (of langer) aan data. Deze grotere dataset was tijdens het onderzoek niet voorhanden.

(18)

5.2

Antwoord op de onderzoeksvragen

Aan het begin van het onderzoek hebben we een centrale onderzoeksvraag en bijbe-horende deelvragen opgesteld: Hoe kunnen we, met behulp van hashtags, nieuwswaardige

gebeurtenissen detecteren?

Met de volgende deelvragen:

D1 Hoe kan een geschikte dataset worden samengesteld?

D2 Welke machine learning algoritmes zijn geschikt?

D3 Hoe kan een model worden getraind en getest ten behoeve van classificatie?

D4 Welke verschillende features kunnen worden toegepast?

D1

Aangezien er geen dataset voorhanden was hebben we zelf een dataset samengesteld bestaande uit tweets . We hebben daarbij de hashtags gebruikt om documenten aan te maken met tweets over hetzelfde onderwerp. Vervolgens zijn de documenten hand-matig gelabeld als event of non-event. Tot slot is de kwaliteit van de labels is vastge-steld door de inter-annotator agreement score (Cohen’s kappa) te berekenen.

D2

Tijdens de experimenten hebben wij door empirisch onderzoek geconstateerd dat zo-wel Naive Bayes als Linear Support Vector Classification (SVC) goed presteren met tekstdata. Voorgaande onderzoeken bevestigen dit (zie hoofdstuk 2, gerelateerd on-derzoek).

D3

Voor onze onderzoek hebben we gebruik gemaakt van Python in combinatie met de Scikit-learn machine learning bibliotheek. Hiermee is het mogelijk om modellen te trainen en testen. Ook hebben we gebruik gemaakt van verschillende rapportagefunc-tionaliteiten zoals de confusion-matrix en diverse metrics zoals recall en precisie. Maar bijvoorbeeld ook van de mogelijkheid om 10-fold cross-validation uit te voeren.

D4

Bij het experimenteren hebben wij getest met verschillende features. Zo bleek dat plaatsnamen maar weinig extra informatie geven over een event of non-event. Wat wel goed werkt zijn hashtags, URLS,mentions (gebruikersnamen), de lengte van een document en de TF-IDF scores van tokens in het document.

Hiermee kunnen we nu de centrale onderzoeksvraag beantwoorden. Door gebruik te maken van machine learning technieken is het gelukt om geautomatiseerd events te detecteren op basis van supervised learning.

(19)

5.3

Conclusie

In het algemeen kunnen hieruit concluderen dat we met succes events én non-events kunnen detecteren in verzamelingen van tweets. Door meerdere tweets met dezelfde hashtag te combineren hebben we grotere documenten verkregen, waardoor we meer informatie hebben voor de classifier. Daarnaast vereenvoudigd het annotatieproces, men hoeft immers niet iedere tweet meer apart te labelen. Hoewel het model goed werkt, is er ruimte voor verbetering. Naast tekstfeatures zouden we ook andere meta-data kunnen opnemen. Zoals we dat hebben gedaan met de feature voor de lengte van het document. Ook is het mogelijk om URLS te resolven en deze data ook toe te voegen aan het hashtag-document. Verder zou het nuttig kunnen zijn om named entity re-cognition toe te passen op alle documenten.

Tot slot kunnen we stellen dat onze basline-methode achteraf gezien wel erg goed werkt, hoewel erg simpel behaalde het al goede resultaten op basis van counts, zonder speciale features. Misschien was de majority class een betere baseline geweest, hoewel dat zou betekenen dat de recall voor events in dat geval 0% zou zijn. Terwijl wij juist zijn geïnteresseerd in de events en minder in de non-events.

(20)

Literatuurlijst

Voor het schrijven van deze scriptie is gebruikt gemaakt van de onderstaande bron-nen:

1. Becker, H., Naaman, M., & Gravano, L. (2011). Beyond Trending Topics: Real-World Event Identification on Twitter. Icwsm, pp. 438-441.

2. Cui, A., Zhang, M., Liu, Y., Ma, S., & Zhang, K. (2012). Discover breaking events with popular hashtags in twitter. pp. 1794-1798.

3. Feng, W., Zhang, C., Zhang, W., Han, J., Wang, J., Aggarwal, C., & Huang, J. (2015). STREAMCUBE: hierarchical spatio-temporal hashtag clustering for event exploration over the twitter stream. 1561-1572.

4. Galinkin, N., & ten Thij, M. (2016). Identifying News Articles in Dutch Tweet. 5. Kunneman, F., & van den Bosch, A. (2016). Open-domain extraction of future

events from Twitter. Natural Language Engineering, 22(5), pp. 655-686.

6. Kunneman, F., & van den Bosch, A. (2014). Event detection in Twitter: A machine-learning approach based on term pivoting.

7. Kunneman, F., & van den Bosch, A. (2015). Automatically identifying periodic social events from Twitter. In Proceedings of the International Conference Recent

Advances in Natural Language Processing, pp. 320-328.

8. Lee, K., Palsetia, D., Narayanan, R., Patwary, M. M., Agrawal, A., & Choudhary, A. (2011). Twitter trending topic classification. 251-258.

9. Li, C., Sun, A., & Datta, A. (2012). Twevent: segment-based event detection from tweets. 155-164.

10. Petrović, S., Osborne, M., & Lavrenko, V. (2010). Streaming first story detection with application to twitter. pp. 181-189.

11. Ritter, A., Etzioni, O., Clark, S., & others. (2012). Open domain event extraction from twitter. 1104-1112.

12. Sakaki, T., Okazaki, M., & Matsuo, Y. (2010). Earthquake shakes Twitter users: real-time event detection by social sensors. 851-860.

13. Sang, E., & van den Bosch, A. (2013). Dealing with big data: The case of Twitter.

Computational Linguistics in the Netherlands Journal, 121-134.

14. Sankaranarayanan, J., Samet, H., Teitler, B. E., Lieberman, M. D., & Sperling, J. (2009). Twitterstand: news in tweets. pp. 42-51.

15. Van Canneyt, S., Feys, M., Schockaert, S., Demeester, T., Develder, C., & Dhoedt, B. (2014). Detecting newsworthy topics in twitter. 1-8.

16. van Noord, R., Kunneman, F., & van den Bosch, A. (2016). Predicting civil unrest by categorizing Dutch Twitter events. Benelux Conference on Artificial Intelligence, pp. 3-16.

17. Weng, J., Yao, Y., Leonardi, E., & Lee, B. (2011). Event detection in twitter. pp. 1-21.

18. Yang, S.-F., & Rayz, J. (2018). An event detection approach based on Twitter hashtags.

19. Zubiaga, A., Spina, D., Martinez, R., & Fresno, V. (2015). Real-time classification of twitter trends. 66(3), 462-473.

(21)

Appendix

In deze bijlagen zijn de volgende onderwerpen te vinden:

baseline classifier

SVC classifier

annotatierichtlijnen & tweets.

A.1 Baseline classifier

Script voor het classificeren van hashtags (documenten).

#!/usr/bin/env python3 #

# event_detection.py

# A method for classifing hashtags, uses labeled data in order to generate a model.

# Simple baseline using word counts and Naive Bayes classifier. #

# Erik Nijenhuis (august 2018)

#import json, glob

from sklearn.datasets import load_files

from sklearn.model_selection import train_test_split

from sklearn.feature_extraction.text import CountVectorizer from sklearn.pipeline import Pipeline

from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix

#from sklearn.cross_validation import cross_val_score #depre-cated! def main(): print("Loading dataset...") # Load dataset tweets = load_files('data') categories = tweets.target_names print("{} categories".format(len(categories))) print("{}".format(categories)) print("{} documents".format(len(tweets.filenames))) print()

# Training and Test Data

X_train, X_test, y_train, y_test =

train_test_split(tweets.data, tweets.target, test_size=0.33, random_state=42)

# Build Pipeline

vec = CountVectorizer()

#tfidf = TfidfTransformer() #not used right now. clf = MultinomialNB()

hashtag_clf = Pipeline([('vec', vec), ('clf', clf)])

(22)

# Train model

hashtag_clf.fit(X_train, y_train)

print("Training score: {0:.1f}%".format( hashtag_clf.score(X_train, y_train) * 100))

# Evaluate the hashtag classifier on the test-set y_pred = hashtag_clf.score(X_test, y_test)

print("Testing score: {0:.1f}%".format(y_pred * 100))

if __name__ == '__main__': main()

(23)

A.2 SVC classifier

#!/usr/bin/env python3 #

# event_detection.py

# A method for classifing hashtag documents, uses labeled data in order to generate a model. Using a SVC classifier and addi-tional features.

#

# Erik Nijenhuis (August 2018)

import re

import numpy as np import json

from nltk import TweetTokenizer

from sklearn.datasets import load_files #from sklearn import preprocessing

from sklearn.model_selection import train_test_split

from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer

from sklearn.metrics import accuracy_score

from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix

from sklearn.preprocessing import FunctionTransformer from sklearn.pipeline import FeatureUnion, Pipeline from sklearn.model_selection import cross_val_score

from sklearn.svm import LinearSVC

from sklearn.naive_bayes import MultinomialNB

def genericize_mentions(text):

return re.sub(r'@[\w_-]+', 'MENTION', text)

def remove_hashtags(text): text = text.decode('utf-8')

return re.sub(r'#[\w_-]+', 'HASHTAG', text)

def remove_urls(text):

return re.sub(r'http[\w_-]+', 'URL', text)

def pipelinize(function, active=True):

def list_comprehend_a_function(list_or_series, ac-tive=True):

if active:

return [function(i) for i in list_or_series] else: # if it's not active, just pass it right back return list_or_series

return FunctionTransformer(list_comprehend_a_function, val-idate=False, kw_args={'active':active})

def doc_len(text): return len(text)

def reshape_a_feature_column(series):

(24)

def pipelinize_feature(function, active=True):

def list_comprehend_a_function(list_or_series, ac-tive=True):

if active:

processed = [function(i) for i in list_or_series] processed = reshape_a_feature_column(processed) return processed else: return re-shape_a_feature_column(np.zeros(len(list_or_series))) def show_most_informative_features(vectorizer, clf, n=500): feature_names = vectorizer.get_feature_names()

coefs_with_fns = sorted(zip(clf.coef_[0], feature_names)) top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1]) for (coef_1, fn_1), (coef_2, fn_2) in top:

print("\t%.4f\t%-15s\t\t%.4f\t%-15s" % (coef_1, fn_1, coef_2, fn_2))

def important_features(vectorizer,classifier,n=500): class_labels = classifier.classes_

feature_names =vectorizer.get_feature_names()

topn_class1 = sorted(zip(classifier.feature_count_[0], fea-ture_names),reverse=True)[:n]

topn_class2 = sorted(zip(classifier.feature_count_[1], fea-ture_names),reverse=True)[:n]

print("Important tokens for Events") for coef, feat in topn_class1:

print(class_labels[0], coef, feat)

print("---") print("Important tokens for Non-events")

for coef, feat in topn_class2:

print(class_labels[1], coef, feat)

def main(): print("Loading dataset...") # Load dataset tweets = load_files('data') categories = tweets.target_names print("{} categories".format(len(categories))) print("{}".format(categories)) print("{} documents".format(len(tweets.filenames))) # Train/test split X, y = tweets.data, tweets.target

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

# Tokenizers

tokenizer = TweetTokenizer(preserve_case=False, re-duce_len=True)

(25)

#count_vec = CountVectorizer(tokenizer=tokenize, min_df=1) count_vec = CountVectorizer(tokenizer=tokenizer.tokenize) # Classifiers #clf = MultinomialNB() #Baseline clf = LinearSVC(random_state=0)

#clf = SGDClassifier(loss='hinge', penalty='l2', alpha=1e-3, random_state=42, max_iter=5, tol=None)

#clf = SGDClassifier() # Features tfidf = TfidfTransformer() rem_hashtags = pipelinize(remove_hashtags) rem_urls = pipelinize(remove_urls) gen_mentions = pipelinize(genericize_mentions) doc_length = pipelinize_feature(doc_len) #gen_places = pipelinize(genericize_places)

# Build the Event Detection pipeline. eventdetect_pipeline = Pipeline([ ('remove_hashtags', rem_hashtags), ('remove_urls', rem_urls), ('genericize_mentions', gen_mentions), #('genericize_places', gen_places), ('features', FeatureUnion([ ('vectorizer', count_vec), ('document_length', doc_length) ])), ('tfidf', tfidf), ('classifier', clf) ])

# Train, test & evaluate

#eventdetect_pipeline.fit(X_train, y_train)

#y_pred = eventdetect_pipeline.score(X_test, y_test) #y_pred_class = eventdetect_pipeline.predict(X_test)

# Perform 10-fold cross-validation

scores = cross_val_score(eventdetect_pipeline, tweets.data, tweets.target, cv=10)

print("Scores for 10-fold cross-validation:") print(scores) print(scores.mean()) #print("classification report:") #print(classification_report(y_test, y_pred_class)) #print("confusion matrix:") #print(confusion_matrix(y_test, y_pred_class)) #print() #show_most_informative_features(count_vec, clf, n=500) #important_features(count_vec, clf,n=500) if __name__ == '__main__': main()

(26)

A.3 Annotatie-richtlijnen

Om de dataset objectief te labelen zijn er een aantal richtlijnen opgesteld, deze dienen als handvat bij het annoteren. U krijgt een hashtag te zien met daarbij een tiental tweets die gebruikmaken van de desbetreffende hashtag. Voor dit onderzoek zijn we geïnteresseerd in event en non-events. Het is aan u om de hashtag te voorzien van het juiste label (1 of 0).

Allereerst is het van belang om vast te stellen wat een event is in deze context:

Een event is een geplande of ongeplande gebeurtenis met een bepaalde impact op een groot deel van de bevolking. Events kunnen gaan over optredens, concerten,

(sport)wedstrijden, uitzendingen, gebeurtenissen (natuur), enzovoorts. Belangrijk hierbij is dat een event nieuwswaardig dient te zijn.

Ga als volgt te werk:

1. Lees de hashtag en de bijbehorende tweets

2. Stel het onderwerp en de context vast. U mag hierbij gebruikmaken van de gehele tekst

3. Stel vast of het merendeel, ten minste 5/10 tweets gaan over hetzelfde onderwerp. Indien de hashtag te algemeen is, dan betreft het geen event.

4. Stel de tijd, plaats/regio en impact vast 5. Ga na of het event nieuwswaardig is

6. Label de hashtag, event of non-event (1 of 0) 7. Herhaal.

Het is van belang alert te zijn op algemene hashtags zoals: #weekend, #vakantie, #vrijdag, dit zijn meestal geen events.

Enkele voorbeelden:

Event

Vanavond de halve finales darts: 1e partij wright - anderson, daarna rond 22.30 uur barney - van gerwen #rtl7darts #darts #wkdarts

Non-event

Software engineer bij centric (randstad) itmediair haarlem #haarlem #ict #vacature De complete dvd-box van penoza nu gratis #weekend #aanbieding!

(27)

A.4 Annotatie-tweets

#mendesarmy

1. rt @falltomusica: onze #mendesarmy #bestfanarmy #iheartawards 2. onze #mendesarmy #mendesarmy #iheartawards

3. rt @littlemendes14: @chaozinhob onze #mendesarmy #bestfanarmy #iheartawards 4. onze #mendesarmy #iheartradio #bestfanarmy

5. rt @ourcanadianboys: onze #mendesarmy #iheartawards #bestfanarmy 6. rt @falltomusica: onze #mendesarmy #bestfanarmy #iheartawards 7. onze #mendesarmy #iheartawards #bestfanarmy

8. onze #mendesarmy #bestfanarmy #iheartawards

9. @chaozinhob @amandamaggxo onze #mendesarmy #bestfanarmy #iheartawards 10. onze #iheartawards #mendesarmy #bestfanarmy

#ado

1. rt @volkskrant: eigenaar wang moet van rechter ruim 2,4 miljoen aan #ado beta-len. toch wordt het lastig om hem daartoe te dwingen…

2. hoezo moet #wang aan #ado terugbetalen? heeft hij ooit iets ontvangen wat hij moet terugbetalen? neen! hij moet 'gewoon' betalen. @bnr

3. united vansen veroordeeld tot betaling aan voetbalclub #ado #denhaag https://t.co/cbxwi4qtvj de voorzieningenrechter heeft vandaag bepaald… 4. uitspraak: rechter geeft #ado gelijk https://t.co/40fzuqvgmr

5. 'wang moet #ado 2,5 miljoen euro betalen'. united vansen probeert ze nu een an-dere #wang toe te keren.

6. rt @watishettoch: #ado kan een wangbevel voor de 2.5 mio euro naar #china stu-ren...#voetbal

7. ook setkus geveld door buikgriep https://t.co/it3lsjxa61 #ado den haag #nieuws 8. rt @mennotamming: #ado heeft nog een pressiemiddel: als wang niet betaalt dan

kunnen de aandelen van uvs, die in beheer zijn, geveild worde…

9. #praatmee rechter stelt ado den haag in gelijk: wang moet ruim 2 miljoen betalen https://t.co/dutevh4uho #ado

10. ado beraadt zich op vervolgstappen https://t.co/t8cjclayz2 #ado #denhaag #ado-den-haag

#facup

1. ook derby county verslaat een premier league-club. uit bij west bromwich albion wint de ploeg van steve mcclaren knap met 1-2! #facup

2. @francisco7966 de #toto weer niks zelfs het team van @ronaldkoeman laat me in de steek hij zal de #facup toch wel serieus nemen?

3. een snelle 1-0 achterstand voor reading tegen manchester united. wayne rooney opent de score. #facup https://t.co/rywy5trlgu

4. rt @voetbalinside: no steward, no party! 😅 [vandaag bij stoke vs wolves] #facup #voetbalinside https://t.co/yikdisimrr

5. gelukkig bestaan er sprookjes in het voetbal kijk maar naar de #facup

6. stam wil niet in de spotlights staan bij zijn terugkeer op old trafford. #munrea #facup #reading https://t.co/buytitkcuv

7. jaap & josé op old trafford... #stam #mourinho #mnurea #facup https://t.co/vavcij7bha

8. rt @foxsportsnl: ai! zeer pijnlijke blunder van reading-keeper ali al-habsi tegen man-chester united 👀 #munrea #facup https://t.co/ty7qfgewgf

(28)

9. rt @voetbalinside: no steward, no party! 😅 [vandaag bij stoke vs wolves] #facup #voetbalinside https://t.co/yikdisimrr

10. geen beelden gezien maar het reading van japie had niet veel in te brengen op old trafford...#mufc #facup

#iphone

1. tim cook op verjaardag iphone: 'het beste moet nog komen' #apple #iphone https://t.co/wwnlyfw2vu

2. de #iphone bestaat vandaag precies tien jaar. one more thing! de koers van apple sinds die dag: +863%… https://t.co/fqjqh8yb4x

3. rt @waaromweetikdit: het is vandaag 10 jaar geleden dat de eerste #iphone door steve jobs werd gepresenteerd.

4. vandaag 10 jaar geleden werd de #iphone geïntroduceerd die de wereld van de smartphones totaal wist te veranderden. https://t.co/gbji2f2yrj

5. rt @waaromweetikdit: het is vandaag 10 jaar geleden dat de eerste #iphone door steve jobs werd gepresenteerd.

6. 10 jaar iphone: bekijk de onthulling door steve jobs en lees tim cooks… https://t.co/ifkdzqid67 #apple #iphone

7. rt @waaromweetikdit: het is vandaag 10 jaar geleden dat de eerste #iphone door steve jobs werd gepresenteerd.

8. ik heb de opdracht bloemenstad in airport city volbracht! https://t.co/hs6ecbtey0 #iphone #gameinsight

9. het masker past perfect bij dit snapchat filter ha ha. #bath #relax #iphone #snap-chat #bathbomb… https://t.co/enyjvudtjx

10. rt @ilonajut: tim cook op verjaardag iphone: 'het beste moet nog komen' #apple #iphone https://t.co/wwnlyfw2vu

#scheerenveen

1. rt @feanonline: 'sc heerenveen-target ødegaard stapt op vliegtuig en is op weg naar nederland' https://t.co/nvrn2fsdnv #scheerenveen https:…

2. rt @feanonline: 'sc heerenveen zal ødegaard dinsdagochtend presenteren' (up-date) https://t.co/ownqd3guk2 #scheerenveen https://t.co/iekocbz…

3. rt @feanonline: 'sc heerenveen zal ødegaard dinsdagochtend presenteren' (up-date) https://t.co/ownqd3guk2 #scheerenveen https://t.co/iekocbz…

4. pec zwolle beaamt 'serieuze optie', ook kandidaat in heerenveen https://t.co/knjsssra3t #scheerenveen #heerenveen

5. grootse update in soap rondom ödegaard en zijn eredivisie-transfer #schee-renveen https://t.co/loox9ew17h https://t.co/foyjbubcfz

6. rt @feanonline: 'sc heerenveen zal ødegaard dinsdagochtend presenteren' (up-date) https://t.co/ownqd3guk2 #scheerenveen https://t.co/iekocbz…

7. #praatmee transfer ødegaard nog niet van de baan: ''kijken altijd naar buiten-kansjes'' https://t.co/nbwbr5schg #scheerenveen

8. 'heerenveen en real zijn het eens over deze huurconstructie' https://t.co/knjsssra3t #scheerenveen #heerenveen

9. rt @feanonline: 'sc heerenveen zal ødegaard dinsdagochtend presenteren' (up-date ii) https://t.co/keafs2gmib #scheerenveen https://t.co/x9ac…

10. #transferstunt!! #scheerenveen#odegaard #trots https://t.co/qc7a2swrxe

#schaatsen

(29)

2. rt @sportinnl: nationale titel voor ter mors en verbij op 1.000 meter https://t.co/bcnzwlxxtr #nkafstanden #schaatsen

3. rt @sportinnl: kai verbij aan de leiding op ek sprint in heerenveen https://t.co/xvphgh2bcy #verbij #schaatsen #eksprint

4. erbanova loopt uit op ter mors en leenstra #schaatsen https://t.co/1db9sex9t7 5. rt @erbenwennemars: zonder publiek valt er niks te vieren. #schaatsen #ad

#co-lum-nerben https://t.co/hjmukcwbon

6. rt @sportinnl: kramer pakt zijn negende nationale titel op 5 kilometer https://t.co/tlzecga3nj #kramer #schaatsen #nkafstanden

7. rt @sportinnl: voorlopig nog geen schaatsen op natuurijs volgens weerman marc e.putto https://t.co/44et7ia6sr #schaatsen #natuurijs #elfste…

8. kramer: lekker dat ik die macht weer heb #schaatsen https://t.co/4myvzewqyp 9. 'chaotisch schaatsweekend was uiteindelijk ook heel leuk' #schaatsen

https://t.co/vrke4scr4f

10. rt @weerarend: het gaat er van komen!!! lees het https://t.co/2ljyu4ed74 #natuurijs #schaatsen #vorst https://t.co/ubmnqaxtgu

#vtmfamilie

1. rt @iesastra: ik toen cedric vero op de grond duwde.😂 #kleinbeet-jeoverdreven #vtmfamilie https://t.co/zsk5hg2wvt

2. rt @bomma_familie: euh is bartje nu kwaad op faroud ivm overspel? ah ja, greet is dood, dus dan telt dat nie meer. #vtmfamilie

3. kaviaar bij de aperitief? een dj?? véro weet niet wat ze zal horen als ze het te horen krijgt 😂 #vtmfamilie

4. cederic is precies weer de onbeleefde tiener geworden. #vtmfamilie

5. rt @iesastra: ik toen cedric vero op de grond duwde.😂 #kleinbeet-jeoverdreven #vtmfamilie https://t.co/zsk5hg2wvt

6. de vraag is, of het huwelijk wel gaat doorgaan... #vtmfamilie

7. rt @morgane_dw: ik hoop nog altijd dat mieke en niko terug samen gaan komen !!! #vtmfamilie

8. zo content is die kleine toch ook niet om mieke te zien.. 😜 #vtmfamilie 9. ziek van de pizza's. 😛 ik wist dat da ging gebeuren. #vtmfamilie

10. dat advies van zjef, hij weet duidelijk hoe je met kleine kinderen moet omgaan 😂👏🏻 #vtmfamilie

#pgb

1. rt @vogelvrijeharts: centrale raad van beroep oordeelt: gemeente mag #mantelzorg niet afdwingen #pgb https://t.co/avrhz0003m https://t.co/p…

2. rt @gemeentenu: #pgb door #gemeente ten onrechte beëindigd bij weigering #mantelzorg, gemeente mag geen onbetaalde hulp eisen https://t.co/… 3. rt @marijetweetjes: 'gemeente mag mantelzorg niet afdwingen'...

https://t.co/gd5josp5cs #mantelzorg #wmo #pgb #pgbalarm

4. rt @wiepau: het klinkt zo logisch, wat een fantastisch resultaat @a_stekelenburg ! https://t.co/n8fqftbzzu #gezinsbudget #pgb https://t.co/…

5. rt @paulabierma: keuzevrijheid is een groot goed! #pgb #maatwerk #eigenregie @persaldo95 https://t.co/wllxp1dv9x

6. weigering #pgb onterecht als uitwonend kind geen #mantelzorg wil bieden - nati-onale zorggids https://t.co/jvmabfmn95 @mezzo_nl @beperking

7. rt @renskeimkamp: geweldig: crvb spreekt zich voor het eerst uit over mantelzorg in wmo 2015, en in voordeel van budgethouders #pgb…

(30)

8. rt @renskeimkamp: geweldig: crvb spreekt zich voor het eerst uit over mantelzorg in wmo 2015, en in voordeel van budgethouders #pgb…

9. rt @sociaalweb: weigering #pgb onterecht als uitwonend kind geen #mantelzorg wil bieden - https://t.co/evcocvaprq https://t.co/677hucnub3

10. gemeente mag geen #maximum stellen aan #pgb voor #mantelzorg - actueel - skipr https://t.co/icnreyhbqt

Referenties

GERELATEERDE DOCUMENTEN

Het blijkt dat de kleur van het mengsel van GGN’s en melamine afhankelijk is van het gehalte melamine, waardoor bepaling van het gehalte melamine mogelijk wordt. De

− Wanneer in vraag 16 een onjuiste molaire massa van melamine is gebruikt en dezelfde fout in vraag 20 opnieuw is gemaakt, dit hier niet aanrekenen. − Wanneer in vraag 16

hand flower thinning treatment at full bloom significantly reduced the number of fruitlets that had to be thinned by hand during commercial hand thinning compared to the control

Wanneer deze niet wordt bereikt en alle afbeeldingen reeds overlopen zijn zal er worden overgegaan naar een volgende manier om data te genereren.. Dit zal in een eerste stap

The aims of this project were three-fold: (i) to identify promising TB vaccine candidates by screening a panel of novel MTB antigens, by stimulating whole blood cultures in vitro

Bij de invoering van de modulaire struc- tuur in 2003 werd er beslist om niet met proef- projecten te werken, maar wel om de structuur algemeen in te voeren voor alle centra.. Evenwel

Er vanuit gaande dat hij eerder een islamitische dan een christelijke kijk op verlossing heeft, kan dus nog steeds niet vastgesteld worden of hij door zijn mening over de

In the P600 time window, possibly in its late stage (Hagoort & Brown, 2000), the parser tries to repair the incongruity, thus turning the incongruous masculine article il into