Automatische generatie van gepersonaliseerd voetbalcommentaar aan de hand van Twitter Gertjan Goossens Promotor: prof. dr. ir. Rik Van de Walle Begeleiders: ir. Fréderic Godin, ir. Baptist Vandersmissen Masterproef ingediend tot het behalen van de academische graad van Master of Science in de ingenieurswetenschappen: computerwetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: prof. dr. ir. Jan Van Campenhout Faculteit Ingenieurswetenschappen en Architectuur Academiejaar 2013-2014 Automatische generatie van gepersonaliseerd voetbalcommentaar aan de hand van Twitter Gertjan Goossens Promotor: prof. dr. ir. Rik Van de Walle Begeleiders: ir. Fréderic Godin, ir. Baptist Vandersmissen Masterproef ingediend tot het behalen van de academische graad van Master of Science in de ingenieurswetenschappen: computerwetenschappen Vakgroep Elektronica en Informatiesystemen Voorzitter: prof. dr. ir. Jan Van Campenhout Faculteit Ingenieurswetenschappen en Architectuur Academiejaar 2013-2014 Voorwoord Van zodra ik de lijst met masterproefonderwerpen voorgeschoteld kreeg, sprak dit onderwerp me aan. Door mijn passie voor het voetbal en eerdere ervaringen met Twitter besloot ik dan ook meteen contact op te nemen met mijn thesisbegeleiders. Het eerste gesprek overtuigde me reeds meteen van mijn keuze. Het leek me een leuke uitdaging om een aangename commentaarstroom te genereren uit de grote hoeveelheid data die op Twitter te vinden is. Langs deze weg wil ik graag ook enkele mensen bedanken. Eerst en vooral wil ik mijn promotor, prof. dr. ir. Rik Van de Walle, bedanken om me de kans te geven om me een jaar lang bezig te houden met een onderwerp dat me erg boeit. Daarnaast wil ik ook graag mijn thesisbegeleiders, ir. Fr´ederic Godin en ir. Baptist Vandersmissen, alsook dr. ir. Wesley De Neve bedanken voor de constructieve feedback die ik doorheen het jaar van hen kreeg. Dankzij hun tips en meningen kon ik me tijdens moeilijkere periodes opnieuw opladen om nieuwe paden te onderzoeken. Verder wil ik ook iedereen bedanken die meewerkte aan de evaluatie van de masterproef. In het bijzonder ben ik mijn vriendin Nele, mijn broer, zus en mijn ouders erg dankbaar voor het aanmoedigen van mensen om mee te werken aan mijn onderzoek. Daarnaast wil ik hen en mijn vrienden ook bedanken voor de steun gedurende het afgelopen jaar. Ten slotte verdienen mijn ouders nog een extra vermelding voor het geloof dat ze gedurende de afgelopen vijf jaar in mij getoond hebben. Gertjan Goossens, juni 2014 i Toelating tot bruikleen “De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopi¨eren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie.” Gertjan Goossens, juni 2014 ii Automatische generatie van subjectieve voetbalcommentaar aan de hand van Twitter door Gertjan Goossens Afstudeerwerk ingediend tot het behalen van de graad van Master in de ingenieurswetenschappen: computerwetenschappen Academiejaar 2013-2014 Universiteit Gent Faculteit Ingenieurswetenschappen en Architectuur Vakgroep Elektronica en informatiesystemen Voorzitter: prof. dr. ir. J. Van Campenhout Promotor: prof. dr. ir. R. Van de Walle Thesisbegeleiders: ir. F. Godin, ir. B. Vandersmissen Samenvatting In deze masterproef wordt een systeem voorgesteld dat in ware tijd automatisch gepersonaliseerd voetbalcommentaar genereert, op basis van wat mensen zeggen op Twitter. Het systeem genereert commentaar door de inkomende tweets meteen te filteren en toe te kennen aan clusters. Nadat de tweets toegekend zijn aan clusters worden deze clusters samengevat. Samen vormen al deze samengevatte clusters een commentaarstroom. Het gepersonaliseerde aspect wordt gerealiseerd door de inkomende stroom van tweets nog extra te filteren. Op die manier kunnen we een commentaarstroom genereren voor de fans van elk team. Het voorgestelde systeem werkt ongesuperviseerd, waardoor het ook toegepast kan worden tijdens andere sportwedstrijden of populaire evenementen. Trefwoorden: Twitter, commentaar, samenvatten, voetbal iii Automatic generation of personalised football commentary using Twitter Gertjan Goossens Supervisor(s): prof. dr. ir. Rik Van de Walle, ir. F. Godin, ir. B. Vandersmissen Abstract— In this paper, we present a system for real-time generation of personalised football commentary, based on what people say on Twitter. The system generates commentary by filtering and clustering tweets when they come in. After that, clusters are summarised. The personalised aspect is realised by filtering the incoming stream of tweets. By doing so, we can generate a commentary stream for each team. The presented system works in an unsupervised manner, which means that it can also be applied in order to generate commentary for other events or sports games. Keywords—Twitter, commentary, summarisation, football I. I NTRODUCTION INCE Twitter was founded in 2006, it has grown massively. People use Twitter to give their opinion on all kinds of events. This is also the case during football games. On average, 65000 tweets are sent during a football game.1 This means that about 9 new tweets are sent every second. Also, up to 35% of all tweets are sent from inside the stadium [1]. This paper describes a system that automatically generates personalised football commentary, based on the tweets about a game. This system will filter and cluster tweets in real-time. Relevant cluster will then be summarized. On top of these summarized tweets, we also offer random facts that are related to the game. These facts will be generated when there is a silent moment in the Twitter feed. This generation algorithm is incorporated in an application. After generation of the raw commentary text, the emotion is analysed and the text is sent to a text to speech engine. The user can then listen to the commentary while watching the video stream of the game. The commentary system was evaluated through a questionnaire, in which people had to give scores to commentary fragments after watching a video fragment. This paper is organised as follows. In section II, we provide a brief overview of the related work in the domain of Twitter, sports and summarisation. Section III describes the algorithm that is responsible for generating commentary. In section IV, we describe the expansion of the algorithm to a full commentary application. Section V describes the questionnaire and contains the most important results. We end this paper with a conclusion in section VI. S general, there are two summarisation techniques that can be distinguished: a selection technique and the Phrase Reinforcement (PR) algorithm. The selection technique was presented in [2] and [3]. The idea behind this technique is to select the most relevant tweet from a set of tweets. This is done using the hybrid TF-IDF technique. The hybrid TF-IDF metric is comparable to normal TFIDF, but has a different definition for a ’document’ for the TF and IDF component. For the TF component, the collection of all tweets is seen as a document. For the IDF component, one tweet is considered a document. For determining the most relevant tweet, the weights of all terms in a tweet are added up. This total weight is then divided by a normalisation factor. The tweet that has the highest weight, is our summary. The second technique, the Phrase Reinforcement (PR) algorithm, was introduced in [4]. The PR-algorithm combines different tweets to a summary. This is done by representing the set of tweets about a certain subject as a graph. Every tweet is split up in words. Each of these words is represented by a node in the graph. The arcs between the nodes represent the transitions between words in a tweet. The more a transition between words occurs in the set of tweets, the higher the weight of the representing arc will be. Once this graph is built, the summary can be derived from the graph. This is done by starting in the node containing the central theme of the summary. The path with the largest weight will be followed, until the summary has reached a maximal length or until there are no more arcs to go further. III. G ENERATION ALGORITHM WITH REAL TIME CLUSTERING Since Twitter is a huge, but unstructured source of information, a lot of research has been done when it comes to summarizing tweets. Since summarizing tweets is the most important step in order to obtain a commentary stream from the tweets, this section will focus on the related work in this domain. In The generation algorithm that is used by the system in this paper works as follows. Every second, the tweets that came in are filtered and assigned to a cluster. A tweet is assigned to the cluster it is closest to, if the similarity between the cluster and the tweet is high enough. If the similarity however is too low, a new cluster is started. Once all tweets from the passed second have been assigned to a cluster, the algorithm checks which clusters can remain active and which clusters have to be removed. If clusters that have to be removed are important enough, they will also be summarised. If the system however notices that the time since the generation of the last summary is too high, it will generate a random fact that is related to the Twitter stream. 1 Average from data captured during 22 games in the English Premier League, from September 2013 until December 2013. The following subsections will discuss the filtering, clustering and summarising of tweets in detail. II. R ELATED WORK A. Step 1: Filtering tweets The first task that is performed by the algorithm is filtering the tweets. First of all, there’s the concept of the retweet, which is a tweet that has been ’forwarded’. Retweets give a useful indication of the importance of a certain tweet. However, users don’t always retweet recent tweets. A large amount of retweets describe an event that occurred a lot earlier. These events introduce irrelevant information in the commentary. To avoid this, we filter out retweets of which the original tweets is more than 30 seconds old. Since Twitter has users all over the world, the language of the tweets is also important. To make sure that no non-English tweets have an influence on the commentary, non-English tweets are discarded. The content of tweets might also lead to a lower quality of commentary. That’s why the content of tweets is also filtered. In this step, superfluous information such as hyperlinks, mentionsigns (@), hashtags (#) and unprintable characters are removed. We also remove the topic statements, these are the keywords at the end of a tweet. This filtering step also normalises the tweet. This means removing duplicate punctuation, trying to fix faulty spelling etc. B. Step 2: Clustering tweets After filtering the incoming tweets, the algorithm assigns every tweet to a cluster. To do so, a tweet is compared to every active cluster in the system. If the similarity between the closest cluster and the tweet is high enough, the tweet joins this cluster. Otherwise, a new cluster is started. For measuring the similarity between clusters, we used the cosine similarity, shown in equation 1. A·B =s Similarity(A, B) = kAk kBk n P n P Ai × Bi s n P 2 (Ai ) × (Bi )2 i=1 i=1 i=1 (1) To measure this similarity, a tweet is represented as a vector containing the number of occurrences for each word in the tweet. To make sure we can check the similarity to every cluster in limited time, we keep an average tweet vector for the ’core’ of each cluster. This core consists of 20 unique tweets that are in the cluster. C. Step 3: Deciding when to summarise Once every tweet is assigned to a cluster, the algorithm moves on to the next step: checking which clusters should be removed and summarised. To be able to check whether a cluster should stay active, we use three parameters. The first parameter is the importance ratio of the cluster. This ratio is given by equation 2. Cluster size T otal # tweets processed since cluster creation (2) The second parameter holds for how long the importance ratio of the cluster has been beneath a certain figure. The last parameter IRc = is the current age of the cluster, in seconds. Both the second and the third parameter are used as counters to decide whether the cluster should be removed. Once all tweets have been assigned to a cluster, these parameters are updated. After this update, the algorithm checks every cluster: if the cluster is too old (> 30s) or its importance ratio has been below 30% for longer than 15s, the cluster should be removed. If a cluster should be removed and it is large enough (> 5 tweets), the cluster will be summarised first. D. Step 4: Summarising clusters As section II already mentioned, there are two large techniques for generation summaries from tweets. In this step, both techniques were implemented. The selection technique was implemented as explained in section II. This technique is rather elementary. The outcome of this technique also largely depends on the filtering step. The implementation of the PR-algorithm is more complicated. In order to obtain a high quality graph, a lot of details have to be taken into account. These details will be illustrated using Figure 1. First of all, there are a lot of potential ways one can write a certain word. To obtain a high quality graph, it is important that these words all map on one node. Therefore, words are normalised, meaning they’re put to lower case and punctuation is removed. In Figure 1 for example, ’better’ and ’better,’ map on the same node. However, we should also take into account that we still have to build a summary from the graph. If we do this using the normalised words in the graph, we would obtain a sentence without punctuation or capital letters. This can be fixed by holding representations for certain transitions in the graph. The transition from ’done’ to ’better’ in Figure 1 could for example be represented as ’better,’ or ’better’. The weight of transitions in retweets should also be limited when building the graph. If we don’t do this, retweets will be dominant in the graph. This will lead to a higher chance of getting a literal (re)tweet as summary. In order to keep together words that form an entity (e.g. ’Manchester United’), we split the tweets using a PoS tagger ([5] and [6]) and a chunker [7]. The resulting chunks will also be normalised by only keeping verbs and nouns, if any. Otherwise, the whole chunk will be put in the graph. This changes the structure of the graph shown in Figure 1 to a graph with less nodes. Our approach also is slightly different from the approach in [4]. Since we work with smaller datasets, we build the graph around all tweets in a cluster, not around the tweets that contain the central theme as suggested. The authors also suggest to only follow non-unique links when obtaining the summary from the graph. However, in many cases our graphs are rather small, so following only non-unique links would lead to very short (≤ 3 words) sentences. E. Step 5: Generating random facts If the algorithm notices that the generation of the last summary started earlier than 7 seconds ago, the algorithm will start generating a random fact. If the last addition to the commentary Fig. 1. An example PR-graph constructed out of three tweets: ’LUKAKUUU! EFC 1-0 MCFC Terrible defending by Lescott Hart should have done better’, ’Hart should have done better, where have we heard that one before?’ and ’LUKAKUUU! GREAT START!’ stream however already was a random fact, the system will wait 15 seconds, since random facts are typically longer. For generating a random fact, we make use of DBPedia [8] and DBPedia Spotlight [9]. When the algorithm decides that a random fact should be generated, all tweets in the current active clusters are aggregated. This aggregated text is then sent to DBPedia Spotlight. This service processes the text and detects concepts in the text. Once we have retrieved the concepts, we order them by the number of occurrences in the aggregated text. The most important concept is then looked up on DBPedia. If the concept is found, the system fetches the first two sentences of the English abstract about the concept. These sentences are our ’random fact’. Note however that this approach is a proofof-concept. Fig. 2. The average scores over all video fragments. IV. T URNING THE ALGORITHM INTO AN APPLICATION Now that we have a system to generate commentary, we still have to apply the commentary on the video stream of the football game. This means turning the text into speech and creating an application for setting up the system. A. Turning text into speech An essential part of our commentary system is to turn the text into speech. In this transformation step, we do not simply send all text to a text-to-speech client. This is because we never check how much commentary we are generating. It is possible that, at a certain moment, there is too much text to read. This step also introduces emotion in the system as a proof-of-concept. For turning the text into speech, we make use of the Mary TTS client [10]. All generated text is sent to a priority queue. This queue makes sure that random facts are interrupted when a new summarized cluster comes in. We also make a distinction in priority between these summarized clusters. Although the queue normally reads the newest summaries first, some high priority summaries may pass the newer summaries by. These high priority summaries are those that were generated from the largest clusters. This is because the largest clusters are typically more important. If a piece of text is in the queue for more than 30 seconds, it will be removed from the queue and will never be read. Emotion can be added to the spoken text by analysing the text upfront. In our proof-of-concept, we double the volume of the voice if more than 30% of the characters in the text is a capital letter. B. Adding video and personalisation The last addition to the system is the finishing touch. In this step, a user interface was added. Through this user interface, the user can choose the game (from the database) that he wants to watch. After this choice, he can choose whether he wants a personalised commentary for his favourite team or a mixed commentary. The personalised commentary is achieved by filtering the initial Twitter stream on the hashtags for the requested team. After the user has made his (or her) choice, he gets to see the video and the generated commentary is being read to him (or her). To synchronise the tweets to the video, we manually made sure the first tweet about the kick-off came in at the same moment as when the kick-off was given in the video. V. E VALUATION We evaluated the commentary system through a questionnaire. In this questionnaire, people got to see 5 video fragments from 4 different football games. For each of these video fragments, we let them read 5 commentary fragments. Among these fragments were the original commentary that belonged to the video, a personalised commentary generated using the PR-algorithm, a mixed commentary generated using the PRalgorithm, a personalised commentary generated using the selection technique and a mixed commentary generated using the selection technique. The users had to give each of these commentary fragments a score from 1 to 5 on originality, relevance and pleasancy. Next to these scores, the users also had to choose their favourite commentary fragment as if they were a fan of one of the teams or as if they were a neutral fan. We got 22 people to fill in our questionnaire. Among this test crowd were men as well as women and people with knowledge about football as well as people who don’t know anything about the game. In general, the questionnaire resulted in rather low scores for all commentary fragments, even for the original commentary. This can be seen in Figure 2. Only when it comes to relevance, we can see a clear winner: the original commentary. This is a logical result, since the commentary belongs to the videos that have been shown. The rather low scores indicate that people are not really enthusiastic about the idea of having a commentary stream that is fully based on Twitter. However, the scores also indicate that none of the generated fragments are completely outperformed by the original commentary. This might mean that people are open to additions to commentary based on Twitter. VI. C ONCLUSION AND FUTURE WORK In this paper, we presented a system that automatically generates personalised football commentary, based on what people say on Twitter. However, section V showed us that people aren’t really waiting for a new type of commentary. They seem to appreciate the input of Twitter. That is why we propose to develop a system that automatically generates personalised, event driven summaries, in stead of a full commentary. The system in this paper can, however, be improved on a few aspects. First of all, clustering based on cosine similarity is not perfect. It is perfectly possible that two tweets describe the same event, while using completely different vocabulary to do so. The cosine similarity will then be 0, since no terms are shared, while the tweets really should be in the same cluster. Secondly, the proof-of-concepts in this system can be improved. Lastly, our system works unsupervised, which means it should also work when generating commentary for other sports games or popular events. However, the system has not yet been tested thoroughly for this kind of events. R EFERENCES [1] [2] [3] HTC, “UEFA Tech Talk: The Stadium Goes Social,” May 2014. Beaux Sharifi, Mark-Anthony Hutton, and Jugal K. Kalita, “Experiments in Microblog Summarization,” in Social Computing (SocialCom), 2010 IEEE Second International Conference on, 2010, pp. 49–56. David Inouye and Jugal K. Kalita, “Comparing Twitter Summarization Algorithms for Multiple Post Summaries,” in Privacy, security, risk and trust (passat), 2011 IEEE third international conference on social computing (socialcom), 2011, pp. 298–306. [4] Beaux Sharifi, Mark-Anthony Hutton, and Jugal K. Kalita, “Summarizing Microblogs Automatically,” in Human Language Technologies: The 2010 Annual Conference of the North American Chapter of the Association for Computational Linguistics, Stroudsburg, PA, USA, 2010, HLT ’10, pp. 685–688, Association for Computational Linguistics. [5] Kristina Toutanova, Dan Klein, Christopher D. Manning, and Yoram Singer, “Feature-rich part-of-speech tagging with a cyclic dependency network,” in Proceedings of the 2003 Conference of the North American Chapter of the Association for Computational Linguistics on Human Language Technology-Volume 1. Association for Computational Linguistics, 2003, pp. 173–180. [6] Leon Derczynski, Alan Ritter, Sam Clark, and Kalina Bontcheva, “Twitter Part-of-Speech Tagging for All: Overcoming Sparse and Noisy Data,” in Proceedings of the International Conference on Recent Advances in Natural Language Processing. 2013, Association for Computational Linguistics. [7] OpenNLP, ,” April 2014. [8] DBPedia, ,” April 2014. [9] DBPedia Spotlight, ,” April 2014. [10] Mary TTS web client, ,” May 2014. Inhoudsopgave 1 Inleiding 1 1.1 Probleemstelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Doelstelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Overzicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Gerelateerd werk 2.1 2.2 2.3 5 Inleidende literatuur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Typische kenmerken van Twitterdata . . . . . . . . . . . . . . . . . 6 2.1.2 Hoogtepuntextractie in sportwedstrijden met behulp van Twitter 7 . Automatische generatie van commentaar op basis van een verzameling tweets 7 2.2.1 Clusteren van tweets . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.2 Samenvatten van tweets . . . . . . . . . . . . . . . . . . . . . . . . 12 Twitter en grammatica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.1 Bestaande NLP implementaties . . . . . . . . . . . . . . . . . . . . 15 2.3.2 Grammaticale correctheid . . . . . . . . . . . . . . . . . . . . . . . 15 2.4 Van tekst naar spraak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3 Generatie van voetbalcommentaar volgens een vast tijdsinterval 18 3.1 Basisidee achter het algoritme . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2 Filteren van tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3 3.2.1 Filteren van retweets . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.2 Filteren van inhoud . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.3 Filteren op taal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Clusteren van tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.1 De gelijkenis tussen tweets meten . . . . . . . . . . . . . . . . . . . 22 3.3.2 Hi¨erarchische implementatie . . . . . . . . . . . . . . . . . . . . . . 23 3.3.3 K-means clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.4 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 viii 3.4 Samenvatten van tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4.1 Berekenen van TF-IDF gewichten . . . . . . . . . . . . . . . . . . . 26 3.4.2 Algoritme 1: Selectie van de meest representatieve tweet . . . . . . 27 3.4.3 Algoritme 2: Phrase Reinforcement . . . . . . . . . . . . . . . . . . 28 3.4.4 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.5 Evaluatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4 Generatiealgoritme voor voetbalcommentaar met clustering in ware tijd 38 4.1 Basisidee achter het algoritme . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2 Clusteren van tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.3 Samenvatten van tweets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.4 4.3.1 Aanpassing van het PR algoritme . . . . . . . . . . . . . . . . . . . 41 4.3.2 Commentaar verrijken met willekeurige feiten . . . . . . . . . . . . 42 4.3.3 Beslissen wanneer een cluster samengevat moet worden . . . . . . . 43 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5 Van gegenereerde tekst naar een volledige commentator 5.1 5.2 5.3 48 Omzetting van tekst naar spraak . . . . . . . . . . . . . . . . . . . . . . . 48 5.1.1 Werking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.2 Toevoegen van emotie . . . . . . . . . . . . . . . . . . . . . . . . . 50 Volledige commentator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.2.1 Becommentari¨eren van een voetbalwedstrijd met videobeelden . . . 51 5.2.2 Becommentari¨eren van een rechtstreekse Twitterstroom . . . . . . . 53 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6 Evaluatie 56 6.1 Opbouw van de vragenlijst . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.2 Testpubliek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.3 Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.4 6.3.1 Eerste videofragment: Arsenal - Liverpool, doelpunt Santi Cazorla (A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.3.2 Tweede videofragment: Everton - Liverpool, doelpunt Kevin Mirallas (E) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.3.3 Derde videofragment: Manchester United - Arsenal, penaltyfase . . 65 6.3.4 Vierde videofragment: Sunderland - Manchester United, doelpunt Craig Gardner (S) . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.3.5 Vijfde videofragment: Arsenal - Liverpool, vervanging . . . . . . . . 72 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 ix 7 Besluit en toekomstig werk 74 7.1 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 7.2 Toekomstig werk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 A Configuraties 77 A.1 Configuratie van het commentaaralgoritme . . . . . . . . . . . . . . . . . . 77 A.2 Databank- en serverconfiguratie . . . . . . . . . . . . . . . . . . . . . . . . 80 B Commentaarfragmenten bij de evaluatie 82 B.1 Eerste videofragment: Arsenal - Liverpool, doelpunt Santi Cazorla (A) . . 82 B.2 Tweede videofragment: Everton - Liverpool, doelpunt Kevin Mirallas (E) . 84 B.3 Derde videofragment: Manchester United - Arsenal, penaltyfase . . . . . . 86 B.4 Vierde videofragment: Sunderland - Manchester United, doelpunt Craig Gardner (S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 B.5 Vijfde videofragment: Arsenal - Liverpool, vervanging . . . . . . . . . . . . 89 C Overzicht van de verzamelde datasets 92 Bibliografie 98 x Lijst van figuren 1.1 Enkele tweets uit de wedstrijd West Bromwich - Arsenal. . . . . . . . . . . 2.1 Voorbeeld van een graaf in het PR-algoritme. . . . . . . . . . . . . . . . . 12 3.1 Een grafische weergave van de werking van het basisalgoritme. . . . . . . . 19 3.2 Een illustratie van de bottom-up aanpak bij hi¨erarchisch clusteren. . . . . . 23 3.3 PR-graaf op basis van drie tweets. . . . . . . . . . . . . . . . . . . . . . . . 29 3.4 Een illustratie van de interne structuur van de PR-graaf. . . . . . . . . . . 32 4.1 Een illustratie van de werking van het verbeterde generatiealgoritme. . . . 40 5.1 Initi¨ele keuze in de commentaarapplicatie. . . . . . . . . . . . . . . . . . . 51 5.2 Keuze van de te becommentari¨eren wedstrijd. . . . . . . . . . . . . . . . . 52 5.3 Personaliseren van de commentaarstroom. . . . . . . . . . . . . . . . . . . 52 5.4 De voetbalcommentator in actie. . . . . . . . . . . . . . . . . . . . . . . . . 53 5.5 Ingeven van trefwoorden voor de live commentator. . . . . . . . . . . . . . 54 5.6 De live commentator in actie. . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.1 Enkele karakteristieken van het testpubliek. . . . . . . . . . . . . . . . . . 59 6.2 Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het eerste videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.3 Evaluatie van de voorkeuren van het testpubliek voor het eerste videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.4 Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het tweede videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 6.5 Evaluatie van de voorkeuren van het testpubliek voor het tweede videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6.6 Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het derde videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.7 Evaluatie van de voorkeuren van het testpubliek voor het derde videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.8 Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het vierde videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 xi 3 6.9 Evaluatie van de voorkeuren van het testpubliek voor het vierde videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 6.10 Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het vijfde videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6.11 Evaluatie van de voorkeuren van het testpubliek voor het vijfde videofragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.12 Algemeen gemiddelde scores van verschillende commentaren. . . . . . . . . 73 xii Gebruikte afkortingen FSD First Story Detection LDA Latent Dirichlet Allocation LSH Locality Sensitive Hashing NER Named Entity Recognition NLP Natural Language Processing PoS Part-of-Speech PR Phase Reinforcement TF Term Frequency TF-IDF Term Frequency - Inverse Document Frequency xiii Hoofdstuk 1 Inleiding 1.1 Probleemstelling Sinds de oprichting in 2006 is Twitter uitgegroeid tot de uitlaatklep bij uitstek van het Internet. Mensen gebruiken Twitter om hun mening over allerlei gebeurtenissen te uiten. Ook tijdens voetbalwedstrijden sturen we massaal korte berichtjes de wereld in. Dit bleek uit een dataset van Twitterberichten, ook wel tweets genoemd, verzameld tijdens 22 verschillende wedstrijden uit de Engelse Premier League tussen september 2013 en december 2013. Gemiddeld werden er per wedstrijd maar liefst 65000 berichtjes de wereld ingestuurd.1 Dat komt neer op 9 tweets per seconde. Een studie van technologiebedrijf HTC tijdens de groepsfase van de Champions League (jaargang 2013-2014) toonde daarenboven aan dat tot 35% van alle tweets uit het stadion komen [1]. Hoewel deze studie erg beperkt is, toont ze toch een duidelijke trend aan. Nu steeds meer mensen via smartphones en mobiel internet toegang hebben tot sociale media, kunnen we verwachten dat de supporter in het stadion in de toekomst nog meer van zich zal laten horen. Het is altijd leuk om andermans mening over bepaalde gebeurtenissen te kennen. Toch neemt niemand echt de tijd om die duizenden tweets stuk voor stuk te bekijken. Het zijn slechts de meningen van enkelen die het grote publiek bereiken. Desondanks bevatten die andere meningen ook vaak nuttige, interessante of zelfs humoristische inzichten. Wanneer we wat er op Twitter wordt gezegd vergelijken met de traditionele voetbalcommentaar zien we dan ook vaak duidelijke verschillen. 1 Deze hoeveelheden werden gemeten vanaf ongeveer 10 minuten voor de aftrap tot ongeveer 10 minuten na de wedstrijd. 1 Tabel 1.1: Fragment uit de commentaarstroom tijdens de televisie-uitzending van West Bromwich - Arsenal. A: Ozil, Wilshere. It’s Jenkinson... Arteta, Ozil, Wilshere, Giroud, Wilshere Again! B: I don’t question Steve Clark, but I feel with these tactics eventually Arsenal, they will score, because they’re getting into these areas too easily. A: Arsenal have switched the three players behind the strikers, so Ramsey who started on the right is on the left, Wilshere who begun on the left is in the middle and Ozil is down the right side. B: I think we’ll see that today and we’ll see that through the course of the season. The only constance will be Giroud and Flamini. Tabel 1.1 bevat een fragment van de commentaar uit een Engelstalige televisie-uitzending van de wedstrijd West Bromwich - Arsenal (6 oktober 2013). In Figuur 1.1 zijn enkel tweets geselecteerd die gelijktijdig met de televisiecommentaar de wereld werden ingestuurd. Daar waar de commentaar op de televisie zo objectief mogelijk blijft, zien we op Twitter voornamelijk subjectieve en erg vurige commentaren. Verder zijn er ook steeds enkele kwinkslagen, zoals bijvoorbeeld de Tweet in Figuren 1.1(a) en 1.1(b). Deze zal je zelden of nooit in gesproken of geschreven voetbalcommentaar terugvinden. Voetbalfans zijn het vaak ook niet eens met de commentatoren op de televisie of internet, zelfs als die personen volledig objectief zijn. Dat blijkt bijvoorbeeld ook uit de Tweet over commentator Alan Smith uit Figuur 1.1(c). Fans zullen zich over het algemeen veel minder opwinden wanneer de commentator een verslag op hun maat uitbrengt. Via Twitter kan zulke verslaggeving gerealiseerd worden: een verslag v´oo´r fans d´o´or fans. Ten slotte geeft de typische verslaggeving die we terugvinden op het internet vaak enkel de belangrijkste hoogtepunten zoals doelpunten, rode kaarten of zware blessures mee. Het is immers zowel praktisch als financieel onhaalbaar om verslaggevers naar elke mogelijke wedstrijd te sturen. 1.2 Doelstelling De belangrijkste doelstelling van deze masterproef is het automatisch en ongesuperviseerd genereren van een gepersonaliseerde commentaarstroom tijdens een gegeven voetbalwedstrijd. Het gepersonaliseerde aspect van de commentaarstroom ligt in de partijdigheid van 2 (a) Een beschrijvende Tweet met een humoristisch kantje. De tweet is het gevolg van een incident waarbij Jack Wilshere in de week voor de wedstrijd werd betrapt met een sigaret. (b) Een persoonlijke (en humoristische) mening over de baard van Jack Wilshere. (c) Een fan die het niet eens is met de commentatoren op televisie. (d) Een eerder beschrijvende Tweet. Figuur 1.1: Enkele tweets uit de wedstrijd West Bromwich - Arsenal. 3 het verhaal. De fans van beide teams krijgen met andere woorden hun eigen commentaarstroom. Anderzijds is het ook mogelijk om een gemengde commentaarstroom aan te bieden. Ten slotte zal de resulterende commentaar voorgelezen worden met text-to-speech technieken. Het ongesuperviseerd karakter van het totaalsysteem moet ervoor zorgen dat deze oplossing niet beperkt is tot het becommentari¨eren van voetbalwedstrijden. Het moet immers ook mogelijk zijn om verslaggeving te voorzien voor andere populaire evenementen. Deze masterproef zal antwoorden op de vraag of het mogelijk is om, met behulp van Twitter, op automatische en ongesuperviseerde wijze een gepersonaliseerde voetbalcommentaarstroom te genereren. 1.3 Overzicht Na deze inleiding wordt in Hoofdstuk 2 een overzicht gegeven van de reeds bestaande literatuur die relevant in het kader van deze masterproef. In Hoofdstuk 3 wordt een eerste algoritme voor de generatie van voetbalcommentaar beschreven. Dit algoritme werkt op basis van een vast tijdsinterval. Hoofdstuk 4 introduceert een uitbreiding op die algoritme. Deze uitbreiding volgt niet langer een vast tijdsinterval, maar maakt gebruik van clustering in ware tijd. Dit uitgebreide algoritme wordt in Hoofdstuk 5 verder aangevuld. Hier wordt beschreven hoe de gegenereerde commentaar omgezet wordt naar spraak en hoe we uiteindelijk tot een commentaarapplicatie komen. In Hoofdstuk 6 wordt de evaluatie van het commentaarsysteem besproken. Ten slotte be¨eindigen we deze masterproef met een besluit en een overzicht van eventueel toekomstig werk in Hoofdstuk 7. 4 Hoofdstuk 2 Gerelateerd werk Het systeem dat in het kader van deze masterproef ontwikkeld wordt, bestaat uit twee belangrijke componenten. De hoofdcomponent van het systeem zal ervoor zorgen dat een subjectieve commentaar kan worden afgeleid uit een set van tweets. Daarnaast zal er ook gebruikgemaakt worden van een component die tekst omzet naar spraak. Rond elk van deze individuele componenten werd reeds veel onderzoek uitgevoerd. Dit hoofdstuk geeft een overzicht van relevante onderzoeken en technologie¨en binnen het kader van deze masterproef. In Sectie 2.1 worden enkele onderzoeken besproken die verband houden met Twitter. Sectie 2.2 beschrijft de belangrijkste verwezenlijkingen uit de literatuur die relevant zijn om de hoofdcomponent op te bouwen. In Sectie 2.3 wordt een overzicht gegeven van grammatica-gerelateerde systemen. Ten slotte behandelen we ook nog de tweede belangrijke component van het systeem, namelijk de omzetting van de gegenereerde tekst naar spraak in Sectie 2.4. 2.1 Inleidende literatuur In het verleden werd reeds veel onderzoek gedaan met betrekking tot het verwerken van Twitterdata. Om op de hoogte te zijn van de huidige evoluties in de academische wereld, geven we in deze sectie een overzicht van relevante onderzoeksresultaten met betrekking tot Twitter. In Sectie 2.1.1 worden de typische kenmerken van Twitterdata vermeld en vergeleken met traditionele media. In Sectie 2.1.2 worden enkele concrete toepassingen besproken waarin Twitter gebruikt wordt ter ondersteuning van sportverslaggeving. 5 2.1.1 Typische kenmerken van Twitterdata In [2] vergelijken Zhao et al. de traditionele media met Twitter. Hiervoor werd de krant The New York Times gebruikt. In dit onderzoek kwamen de auteurs tot verscheidene conclusies. Zo merkte men op dat zowel Twitter als de traditionele media dezelfde onderwerpen aanhalen, maar dat het verschil voornamelijk ligt in de aandacht die naar bepaalde onderwerpen gaat. Zo besteden Twittergebruikers meer aandacht aan de popcultuur, terwijl de traditionele media dieper ingaan op wereldnieuws. Ondanks het feit dat Twittergebruikers meer aandacht besteden aan onderwerpen uit de persoonlijke levenssfeer, zijn ze wel erg actief in het retweeten van wereldnieuws. Hierdoor wordt belangrijk nieuws sneller verspreid. De thema’s uit de persoonlijke levenssfeer, zoals sport, lokken daarentegen meer persoonlijke meningen uit. Een laatste opmerkelijke vaststelling was dat de woordenschat in The New York Times veel ruimer was, ondanks het feit dat er op Twitter bijna dubbel zoveel woorden gebruikt werden om dezelfde gebeurtenissen te beschrijven. Perez-Tellez et al. [3] bespreken enkele problemen met betrekking tot het interpreteren van tweets. Het doel was om voor bedrijven tweets op te delen in clusters. Op die manier kunnen bedrijven te weten komen wat mensen denken over hun activiteiten. Het is echter geen gemakkelijke opgave om de context van een tweet te achterhalen. Zo zijn er bijvoorbeeld bedrijven met namen die ook gewone woorden zijn. Tweets die zulke namen bevatten zijn dus moeilijker te classificeren onder een bepaald thema. Bijgevolg is er behoefte aan een systeem dat beter in staat is om de context te begrijpen. Deze problemen treden ook op wanneer tweets namen of bijnamen van personen bevatten. In [4] gaan Ritter et al. verder in op de herkenning van entiteiten. Omwille van de restrictie in het aantal tekens gebeurt het vaak dat bepaalde woorden afgekort worden. Bovendien worden woorden vaak (al dan niet opzettelijk) fout gespeld. Zulke fouten en afkortingen maken het begrijpen van context en samenvatten van tweets in een vloeiende en correcte tekst een moeilijke opgave. Choudhury en Breslin [5] concentreerden zich op het herkennen van entiteiten in sporttweets. Ook hier was de belangrijkste bevinding dat Twittergebruikers woorden of namen vaak afkorten of vervormen. Verder worden hoogtepunten in sportwedstrijden vaak op verschillende manieren vernoemd. Een doelpunt kan bijvoorbeeld beschreven worden als ’Goal!’, maar kan ook gewoon te herkennen zijn aan een scorevermelding of een beschrijving van de fase. Deze fenomenen maken het extra moeilijk om de context van tweets (en dus ook het verloop van de sportwedstrijd) te interpreteren. 6 2.1.2 Hoogtepuntextractie in sportwedstrijden met behulp van Twitter In onderzoeken met betrekking tot sportwedstrijden werd al vaker gebruikgemaakt van Twitter. Deze onderzoeken gaan voornamelijk op zoek naar technieken om de hoogtepunten uit wedstrijden te extraheren. Het doel van deze technieken was om een beknopte samenvatting van de wedstrijd te bekomen. In eerste instantie lag de focus vooral op tekstuele samenvattingen. Later ging men ook videosamenvattingen automatiseren. [6] en [7] beschrijven systemen om automatisch hoogtepunten uit sportwedstrijden te extraheren. Het systeem uit [6] doet dit in twee stappen. Eerst worden hoogtepunten gedetecteerd aan de hand van een plotse stijging in het aantal tweets per minuut. Daarna worden deze hoogtepunten geanalyseerd om af te leiden wat er exact gebeurd is. Uiteindelijk blijft er een samenvattende lijst over. Die lijst bevat alle tijdstippen van gebeurtenissen en hun type (bijvoorbeeld goal of red card ). In [7] gebruiken de auteurs een gelijkaardig systeem om gebeurtenissen te detecteren. In dit systeem wordt echter niet overgegaan tot het herkennen van gebeurtenissen, maar wordt rechtstreeks een korte samenvatting van de gebeurtenis gegenereerd uit de tweets. Kobayashi et al. gebruikten Twitter om een subjectieve videosamenvatting te genereren in [8]. De hoogtepunten werden gedetecteerd op een gelijkaardige manier als in [6] en [7]. Het subjectieve aspect werd gerealiseerd met behulp van een eenvoudige vorm van sentimentanalyse. De auteurs willen op die manier de belangrijke hoogtepunten voor een bepaalde supportersclan uit alle hoogtepunten filteren. Aan de hand van de tijdstippen van deze hoogtepunten worden vervolgens segmenten uit de videobeelden van de partij geknipt. Die fragmenten vormen dan samen het subjectieve videoverslag. 2.2 Automatische generatie van commentaar op basis van een verzameling tweets Zoals eerder reeds werd aangegeven, is het genereren van de commentaar het belangrijkste doel van deze masterproef. Om die commentaar te genereren zijn twee belangrijke stappen vereist. De eerste stap is het vinden van ´e´en of meerdere centrale thema’s in een deelverzameling van de verzameling tweets. Vervolgens is het de bedoeling om, uit die deelverzameling van tweets, een vloeiende tekst te genereren over deze thema’s. Sectie 2.2.1 geeft een overzicht van gerelateerd werk dat focust op verschillende clusteringstechnieken. Hierbij is het de bedoeling om een verzameling tweets op te delen in enkele inhoudelijk samenhangende deelverzamelingen. Op die manier worden verschillende cen7 trale thema’s blootgelegd. In Sectie 2.2.2 volgt een bespreking van enkele onderzoeken omtrent het samenvatten van microblogberichten. Deze technieken worden gebruikt om een grote verzameling tweets samen te vatten in enkele zinnen. 2.2.1 Clusteren van tweets In het domein van documentverwerking is men al jaren bezig met het ontwikkelen van technieken om centrale thema’s af te leiden uit grote teksten. Deze technieken zijn de experimentele fase intussen al voorbij en worden reeds door verschillende ontwikkelaars aangeboden in de vorm van web API’s zoals [9, 10]. Sinds de opkomst van sociale media werden die technieken ook toegepast op verzamelingen van korte tekstberichten, zoals tweets. Al snel bleek dat de gekende technieken niet erg geschikt waren. Bijgevolg is er intussen al heel wat literatuur over het clusteren van tweets rond ´e´en of meerdere centrale thema’s. 2.2.1.1 Clustering in traditionele documenten Larsen en Aone [11] beschrijven een clusteringsysteem voor traditionele documenten. Het voorgestelde systeem bestaat uit twee belangrijke stappen. De eerste stap is het extraheren van de belangrijkste onderwerpen uit de documenten. Hiervoor wordt gebruikgemaakt van Term Frequency (TF) of de iets complexere Term Frequency - Inverse Document Frequency (TF-IDF). Beide technieken kennen een bepaald gewicht toe aan woorden op basis van de frequentie waarmee woorden terugkomen in een tekst. De tweede stap van het clusteringsysteem is de eigenlijke clustering van de documenten. In deze stap worden gelijkaardige documenten gegroepeerd in clusters, vertrekkende van de belangrijkste onderwerpen. De eigenlijke bedoeling is zo een hi¨erarchische structuur van clusters op te bouwen. Eerst worden de centra van de clusters bepaald. Vervolgens wordt op zoek gegaan naar betere centra om uiteindelijk de resulterende clusters verder te verfijnen. De hi¨erarchische structuur wordt dan bereikt door deze drie stappen recursief uit te voeren tot de gewenste diepte bereikt is. Hoewel het voorgestelde systeem erg uitgebreid beschreven is en de onderzoekers veel varianten getest hebben, is het duidelijk dat dit tot problemen zou leiden voor het clusteren van korte tekstberichten. De eerste stap van het systeem zou namelijk falen. De berichten zijn typisch erg kort, waardoor de TF en TF-IDF waarden voor verschillende termen weinig verschil zullen vertonen. De idee¨en uit de tweede stap kunnen echter wel nuttig zijn voor het clusteren van tweets. Zoals in Sectie 2.1.1 reeds vermeld werd, vergelijken Zhao et al. [2] traditionele media met 8 Twitter. Voor deze vergelijking maken ze gebruik van topic models. Om de belangrijke thema’s in de artikelen van The New York Times te detecteren wordt gebruikgemaakt van Latent Dirichlet Allocation (LDA). LDA maakt gebruik van statistische modellen om documenten toe te wijzen aan een bepaald thema. Met LDA wordt het bijvoorbeeld mogelijk om een bepaald document voor 40% aan thema A toe te wijzen, voor 25% aan thema B en voor 35% aan thema C. Elk van deze thema’s is gedefinieerd door een set van woorden met probabiliteiten. De verkregen thema’s kunnen dan als clusters beschouwd worden. Deze techniek werkt over het algemeen zeer goed op gewone tekstdocumenten. In [12] vergelijken Rosa et al. enkele technieken om tweets automatisch te clusteren. De eerste grote stap die onderscheiden wordt in de vergelijking is de normalisatiestap. Men stelt vier verschillende manieren voor om de tweets vooraf te filteren, met het oog op kwalitatieve clusters. De effectieve clusteringstechnieken kunnen worden opgedeeld in gesuperviseerde en ongesuperviseerde technieken. Bij de ongesuperviseerde technieken worden LDA en K-means clustering besproken. Het klassieke K-means algoritme bleek iets beter te presteren, maar uiteindelijk leidden beide algoritmen tot relatief slechte clusters. Dit is een logisch resultaat, aangezien geen van beide algoritmen voorzien is op het clusteren van korte teksten zoals tweets. De gesuperviseerde technieken maken gebruik van hashtags als labels voor thema’s. Uit de testresultaten van de auteurs bleek dat deze laatste variant de beste clusters afleverde. 2.2.1.2 Clusteringstechnieken voor tweets op basis van topic models Om het topic model uit een verzameling van tweets af te leiden, maken Zhao et al. [2] gebruik van een techniek die gebaseerd is op LDA. De klassieke LDA presteert immers niet goed op tweets omdat ze kort zijn. Een mogelijke aanpak om dit probleem op te lossen is om alle tweets van ´e´enzelfde gebruiker te aggregeren tot ´e´en groot document. Ondanks het feit dat deze aanpak relatief vaak gebruikt wordt, stellen de auteurs een alternatieve techniek voor: Twitter-LDA. Deze techniek steunt op het feit dat een Tweet meestal slechts ´e´en thema bevat. Na het extraheren van de centrale thema’s in de individuele tweets wordt er op zoek gegaan naar bovenliggende categorie¨en voor deze thema’s. In [13] wijzen Ramage et al. ook op de gebreken van de klassieke LDA-techniek. Als alternatief wordt een gesuperviseerde versie van LDA voorgesteld: Labeled LDA. De toevoeging van labels introduceert de mogelijkheid om, naast de thema’s die reeds door LDA gevonden werden, zelf labels toe te voegen die bij bepaalde tweets horen. Op die manier kan het model leren welke sets van woorden overeenkomen met de labels en wordt de classificatie van tweets meer accuraat. 9 Chua en Asur [14] stellen een systeem voor om evenementen samen te vatten op basis van sociale media. Eerst wordt er gezocht naar centrale thema’s, om vervolgens een samenvattende tekst te genereren. Het voorgestelde samenvattingssysteem is echter erg simplistisch. Om het clusteringsprobleem op te lossen, wijst men ook hier op de gebreken van klassieke LDA. In plaats daarvan introduceren de auteurs twee nieuwe topic models. Het Decay Topic Model (DTM) steunt op het feit dat topics vaak evolueren na verloop van tijd. Een conversatie over de beursintroductie van Facebook zal bijvoorbeeld beginnen bij vermeldingen van $28”, maar die prijs stijgt na verloop van tijd. Het is dan ook ” wenselijk dat bijvoorbeeld $35” tot hetzelfde topic gerekend wordt. Het Gaussian Decay ” Topic Model (GDTM) voegt hier nog tijdstempels aan toe, zodat de variatie in tijd nog beter gemodelleerd kan worden. 2.2.1.3 Clusteringstechnieken voor tweets op basis van klassieke clusteringsalgoritmen In [15] stellen Sankaranarayanan et al. TwitterStand voor. TwitterStand is een systeem dat tweets verzamelt over belangrijke gebeurtenissen. Het belangrijkste doel van het systeem is om tweets in ware tijd op te delen in categorie¨en. Een belangrijk kenmerk van dit probleem is dat het nooit op voorhand weet welke en hoeveel thema’s aan bod zullen komen. Het gebruikte algoritme houdt een aantal actieve clusters bij. Elke cluster heeft een kenmerkenvector en een tijdstempel. De kenmerkenvector is een lijst van gewogen sleutelwoorden uit de Tweet. De weging van de woorden gebeurt op basis van TF-IDF. Wanneer er dan een nieuwe Tweet in het systeem binnenkomt stelt men de kenmerkenvector van deze Tweet op en meet men de afstand tussen de kenmerkenvectoren van de Tweet en de verschillende clusters. Als die afstand kleiner dan een bepaalde grens is. hoort de Tweet bij de cluster in kwestie. Zo niet, wordt er een nieuwe cluster aangemaakt. O’Connor et al. [16] beschrijven de werking van TweetMotif, een systeem dat berichten groepeert op basis van frequente termen. Het beschreven systeem hanteert een hi¨erarchische aanpak. Eerst krijgen (deel)zinnen uit de tweets een score. Die weging is gebaseerd op klassieke TF-IDF, maar houdt meer rekening met de typische korte berichten op Twitter. Elk van deze (deel)zinnen beschrijft dan een potentieel thema. Na het toekennen van de score worden gelijkaardige thema’s samengenomen en worden de uiteindelijke thema’s verder verfijnd. De auteurs evalueren hun aanpak echter niet. 2.2.1.4 Alternatieve clusteringstechnieken In [17] beschrijven Martin et al. een systeem dat zinnen detecteert die een plotse groei in populariteit kennen, zogenaamde bursts. Met dit systeem wil men journalisten helpen 10 met hun werk. Het gebruikte algoritme steunt op drie belangrijke concepten. Eerst en vooral maakt men gebruik van n-grams. Dit zijn sequenties van n items, zoals woorden, lettergrepen,... Door met n-grams te werken kan men in het systeem bijvoorbeeld het onderscheid maken tussen man bijt hond” en hond bijt man”. Een andere be” ” langrijke component is Named Entity Recognition (NER). Deze component zorgt ervoor dat bepaalde entiteiten, zoals bekende mensen, herkend kunnen worden in een tekst. Het eigenlijk clusteringssyteem maakt gebruik van een variant op TF-IDF. Deze variant, Temporal Document Frequency - Inverse Document Frequency (DF-IDFt ), meet in welke mate er een burst optreedt in het aantal voorkomens van een n-gram. Na het detecteren van de meest frequente sequenties, past men een hi¨erarchisch clusteringsalgoritme toe dat de woordsequenties die het dichtst bij elkaar liggen samenvoegt in een cluster. Uiteindelijk bekomt men dan een lijst van clusters die beschreven kunnen worden met behulp van de belangrijkste n-grams in de cluster. Uit de testresultaten van de auteurs bleek dat dit systeem erg goed presteert op tweets over voetbalwedstrijden. YaJuan et al. [18] stellen een systeem voor om thema’s op Twitter samen te vatten. Om een samenvatting te realiseren, gaat men eerst op zoek naar interessante deelthema’s. Hiervoor maakt men gebruik van de Term Frequency (TF). Een groot verschil met TFIDF is dat men de TF op een andere manier berekent. De TF wordt hier gemodelleerd als een binomiale verdeling. Op die manier houdt men rekening met het feit dat de belangrijkste thema’s voorkomen wanneer er zich een plotse verhoging (burst) in het tweetvolume voordoet. Achteraf vat men de gevonden thema’s samen op basis van de invloed die een gebruiker heeft op Twitter. Petrovi´c et al. [19] beschrijven een manier om tweets in ware tijd op te delen in clusters. Dit probleem staat gekend als First Story Detection (FSD). Hierbij is het de bedoeling om de eerste Tweet die afwijkt van alle andere op te delen in een nieuwe cluster. Typisch wordt dit gedaan door simpelweg de afstand tussen de Tweet en alle tweets in de bestaande clusters te berekenen. Deze bewerking vergt echter enorm veel tijd en is bijgevolg niet geschikt voor real-time applicaties. De auteurs stellen daarom voor om gebruik te maken van Locality Sensitive Hashing (LSH). Deze techniek maakt gebruik van meerdere hashfuncties die ervoor zorgen dat gelijkaardige tweets op ´e´enzelfde waarde mappen. Op die manier worden natuurlijke clusters gecre¨eerd. Bijgevolg gebeurt de toewijzing aan een cluster in constante tijd, wat wenselijk is in real-time toepassingen. In [20] passen Osborne et al. FSD toe zoals Petrovi´c et al. dat deden in bovenstaand artikel. Het grote verschil tussen beide systemen is dat het systeem uit [19] de tweets louter clustert, terwijl het nieuwe systeem de detectie verrijkt. Wanneer er zich een nieuwe gebeurtenis voordoet en er dus een extra cluster gecre¨eerd wordt, gaat het systeem op zoek 11 Figuur 2.1: Voorbeeld van een graaf in het PR-algoritme. Figuur uit [22]. naar gerelateerde informatie op Wikipedia. Wanneer er een significante gelijkenis is tussen tweets en een belangrijke Wikipediapagina, is de kans ook groot dat de gedetecteerde gebeurtenis effectief belangrijk is. 2.2.2 Samenvatten van tweets In Sectie 2.2.1 bespraken we reeds het clusteren van korte tekstberichten. Daarnaast zijn er afgelopen jaren verscheidene onderzoeken uitgevoerd naar het samenvatten van tweets. Op die manier kan men automatisch beschrijvingen van bepaalde belangrijke gebeurtenissen genereren. Voorlopig ligt de focus echter voornamelijk op het genereren van beknopte samenvattingen of tijdslijnen (zoals [21]). 2.2.2.1 Technieken gebaseerd op Phrase Reinforcement In 2010 stelden Sharifi et al. hun Phrase Reinforcement (PR) algoritme voor in twee verschillende publicaties ([22, 23]). Het grote nadeel van klassieke samenvattingsalgoritmen is dat ze vaak enkel zinnen uit de totale tekst aan elkaar plakken. Het PR algoritme steunt op twee belangrijke vaststellingen. Eerst en vooral gebruiken mensen vaak dezelfde woorden wanneer ze een bepaald thema bespreken of een gebeurtenis beschrijven. Ten tweede is er ook het concept van de retweet in Twitter.1 Gebruikers hebben vaak de neiging om relevante informatie te retweeten, waardoor de tweets die vaak geretweet werden zwaarder kunnen doorwegen in de uiteindelijk samenvatting. De eerste stap van het algoritme is het filteren van de tweets. Het eigenlijke algoritme begint dan met ´e´en centrale zin of woordsequentie. Het systeem gaat vervolgens op zoek 1 Een retweet kan vergeleken worden met het doorsturen van een e-mail. Gebruikers sturen met andere woorden een tweet door naar hun eigen volgers op Twitter. 12 naar woorden die frequent voorkomen vlak voor of na de woordsequentie. Rond de woordsequentie wordt dan een graaf gebouwd met al deze frequente woorden (Figuur 2.1). Het pad dat de woorden met de hoogste frequenties bevat, zal dan de uiteindelijke zin zijn die het centrale thema beschrijft. Die zin kan dan opnieuw gebruikt worden als centrale knoop om zo een langere zin te verkrijgen. Het grootste nadeel aan deze techniek is dat er per centraal topic slechts ´e´en zin gegenereerd wordt. Nichols et al. [24] beschrijven een systeem om sportwedstrijden samen te vatten. Hun systeem gaat aan de hand van veranderingen in de hoeveelheid tweets per minuut op zoek naar gebeurtenissen in een wedstrijd. Hierbij steunen ze op het feit dat mensen veel intenser reageren wanneer er effectief iets gebeurt in een wedstrijd. Statistieken van het aantal tweets tijdens een wedstrijd vertonen ook steevast een erg grillig patroon met veel pieken en dalen. De pieken komen steeds vlak na een hoogtepunt voor. Nadat de hoogtepunten gedetecteerd zijn, treedt er een ruisverwijderingsmechanisme in werking. Dit mechanisme zorgt er onder andere voor dat het taalgebruik genormaliseerd wordt (goaaaaaaaaaal wordt bijvoorbeeld omgezet naar goal ). Om daarna een korte tekst te genereren, wordt een gewijzigde versie van het PR-algoritme uit [22, 23, 25] gebruikt. Het grootste verschil ligt hierbij in het feit dat men meerdere zinnen in plaats van slechts ´e´en zin genereert. Nichols et al. beschrijven echter enkel de hoogtepunten in hun samenvatting, zodat er slechts een beknopt verslag gegenereerd wordt. 2.2.2.2 Eenvoudige selectietechnieken In [25] beschrijven Sharifi et al. het PR-algoritme nog eens. Ze wijzen de lezer er hier echter op dat de techniek uit het PR algoritme voor verbetering vatbaar is en stellen een tweede samenvattingsalgoritme voor: Hybrid TF-IDF Summarization. De TF-IDFwaarde bestaat uit twee componenten. De term frequency (TF) geeft meer gewicht aan woorden die vaker voorkomen in het document, terwijl de inverse document frequency (IDF) ervoor zorgt dat het gewicht van stopwoorden en dergelijke gecompenseerd wordt. Het grote probleem van deze metriek is dat hij gevoelig is aan de lengte van het document. Op korte documenten, zoals microblogberichten, zou weinig resultaat bereikt worden. De voorgestelde oplossing beschouwt ´e´en enkele tweet als ´e´en document, maar om de TF te berekenen wordt de verzameling van alle updates als ´e´en groot document beschouwd. De tweets of zinnen die na normalisatie het grootste gewicht hebben, worden dan aan de samenvatting toegevoegd. Een potenti¨ele zwakte van deze aanpak is dat er gewerkt wordt met letterlijke tweets. Op die manier kunnen updates met taalfouten, die toch een groot gewicht halen, in de samenvatting terecht komen, wat net vermeden moet worden. Daarenboven kan deze techniek ook niet werken wanneer een gebeurtenis in meerdere zinnen moet worden beschreven. Je kan namelijk niet zomaar de tweets met de hoogste 13 TF-IDF waarde nemen. Die vertonen vaak veel overlap omdat gelijkaardige berichten ook gelijkaardige waarderingen zullen krijgen. In [26] bouwen Inouye en Kalita verder op het Hybrid TF-IDF Summarization algoritme uit [25]. Een probleem met deze techniek is, zoals reeds vernoemd, dat de samenvattingen steeds uit slechts ´e´en zin bestaan. Om langere samenvattingen te genereren, stelt men twee oplossingen voor. In het eerste geval neemt men voor een samenvatting van lengte k de k tweets met de hoogste TF-IDF uit het resultaat van het hybride algoritme. Om te voorkomen dat die k tweets te veel overlap zouden bevatten, worden enkel de tweets die genoeg verschillen met de vorige updates toegevoegd aan de samenvatting. Dit gebeurt aan de hand van een afstandsmetriek en een grenswaarde voor het minimale verschil tussen twee tweets. Deze methode is echter zeer simplistisch en kan moeilijk werken bij het samenvatten van evenementen met vaste types gebeurtenissen. Verschillende gebeurtenissen binnen ´e´enzelfde type lijken namelijk sterk op elkaar, waardoor ze niet als afzonderlijke gebeurtenissen beschouwd zullen worden. De tweede voorgestelde oplossing maakt gebruik van een clusterstap alvorens het samenvattingsalgoritme toe te passen. De idee achter deze oplossing is om de set van tweets eerst met behulp van het k-means clustering algoritme te clusteren, waarbij k de gewenste lengte is van de samenvatting. Op elk van die clusters wordt het hybride algoritme toegepast en de uiteindelijke resultaten vormen dan samen de samenvatting. Chakrabarti en Punera stellen in [27] drie samenvattingsalgoritmen voor. Twee van die drie algoritmen zijn equivalent aan de twee technieken die voorgesteld werden in [26]. De derde techniek steunt op het feit dat het volume van Twitterdata onvoorspelbaar is. Om dat gedrag te kunnen modelleren wordt gebruikgemaakt van een variant op het Hidden Markov Model. Het grote nadeel van deze techniek is echter dat deze focust op het samenvatten van hoogtepunten uit een stroom van data en dus zal resulteren in een eerder beknopte samenvatting. 2.3 Twitter en grammatica Het merendeel van de Twittergebruikers neemt het niet zo nauw met spelling- en grammaticaregels. Dat bemoeilijkt het genereren van samenvattingen uit tweets aanzienlijk. In het domein van de documentverwerking werden grammaticale aspecten reeds uitvoerig onderzocht, wat resulteerde in Natural Language Processing (NLP) technieken, zoals Part-of-Speech (PoS) tagging. Door de recente opmars van Twitter in de academische wereld werden deze technieken ook reeds aangepast aan de typische taalkenmerken op Twitter. In Sectie 2.3.1 volgt een kort overzicht van reeds bestaande NLP implementa- 14 ties. Sectie 2.3.2 bespreekt enkele systemen om grammaticale correctheid te controleren of bekomen. 2.3.1 Bestaande NLP implementaties Reeds in 2000 ontwikkelden de onderzoekers van Stanford University een volledig NLP systeem, waaronder ook een PoS tagger. Deze tagger was louter bedoeld om gewone tekstdocumenten te taggen. De werking hiervan wordt beschreven in [28, 29]. In 2013 ontwikkelden Derczynski et al. echter een model opdat de Stanford PoS tagger ook goed zou presteren op microblogteksten. Deze uitbreiding op de Stanford tagger werd gepubliceerd in [30]. Een groep onderzoekers van Carnegie Mellon University ontwikkelde in 2011 een eerste specifieke PoS tagger voor Twitter. In [31] stelden Gimpel et al. de werking van hun tagger, genaamd TweetNLP, voor. In 2013 werkten Owoputi et al. hierop verder, wat resulteerde in een nieuwe, verbeterde versie van TweetNLP. Deze nieuwe versie maakt gebruik van woordclusters. Dankzij die clusters bereikte men een meer accurate tagging. De gedetailleerde werking hiervan wordt beschreven in [32]. Ritter et al. stelden in [33, 34] hun eigen NLP systeem voor Twitter voor: TwitterNLP. Dit systeem is in Python geschreven en laat gebruikers toe om PoS-tags van hun Twitterteksten te bekomen. Aan de hand van die tags kan TwitterNLP daarenboven de tekst opdelen in zogenaamd chunks. Dit zijn delen uit de tekst die samen horen. Een andere handige NLP bibliotheek is de OpenNLP bibliotheek [35]. Hoewel deze Java-bibliotheek niet gelinkt is aan academische publicaties, bevat ze enkele krachtige implementaties van NLP technieken. Zo bevat OpenNLP onder andere een PoS tagger voor gewone tekst en een chunker. Verder laat deze bibliotheek ook toe om aan named entity extraction te doen. Dit is het extraheren van entiteiten uit een tekst. 2.3.2 Grammaticale correctheid In [36] stelden Judd en Kalita vast dat het PR algoritme vaak resulteert in goede samenvattingen, maar dat het resultaat voor sommige thema’s sterk te wensen overlaat. De samenvattingen zijn syntactisch fout of te langdradig. Dit komt doordat het algoritme weinig of geen aandacht schenkt aan de syntactische vorm van de gebruikte data. Om dit probleem op te lossen, stellen de auteurs voor om de gegenereerde samenvatting te verwerken tot een vloeiende en syntactisch correcte tekst. Met behulp van PoS tagging worden de zinnen uit de samenvatting geanalyseerd en definieert men afhankelijkheden 15 tussen woorden. Op basis van die afhankelijkheden wordt dan beslist of een woord al dan niet mag blijven staan in de zin. Deze correctietechniek is een erg interessante techniek om ervoor te zorgen dat de uiteindelijke output van het PR-algoritme zo weinig mogelijk ruis of syntactisch foute zinnen bevat. De beschreven correctie kan daarenboven toegepast worden op samenvattingen die het resultaat zijn van andere algoritmen. Langkilde-Geary introduceerde in [37] een systeem om een grammaticaal correcte tekst te genereren. Het systeem, HALogen, neemt een set van relaties binnen een zin en eventuele eigenschappen als input. Vervolgens wordt deze set, aan de hand van vooraf gedefinieerde regels, getransformeerd tot een verzameling van mogelijke uitdrukkingen. Na enkele tussenbewerkingen bepaalt het systeem op statistische wijze de meest waarschijnlijke uitdrukkingen uit deze verzameling. Aangezien HALogen afhankelijkheden als input neemt, kan het eventueel ook gebruikt worden in het systeem dat beschreven werd in [36]. In [38] beschrijven de auteurs een manier om de grammaticale correctheid van teksten te controleren. Hiervoor maken ze gebruik van een statistische aanpak op basis van een op voorhand getraind taalmodel. Dit model bevat probabiliteiten die aangeven hoe waarschijnlijk het is dat bepaalde PoS tags elkaar opvolgen. Wanneer de waarschijnlijkheid van de sequenties van tags in een zin hoog genoeg is, wordt de zin als grammaticaal correct beschouwd. Hoewel de performantie van dit systeem op eenvoudige zinnen erg hoog is, presteert het een stuk minder goed op complexe zinnen. 2.4 Van tekst naar spraak Ten slotte is het ook de bedoeling om de gegenereerde subjectieve commentaarstroom te laten uitspreken. Hiervoor zal gebruikgemaakt worden van vooraf ge¨ımplementeerde systemen. De literatuurstudie blijft dus beperkt tot een overzicht van de beschikbare services. Tabel 2.1: Overzicht van beschikbare (web)services voor omzetting van tekst naar spraak. Naam (web)service Aanpasbare parameters? Sentiment? Referentie Google Translate TTS Mary TTS FreeTTS Neen Ja Neen Neen Voorzien Neen [39] [40] [41] In het overzicht van de beschikbare text-to-speech services in Tabel 2.1 zien we een duidelijke winnaar, namelijk de Mary TTS web client. Deze webservice biedt gebruikers de keuze tussen verschillende Britse en Amerikaanse stemmen. Verder is het ook mogelijk 16 om enkele parameters aan te passen, zoals het volume van de stem. Daarenboven zijn de ontwikkelaars van dit project bezig met het uitwerken van sentiment in de stemmen, waardoor het mogelijk wordt om een bepaalde tekst vrolijk of boos te laten uitspreken. Helaas werd deze optie voorlopig nog niet uitgewerkt voor Engelstalige stemmen. 2.5 Besluit Het generatiesysteem voor commentaar dat we met deze masterproef willen bereiken bestaat uit twee belangrijke componenten. Enerzijds is er de clusterstap, anderzijds het samenvatten van tweets. Uit de literatuur blijkt dat er rond elk van deze componenten reeds relatief veel onderzoek gevoerd is. De mogelijke technieken voor de eerste stap, het clusteren van tweets, zijn onder te verdelen in drie categorie¨en. Eerst en vooral zijn er technieken die gebaseerd zijn op LDA [2, 13, 14]. De tweede soort zijn varianten op traditionele clustertechnieken die gebruikmaken van TF-IDF [15, 16]. Ten slotte zijn er nog enkele alternatieve methoden, die besproken werden in [17, 12, 18, 20, 19]. Aangezien alle varianten hun voor- en nadelen hebben en de focus in de eerdere onderzoeken voornamelijk op algemeen nieuws ligt, is het moeilijk om te voorspellen welke technieken best zullen presteren op voetbaltweets. Gezien het real-time karakter van het beoogde systeem lijkt het aangewezen om voor eenvoudige clustertechnieken te gaan. Vanuit dit oogpunt brengen de technieken uit [19, 20] ook interessante inzichten. Voor het samenvatten van tweets bestaan er twee duidelijke stromingen. De eerste is gebaseerd op het Phrase Reinforcement (PR) algoritme [22, 23, 24, 36]. De tweede mogelijke basistechniek maakt gebruik van TF-IDF om een score toe te kennen aan tweets. Aan de hand van die score worden dan de meest relevante tweets geselecteerd [25, 26, 27]. Om de gegenereerde commentaar uit te spreken zal gebruikgemaakt worden van bestaande Java-bibliotheken of webservices. In Sectie 2.4 bleek dat de Mary TTS web client over de hele lijn de beste optie is voor de text-to-speech stap. Wanneer de sentimentondersteuning van de Mary client uitgebreid wordt naar de Engelse stemmen, zal sentimentanalyse ook een grotere rol kunnen krijgen in het uiteindelijke systeem. Voor de sentimentanalyse zal momenteel geopteerd worden voor een eigen eenvoudige implementatie. 17 Hoofdstuk 3 Generatie van voetbalcommentaar volgens een vast tijdsinterval In dit hoofdstuk wordt een eerste generatiealgoritme voor voetbalcommentaar beschreven. Het doel van dit algoritme is om, gegeven een inkomende stroom van tweets, een tekstuele commentaarstroom uit de tweets af te leiden. In een latere fase kan die tekstuele commentaarstroom verwerkt en uitgesproken worden. Eigen aan dit algoritme is dat het de inkomende tweets volgens een vast tijdsinterval verwerkt. In Sectie 3.1 volgt een algemene beschrijving van dit generatiealgoritme. In Secties 3.2, 3.3 en 3.4 wordt de uitwerking van de individuele componenten van het algoritme besproken. Deze zijn respectievelijk de filterstap, de clusterstap en de samenvattingsstap. In Secties 3.5 en 3.6 volgen ten slotte een tussentijdse evaluatie en enkele conclusies omtrent het algoritme. 3.1 Basisidee achter het algoritme Om de basisidee achter dit algoritme te snappen is het van essentieel belang om te weten hoe een typische stroom van tweets eruit ziet. Om te beginnen zijn er de tekens die eigen zijn aan Twitter, zoals het mention-teken (@) en de hashtag (#). Tweets bevatten daarenboven ook vaak hyperlinks. Die extra tekens en hyperlinks zijn onaangename elementen in een tekstuele verslaggeving, en al zeker wanneer die tekst nog uitgesproken moet worden. Verder bestaat een Twitterstroom van tweets steeds voor een groot deel uit retweets. Die retweets kunnen zorgen voor storende herhalingen in real-time verslaggeving. Een ander kenmerkend aspect van een stroom over een bepaald evenement (in ons geval een voetbalwedstrijd) is dat gebruikers over meerdere verschillende gebeurtenissen tegelijkertijd rapporteren. Uit deze Twitterkenmerken is de basisidee achter het eerste generatiealgoritme gegroeid. 18 Figuur 3.1: Een grafische weergave van de werking van het basisalgoritme. De algemene structuur hiervan wordt afgebeeld in Figuur 3.1. Dit algoritme voert de drie afgebeelde stappen volgens een vast tijdsinterval sequentieel uit. De lengte van dit interval kan worden ingesteld. Een geschikte waarde hiervoor ligt tussen 15 en 45 seconden, afhankelijk van het volume van de Twitterstroom. Deze parameter dient zo gekozen te worden dat het interval groot genoeg is om een redelijk aantal tweets te verzamelen en tot een aanvaardbare commentaarstroom te komen, zonder al te veel stille momenten te introduceren. Tijdens dit interval worden alle inkomende tweets bijgehouden en na afloop van het interval worden de ontvangen tweets doorgestuurd naar de eerste stap, de filterstap. Die stap rekent af met storende gevolgen van de eerder genoemde kenmerken. De filterstap wordt uitgebreid beschreven in Sectie 3.2. De clusterstap moet ervoor zorgen dat de verschillende gebeurtenissen in de stroom van tweets ook weergegeven worden in de commentaarstroom. Sectie 3.3 bespreekt de implementatie van deze stap. De laatste stap van het generatiealgoritme is het samenvatten van de bekomen clusters. In Sectie 3.4 volgt een uitgebreide bespreking van deze stap. Het resulterende algoritme wordt in Sectie 3.5 ge¨evalueerd. In Sectie 3.6 sluiten we dit hoofdstuk af met enkele conclusies. 3.2 Filteren van tweets Zoals reeds vermeld werd in Sectie 3.1, is de filterstap verantwoordelijk voor het voorkomen van storende elementen in de output van het commentaaralgoritme. Deze stap is technisch gezien de minst complexe stap uit het hele proces, maar heeft wel grote gevolgen. In deze 19 stap worden drie verschillende filters toegepast. De eerste filter verwijdert retweets, de tweede filtert de inhoud van de tweets en ten slotte zorgt de laatste filter ervoor dat enkel de Engelstalige tweets in rekening gebracht worden. Deze filters worden respectievelijk beschreven in Secties 3.2.1, 3.2.2 en 3.2.3. 3.2.1 Filteren van retweets Het filteren van retweets spitst zich toe op het verwijderen van zogenaamde schaduwgebeurtenissen. Dit zijn pieken in het tweetvolume die veroorzaakt worden door retweets. Hierdoor detecteren systemen voor hoogtepuntextractie een gebeurtenis, terwijl er helemaal niks aan de hand is. Ook wanneer we een set tweets willen samenvatten, zijn zulke pieken in het tweetvolume storend. Die pieken overschaduwen de nuttige of nieuwe informatie in de verzameling, waardoor er te veel herhaling optreedt in de gegenereerde commentaar (en te weinig nieuwe informatie gegeven wordt). Toch is het niet de bedoeling zomaar alle retweets weg te gooien. Het feit dat een bepaalde status geretweet is, geeft immers een indicatie dat die status interessanter, geloofwaardiger of grappiger is dan andere tweets. Dat is meteen ook de reden waarom de retweetfilter die ge¨ımplementeerd werd in het kader van deze masterproef bepaalde retweets bijhoudt. Deze filter controleert voor elke tweet die binnenkomt of deze al dan niet een retweet is. De meeste retweets zijn eenvoudig te herkennen aan de waarheidswaarde isRetweet van de inkomende tweet. Als de waarde aangeeft dat de tweet een retweet is, haalt de filter de originele tweet op. De retweet in kwestie wordt enkel bijgehouden wanneer het moment waarop de originele tweet verstuurd werd binnen een venster van 30 seconden v´o´or het moment van de retweet valt. Op die manier is zeker dat het systeem met recente informatie werkt. De keuze van de venstergrootte is een experimentele keuze. Een extra manier om retweets te herkennen is door de geretweette tekst te controleren. Retweets beginnen namelijk vaak met de letters ’RT’. 3.2.2 Filteren van inhoud In Sectie 3.1 werd de inhoud van tweets al aangehaald als een storende factor. Hyperlinks, mentions, hashtags, exotische tekens e.d. zijn niet gewenst in de commentaartekst. Zeker met het oog op de verdere fase, wanneer de commentaar voorgelezen zal worden, moeten deze elementen verwijderd worden. De werking van deze filter is dan ook erg eenvoudig: elke tweet die de filter binnenkomt wordt woord per woord, teken per teken gecontroleerd. Als de beginsequentie van een woord doet vermoeden dat we te maken hebben met een hyperlink, wordt het hele woord verwijderd. Overbodige witruimte, exotische tekens, speciale symbolen, @-symbolen en #-symbolen worden ook geschrapt door deze filter. 20 Eens deze factoren uitgeschakeld zijn, blijft er nog ´e´en storende (inhoudelijke) factor over: de trefwoorden bij een hashtag. Hierbij moet een duidelijk onderscheid gemaakt worden tussen de hashtags die deel uitmaken van de tweet en de zogenaamde topic statements. Topic statements zijn de trefwoorden op het einde van de verstuurde tweet. Zij dragen dus op inhoudelijk vlak niks bij tot de tweet. Daarom werd besloten om, alvorens de inhoud te filteren op overbodige of storende elementen, eerst de topic statements te verwijderen uit de tweet. Een algemeen probleem met de inhoud van tweets is dat de gebruikers het niet zo nauw nemen met de spelling- en grammaticaregels. Helaas is het moeilijk om zulke fouten volledig te corrigeren in ware tijd, aangezien we te maken hebben met zeer grote datastromen. Toch werd in deze filter een extra stap toegevoegd, die op een eenvoudige manier een deel van de fouten kan oplossen. In deze stap wordt de tweet in kwestie namelijk genormaliseerd. Concreet houdt dit in dat verschillende schrijfwijzen van woorden op elkaar worden gemapt. Zo zal de foute spelling ’Gooaal’ gemapt worden op ’Goal’. Daartoe werden enkele regels ge¨ımplementeerd, zonder nieuwe taalfouten te introduceren. Een kort overzicht: • Gedupliceerde punctuatie wordt verwijderd • Onprintbare karakters worden verwijderd • Als drie (of meer) opeenvolgende letters in een woord gelijk zijn, gooien we letters weg tot er slechts twee overblijven (bv: ’goood’ wordt ’good’, ’hellllllo’ wordt ’hello’,. . . ) • Meerklanken waarin ´e´en of meerdere klinkers gedupliceerd zijn, worden omgevormd tot gewone meerklanken (bv: ’gooal’ en ’goooaaaaal’ worden ’goal’) 3.2.3 Filteren op taal Aangezien het systeem in deze masterproef gebruik maakt van een dataset met tweets uit de Engelse Premier League, is de meerderheid van de tweets Engelstalig. De Premier League wordt echter ook live uitgezonden en gevolgd in tientallen andere landen, met als gevolg dat een deel van de tweets anderstalig is. Normaal gezien zijn er zelden voldoende anderstalige tweets om een grote invloed te hebben op de uitvoer van het algoritme, maar in uitzonderlijke gevallen kan dit toch gebeuren. Om hinder door anderstalige tweets tot een minimum te beperken, werd een taalfilter toegevoegd. Deze filter maakt gebruik van een Java-bibliotheek voor taaldetectie [42], die claimt 99% accuraat te zijn over 53 talen heen. Enkele eenvoudige tests wezen uit dat deze bibliotheek effectief goed werkt op lange 21 niet-Engelse tweets. Wanneer korte tweets beoordeeld worden, is de taaldetectie echter minder accuraat. Zo wordt de Spaanse tekst ’Gol, K¨ un Aguero!’ valselijk als Engelse tekst aanzien. Zulke fouten zijn echter aanvaardbaar, aangezien ze eveneens als fouten tegen de Engelse spelling of grammatica kunnen doorgaan. Die fouten zijn namelijk alomtegenwoordig op Twitter en, zoals reeds vermeld werd in Sectie 3.2.2, moeilijk te corrigeren in ware tijd. 3.3 Clusteren van tweets De tweede stap van het commentaaralgoritme, de clusterstap, probeert de verschillende onderwerpen in de stroom van tweets van elkaar af te zonderen. De grote uitdaging voor de clusterstap is de vereiste om in (bijna) ware tijd te werken. Daarenboven wordt het clusteren bemoeilijkt door het feit dat Twittergebruikers tientallen verschillende schrijfwijzen voor ´e´enzelfde woord gebruiken. Het is bijgevolg noodzakelijk om gelijkaardige woorden zo goed mogelijk op elkaar te mappen, zonder al te veel extra vertraging in het systeem te veroorzaken. In de eerste versie van het commentaaralgoritme werd geopteerd om te clusteren met behulp van de traditionele clusteringstechnieken. Eerst en vooral wordt in Sectie 3.3.1 besproken hoe we de gelijkenis tussen tweets kunnen meten. Sectie 3.3.2 beschrijft een eerste clusteringsmethode, gebaseerd op een hi¨erarchische aanpak. In Sectie 3.3.3 schakelen we over naar een vorm van k-means clustering. Ten slotte volgt een kort besluit in Sectie 3.3.4. 3.3.1 De gelijkenis tussen tweets meten Om tweets te kunnen clusteren, is er een metriek nodig die toelaat om de gelijkenis tussen tweets te meten. Hiervoor werd gebruikgemaakt van de cosine similarity measure (Formule 3.1). Deze metriek wordt typisch gebruikt om de gelijkenis tussen vectoren te meten. A·B =rn Similarity(A, B) = cos(θ) = P kAk kBk n P Ai × Bi rn P 2 (Ai ) × (Bi )2 i=1 i=1 (3.1) i=1 Om de cosine similarity te kunnen meten, moeten tweets eerst worden omgezet in woordvectoren. Zo een woordvector bevat het aantal voorkomens van elk woord in de tweet. Hier speelt spelling een grote rol: wanneer we niets doen aan misspellingen, zullen de woorden ’Goal’ en ’Goooaaaaal’ als verschillende woorden aanzien worden. Als twee tweets elk ´e´en van deze spellingswijzen gebruiken, zullen ze intrinsiek wel heel gelijkaardig zijn, maar zal de cosine similarity een stuk lager liggen, aangezien het hier niet om 22 Figuur 3.2: Een illustratie van de bottom-up aanpak bij hi¨erarchisch clusteren. hetzelfde ’element’ in de vector gaat. Om zulke fouten te minimaliseren worden de tweets in kwestie genormaliseerd, alvorens de cosine similarity te berekenen. Hier blijkt met andere woorden al waarom de normalisatiestap uit de inhoudelijke filter (Sectie 3.2.2) zo belangrijk is. Na splitsing van de tweets worden de individuele woorden ook nog genormaliseerd. Dit houdt in dat hoofdletters worden vervangen door kleine letters en punctuatie verwijderd wordt. De regels die daar werden ge¨ımplementeerd, zorgen ervoor dat heel wat verschillende schrijfwijzen van woorden op elkaar gemapt kunnen worden. De mapping zou nog beter kunnen, mochten we ervoor geopteerd hebben om bovenop dit mechanisme steeds de afstand tussen twee potentieel dezelfde woorden te meten. Indien die afstand klein genoeg is, kan immers aangenomen worden dat het om hetzelfde woord gaat. Een dergelijke meting zou echter nog een pak extra vergelijkingen en dus extra vertraging met zich meebrengen. 3.3.2 Hi¨ erarchische implementatie De eerste mogelijk clusteringsaanpak is een hi¨erarchische aanpak. Deze aanpak lijkt erg geschikt voor het clusteren van tweets, aangezien er op voorhand geen aantal clusters vastligt. Op die manier kan een hi¨erarchisch algoritme zich goed aanpassen naar de gedraging van de Twitterstroom. Wanneer er bijvoorbeeld slechts twee onderwerpen in de stroom vervat zijn, zouden er theoretisch gezien ook maar twee clusters moeten zijn. In het kader van dit systeem werd gewerkt met een bottom-up aanpak. Daarbij wordt elke tweet initieel als een cluster beschouwd. Clusters worden vervolgens stap voor stap samengevoegd met de cluster waarmee ze de meeste gelijkenissen vertonen. Deze aanpak vereist maar ´e´en parameter, namelijk een maat voor hoe sterk twee clusters op elkaar moeten lijken opdat ze samengevoegd mogen worden. Wanneer er geen clusters meer samengevoegd mogen worden, stopt het algoritme. Het concept wordt ook afgebeeld in Figuur 3.2. Kort samengevat doorloopt de eigenlijke implementatie van het hi¨erarchische clusteringsalgoritme volgende stappen: 1. Maak van elke tweet een cluster 23 2. Ga op zoek naar de twee clusters die het best op elkaar lijken 3. Voeg de twee clusters uit de vorige stap samen indien de gelijkenis groot genoeg is 4. Als in de vorige stap clusters werden samengevoegd, ga terug naar stap 2. Anders is het algoritme afgelopen. Om de twee clusters die best op elkaar lijken te zoeken, werden alle clusters onderling vergeleken. Een uiteindelijke gelijkenis wordt bekomen door de gelijkenissen tussen alle tweets in de twee clusters onderling te meten en op te tellen. Daarna wordt dit cijfer uitgemiddeld, waardoor we de gemiddelde gelijkenis tussen twee tweets in de clusters bekomen. De clusters waarvoor die waarde het hoogst is, worden dan de kandidaat-clusters. De parameter voor de minimale gelijkenis opdat twee clusters samengevoegd mogen worden werd ingesteld op 0.3. Deze waarde werd experimenteel vastgelegd. Na enkele eenvoudige testen van het hi¨erarchische clusteringsalgoritme bleek dat deze aanpak niet geschikt was in een near real time systeem. Enkele alternatieven met een andere afstandsfunctie bleken even traag uit te voeren. Zo werd er geprobeerd om, in plaats van de gemiddelde gelijkenis tussen de tweets in de twee clusters in kwestie te maximaliseren, de gelijkenis tussen de gemiddelde tweetvectoren van twee clusters te maximaliseren. De vertraging met eender welke geteste variant bleek echter onaanvaardbaar voor een systeem dat in bijna ware tijd moet werken. 3.3.3 K-means clustering De tweede mogelijke clusteringstechniek is het K-means algoritme. Dit algoritme is iets minder geschikt voor het clusteren van tweets, aangezien het vereist dat je vooraf het aantal clusters kent. We weten immers nooit op voorhand hoeveel verschillende onderwerpen er aanwezig zijn in de Twitterstroom, waardoor het vastleggen van de parameter k moeilijk is. K-means clustering vertrekt vanuit k initi¨ele clusters, in dit geval tweets. De keuze van deze initi¨ele clusters is bepalend voor het eindresultaat van de clustering. In deze implementatie worden de eerste tweets uit de te clusteren lijst als initi¨ele clusters gekozen. Vervolgens worden alle overige tweets toegewezen aan ´e´en van de k clusters, meer bepaald de cluster waarmee ze de meeste gelijkenissen vertonen. Eens alle tweets aan een cluster zijn toegewezen, worden de centro¨ıden van de k clusters herberekend. Die centro¨ıden zijn de gemiddelde tweetvectoren van de clusters. Hierna begint de tweede iteratie. Dit houdt in dat elke tweet opnieuw wordt toegewezen aan de cluster waarmee hij de meeste gelijkenis vertoont. Die gelijkenis wordt nu berekend als de afstand tot het centro¨ıde van 24 de cluster. Indien nodig, wordt de tweet verplaatst naar een andere cluster. Op het einde van de iteratie worden de centro¨ıden opnieuw herberekend. Het clusteringsproces stopt wanneer een opgelegde bovengrens voor het aantal iteraties bereikt wordt, of wanneer de clusters stabiel zijn. Stabiele clusters worden bereikt wanneer de uitvoer van twee opeenvolgende iteraties identiek is. In dit systeem werd gekozen voor k = 3. Het gebeurt namelijk zelden dat er meer dan drie belangrijke gedachtegangen in een stroom van tweets vervat zitten. Het maximale aantal iteraties werd vastgelegd op 50. Dit cijfer werd experimenteel bepaald, aan de hand van de uitvoeringstijd indien een bepaald aantal iteraties uitgevoerd worden. Op die manier blijft de vertraging die de clusterstap introduceert in het commentaarsysteem beperkt. 3.3.4 Besluit In Sectie 3.3 werden twee clusteringstechnieken besproken: een hi¨erarchische aanpak en het k-means algoritme. De verwachting was dat de hi¨erarchische aanpak de beste oplossing zou bieden tot het clusteringsprobleem, gezien haar flexibiliteit. Deze aanpak bleek echter niet geschikt om tweets in (bijna) ware tijd te clusteren. Het k-means algoritme laat w´el toe om in ware tijd te clusteren, maar heeft enkele zwaktes ten opzichte van de hi¨erarchische aanpak. In de eerste plaats moet men vooraf het aantal clusters vastleggen, waardoor de kans re¨eel is dat er te veel of te weinig clusters gevormd worden. Ruizige tweets zullen daarenboven ook meestal niet in afzonderlijke clusters terechtkomen, waardoor er een grotere kans is dat deze invloed hebben op de uiteindelijke samenvatting. Bij een hi¨erarchische aanpak komen de tweets die drastisch afwijken van alle andere tweets daarentegen terecht in eenzame, kleine clusters, die uiteindelijk niet worden meegenomen in de samenvattingsstap. Een nadeel van beide technieken is dat het clusteren volgens tweetvectoren een na¨ıeve benadering is. Teksten als ’Red card for Vincent Kompany!’ en ’The ref sent off Kompany for a late tackle.’ horen intrinsiek in dezelfde cluster, maar hebben een enorm lage similariteit volgens deze aanpak. Tot op heden bestaan er echter geen snelle methodes die deze similariteit beter kunnen meten. 3.4 Samenvatten van tweets De laatste stap van het commentaaralgoritme is het samenvatten van een set tweets. In Hoofdstuk 2 zagen we reeds dat er twee grote stromingen zijn in de literatuur wanneer het aankomt op het genereren van samenvattingen van tweets, namelijk selectietechnieken en 25 het Phrase Reinforcement (PR) algoritme. Eerst en vooral wordt de weging van termen besproken in Sectie 3.4.1. Deze weging wordt gebruikt in de implementatie voor beide samenvattingsalgoritmen. Vervolgens bespreken we de eerste samenvattingstechniek. Dit is de relatief eenvoudige selectietechniek, waarbij we op zoek gaan naar de meest representatieve tweet. Deze techniek wordt besproken in Sectie 3.4.2. De tweede techniek is het PR-algoritme. De implementatie hiervan wordt besproken in Sectie 3.4.3. Ten slotte volgen in Sectie 3.4.4 enkele conclusies. 3.4.1 Berekenen van TF-IDF gewichten Zoals reeds in Sectie 2 werd gesteld, is TF-IDF een krachtig instrument om samenvattingen te genereren. In de literatuur [25, 26, 27] stelt men voornamelijk voor om deze metriek te gebruiken wanneer men een selectietechniek toepast, zoals in Sectie 3.4.2. In deze masterproef worden TF-IDF gewichten ook gebruikt wanneer het PR algoritme wordt toegepast, zoals zal blijken in Sectie 3.4.3. Sectie 2.2.2.2 introduceerde reeds de hybrid TF-IDF metriek. Deze beschouwt ´e´en enkele tweet als ´e´en document, maar om de TF component te berekenen wordt de verzameling van alle updates als ´e´en groot document gezien. Concreet geeft dit volgende formules: Aantal keer dat het woord voorkomt in alle tweets Aantal woorden in alle tweets Aantal tweets in set IDF (woord) = Aantal tweets waarin het woord voorkomt T F IDF (woord) = T F (woord) ∗ log2 (IDF (woord)) T F (woord) = (3.2) (3.3) (3.4) Algoritme 1 beschrijft de procedure om de TF-IDF gewichten van alle gebruikte woorden in een set van tweets te berekenen in pseudocode. Eerst worden alle tweets achter elkaar geplakt zodat ze ´e´en lange zin vormen. Deze zin wordt daarna gesplitst op witruimte. In de inhoudelijke filter (Sectie 3.2.2) werden de tweets reeds genormaliseerd. Bovenop die normalisatiestap worden alle ’woorden’ na splitsing ook nog eens genormaliseerd. Deze normalisering houdt in dat hoofdletters vervangen worden door kleine letters en aangrenzende punctuatie aan het einde van het woord verwijderd wordt. Dit gebeurt op dezelfde manier als in Sectie 3.3.1, zodat verschillende schrijfwijzen en fout gespelde woorden op elkaar mappen. Het aantal voorkomens van deze genormaliseerde woorden wordt bijgehouden. Eens het aantal voorkomens van elk genormaliseerd woord gekend is, itereert het algoritme nogmaals over alle woorden. In deze iteratie wordt het TF-IDF gewicht van elk genormaliseerd woord bepaald. Hiervoor bepaalt het systeem het aantal (genormaliseerde) tweets dat het (genormaliseerde) woord in kwestie bevat. Dan is meteen alle informatie aanwezig om Formules 3.2, 3.3 en bijgevolg Formule 3.4 te berekenen voor het 26 Algoritme 1 TF-IDF gewichten berekenen Require: Set tweets 1: for all tweet in tweets do 2: V olledigeT ekst ← V olledigeT ekst + tweet 3: end for 4: AlleW oorden ← V olledigeT ekst.split(witruimte) 5: for all W oord in AlleW oorden do 6: Normaliseer W oord 7: Incrementeer aantal voorkomens van GenormaliseerdW oord 8: end for 9: for all W oord in AlleW oorden do 10: tweetsDieGenormaliseerdW oordBevatten ← 0 11: for all tweet in tweets do 12: if Genormaliseerdetweet bevat GenormaliseerdW oord then 13: tweetsDieGenormaliseerdW oordBevatten + + 14: end if 15: end for 16: Bereken TF, IDF en TF-IDF volgens Formules 3.2, 3.3 en 3.4 17: end for beschouwde genormaliseerd woord. De genormaliseerde woorden en hun berekend gewicht worden samen opgeslagen, zodat ze achteraf eenvoudig op te vragen zijn door de samenvattingsalgoritmen. De berekening van deze gewichten is met andere woorden steeds een pre-processing stap. 3.4.2 Algoritme 1: Selectie van de meest representatieve tweet Het eerste samenvattingsalgoritme voor tweets dat gebruikt werd is de selectietechniek. Om een samenvatting van tweets te genereren, is deze techniek de meest voor de hand liggende. Dit algoritme gaat op zoek naar de tweet die het meest representatief is voor de hele set tweets. Zoals reeds eerder vermeld werd, steunt deze techniek op de TF-IDF wegingen van de woorden in de set van tweets. Om de meest representatieve tweet te bepalen, wordt voor elke tweet het totale gewicht opgeteld en vervolgens gedeeld door een normalisatiefactor. Aangezien TF-IDF een natuurlijke voorkeur heeft voor langere zinnen, wordt die normalisatiefactor ge¨ıntroduceerd. In formules ziet de berekening van het gewicht van de tweet er als volgt uit: N ormalisatief actor (tweet) = max(M inimale gewenste lengte van samenvatting, Aantal woorden in tweet) Gewicht (tweet) = #W oorden P in tweet T F IDF (W oordi ) i=0 N ormalisatief actor(tweet) 27 (3.5) (3.6) Zoals te zien is in Formule 3.5, wordt de normalisatiefactor bepaald door twee factoren. Enerzijds is er de lengte van de tweet die in beschouwing genomen wordt, anderzijds is er een ondergrens voor de gewenste lengte van de gekozen tweet. De normalisatiefactor zorgt ervoor dat het totale gewicht van de tweet wordt uitgemiddeld over de lengte van de tweet. Wanneer de tweet echter korter is dan de opgelegde ondergrens voor de samenvatting, zal het gewicht van de tweet gedeeld worden door die ondergrens. Dit is ook af te lezen in Formule 3.6. De normalisatiefactor zorgt er met andere woorden dus niet enkel voor dat langere tweets niet bevoordeeld worden, maar bestraft daarenboven ook te korte tweets. Bijgevolg is de tweet die de hoogste score haalt de meest relevante. Het is ook mogelijk om de k meest relevante tweets te selecteren, waarbij k > 1. In dat geval worden de k hoogst scorende tweets gekozen, met als extra voorwaarde dat de gelijkenis tussen deze k tweets onder een bepaalde grens ligt. De k meest relevante tweets zijn dus niet noodzakelijk de k tweets met de hoogste score. 3.4.3 Algoritme 2: Phrase Reinforcement De tweede samenvattingstechniek die onderzocht wordt in deze masterproef is een aangepaste versie van het Phrase Reinforcement (PR) algoritme van Sharifi et al. [22]. Deze techniek maakt gebruik van een graaf om de samenvatting te genereren. Anders dan bij de na¨ıeve selectietechniek is het resultaat van het PR-algoritme geen ’letterlijke’ tweet. Het PR-algoritme combineert elementen uit verschillende tweets tot ´e´en zin. Die combinatie wordt verwezenlijkt door de inkomende tweets die een bepaald centraal thema bespreken op te splitsen, om vervolgens de afgesplitste delen voor te stellen als knopen in een graaf. Hoe meer een bepaalde overgang tussen woorden voorkomt, hoe dominanter die overgang in de graaf wordt. De samenvatting van de set tweets wordt vervolgens bekomen door het zwaarst gewogen pad rond het centrale thema te zoeken in de graaf. In Sectie 3.4.3.1 wordt kort uitgelegd hoe het centrale thema voor de samenvatting bepaald wordt. De opbouw van de PR-graaf wordt gedetailleerd uitgelegd in Sectie 3.4.3.2. Ten slotte bespreekt Sectie 3.4.3.3 hoe de uiteindelijke samenvatting van een cluster uit de graaf gehaald wordt. Figuur 3.3 geeft een voorbeeld van hoe een dergelijke graaf er kan uitzien. De graaf in dit voorbeeld is opgebouwd uit drie tweets uit de wedstrijd Everton - Manchester City: • LUKAKUUU! EFC 1-0 MCFC Terrible defending by Lescott Hart should have done better • Hart should have done better, where have we heard that one before? 28 Figuur 3.3: Een PR-graaf opgebouwd uit drie tweets. De donkere knopen zijn knopen die niet-unieke inkomende of uitgaande links hebben. • LUKAKUUU! GREAT START! De werking van het PR-algoritme zal in de volgende deelsecties worden uitgelegd aan de hand van deze voorbeeldgraaf. 3.4.3.1 Selectie van een centraal thema Het bepalen van een centraal thema in een verzameling tweets is een complex probleem. Topic models (zie Sectie 2.2.1.2) zijn niet bruikbaar in deze context, aangezien ze een trainingsperiode vereisen. Die trainingsperiode zou extra vertraging veroorzaken in het systeem, wat niet wenselijk is. Net zoals bij clustering het geval was moet ook hier geopteerd worden voor een na¨ıeve aanpak. De in Sectie 3.4.1 voorgestelde TF-IDF weging kan hier een uitweg bieden. Die gewichten geven namelijk aan hoe dominant bepaalde termen zijn in een verzameling van tweets. De meest voor de hand liggende optie is dan ook om te kiezen voor de term die het grootste TF-IDF gewicht heeft. De keuze voor deze term als centraal thema heeft wel enkele gevolgen voor het verdere systeem. Zo is het noodzakelijk dat knopen in de graaf op dezelfde manier genormaliseerd zijn als wanneer de TF-IDF gewichten bepaald werden. Indien dit niet het geval is, zal het centrale thema niet teruggevonden worden in de graaf en wordt het onmogelijk om in een verdere stap een samenvattende zin te genereren. In de voorbeeldgraaf uit Figuur 3.3 zou ’hart’ bijvoorbeeld het centrale thema kunnen zijn. Een potenti¨ele zwakte van deze aanpak is dat de dominante termen, qua weging, vaak dezelfde zijn (denk bijvoorbeeld aan hashtags die niet als topic statements gekwalificeerd werden). Dit verhoogt het risico op (storende) herhalingen. 29 3.4.3.2 Opbouwen van de graaf Zoals in Sectie 3.4.3.1 reeds gezegd werd, bestaat de graaf uit knopen die woorden voorstellen en overgangen tussen deze knopen. Deze graaf maakt het mogelijk om stukken tekst uit verschillende tweets te combineren tot ´e´en zin. Figuur 3.3 toont een voorbeeldgraaf. De opbouw van de graaf wordt aan de hand van dit voorbeeld in verschillende, incrementele stappen uitgelegd. Eerst en vooral bespreken we de basisstructuur van de graaf. Om de graaf te representeren wordt gebruikgemaakt van twee datastructuren. Enerzijds is er een structuur die een knoop voorstelt (genaamd WordGraphNode), anderzijds is er een structuur voor de voorstelling van een overgang tussen twee knopen in de graaf (genaamd WordGraphArc). De graaf wordt voorgesteld als een mapping van namen van knopen op WordGraphNode datastructuren. Op die manier kan een knoop eenvoudig worden opgevraagd uit de graaf. Een WordGraphNode bevat een overzicht van alle inkomende en uitgaande links in de knoop. Dit overzicht houdt voor elke link bij wat de naam van de knoop aan het andere uiteinde van de link is en houdt een instantie van de WordGraphArc datastructuur bij. Deze datastructuur houdt de kenmerken van de link bij, zoals de naam van de knoop waarnaar de link wijst en het gewicht van de link. Wanneer een verzameling tweets samengevat moet worden, worden alle tweets rond een bepaald centraal thema uit de verzameling tweets gehaald. In de meest eenvoudige versie worden de tweets vervolgens gesplitst en genormaliseerd, zodat er geen hoofdletters en leestekens meer overblijven. Dit gebeurt tweet per tweet. Elk woord uit de gesplitste tweet wordt toegekend aan een knoop. Indien er nog geen knoop bestond voor dit woord, wordt een nieuwe knoop aangemaakt. Als er een voorafgaand woord in de tweet is, wordt vervolgens aan een inkomende link vanuit het voorgaande woord aan de knoop toegevoegd. Hetzelfde wordt gedaan voor een eventuele uitgaande link naar een volgend woord. Het gewicht van een inkomende link wordt bepaald door het aantal keren dat die link effectief voorkomt. Hoe meer tweets de twee woorden in kwestie dus na elkaar gebruiken, hoe groter het gewicht van de link tussen die twee woorden is. De graaf in Figuur 3.3 toont de basisstructuur die bekomen wordt. Zo komt de link tussen ’hart’ en ’should’ twee keer voor, nl. in de eerste en tweede tweet. Doordat alle woorden in de graaf genormaliseerd zijn, is de output van deze graaf moeilijk leesbaar. De output bevat immers geen hoofdletters of leestekens. Om dit probleem op te lossen, werd de WordGraphArc datastructuur uitgebreid. Naast het gewicht en de genormaliseerde naam van de knoop aan het uiteinde van de link, wordt een lijst met mogelijke representaties van dat genormaliseerde woord bijgehouden. Die representatielijst bevat 30 vormen van het woord in kwestie, zoals het eruit zag v´oo´r normalisatie. Een illustratie hiervan, aan de hand van de voorbeeldgraaf in Figuur 3.3, is dat de knoop met naam ’lukakuuu’ in de tweets eigenlijk geschreven was als ’LUKAKUUU!’. Beide links in die knoop zullen met andere woorden die representatie bevatten. Ook meerdere representaties zijn mogelijk, zoals bijvoorbeeld het geval is voor de link tussen ’done’ en ’better’. De knoop ’better’ wordt in de tweets namelijk eens geschreven als ’better’, maar ook eens als ’better,’. Op die manier worden leestekens ook meegenomen in de uitvoer. De toevoeging van representaties zorgt voor meer leesbaarheid in de uitvoer, terwijl de intrinsieke structuur van de graaf ongewijzigd blijft. Er wordt namelijk geen kwaliteit ingeboet op het vlak van mapping van licht verschillende woorden op ´e´enzelfde knoop. Toch zijn er nog steeds veel situaties waarin knopen slecht op elkaar mappen. Wanneer we bijvoorbeeld de graaf uit Figuur 3.3 beschouwen, is het perfect mogelijk dat Lukaku’s naam op een andere manier geschreven wordt. Wanneer de naam geschreven is als ’Lukakuu!’, zal die bijgevolg (na normalisatie tot ’lukakuu’) niet in dezelfde knoop terechtkomen als wanneer de naam geschreven wordt als ’lukakuuu’. Dit probleem wordt echter opgevangen door de normalisatiestap in de inhoudelijke filter (zie Sectie 3.2.2). Dankzij deze extra stap in de inhoudelijke filtering gaan er nog meer schrijfwijzen van ´e´enzelfde woord op dezelfde knoop in de graaf mappen. Dit komt de kwaliteit van de samenvatting enkel ten goede. Deze stap zal er dan ook voor zorgen dat de kans op combinatie van verschillende tweets verhoogt, doordat knopen in de graaf meer inkomende en uitgaande links zullen hebben. In de praktijk was het echter opvallend dat er nog steeds veel letterlijke tweets uit de graaf gehaald worden. Dit fenomeen wordt veroorzaakt door de retweets die voorbij de filterstap raakten. Zoals in Sectie 3.2.1 werd aangegeven, worden niet alle retweets verwijderd uit de stroom van tweets. Eerder werd reeds vermeld dat de weging van de links tussen twee woorden afhangt van hoe vaak die woorden na elkaar gebruikt werden in de tweets. Bijgevolg hebben de woordcombinaties die gebruikt worden in een (op korte tijd) massaal geretweete status een groot gewicht in de graaf. Retweets zijn met andere woorden te dominant tijdens de opbouw van de graaf. Om het belang van de retweets toch nog mee te nemen, maar hun dominantie grotendeels uit te schakelen, werd de weging van een retweet in de opbouw van de graaf verminderd met factor 10. Zo zal een link uit een status die 10 keer geretweet werd hetzelfde gewicht hebben als een link die gebruikt werd in twee unieke statussen. Figuur 3.4 geeft, aan de hand van twee voorbeeldknopen, weer hoe de PR-graaf uiteindelijk intern opgeslagen wordt. Deze graaf zou in het systeem als volgt bijgehouden worden worden: 31 Figuur 3.4: Een illustratie van de interne structuur van de PR-graaf. Map<String, WordGraphNode> graaf = {(nice -> nodeNice),(goal -> nodeGoal),...}, Hierbij zijn nodeNice en nodeGoal de WordGraphNode instanties zijn van de afgebeelde knopen. Deze instanties bevatten dan elk een map met inkomende links en een map met uitgaande links. Figuur 3.4 toont ook de inhoud van inkomende en uitgaande links (WordGraphArc instanties) voor beide knopen. 3.4.3.3 Samenvatting uit de graaf bepalen Wanneer de graaf is opgebouwd, rest ons enkel nog de laatste stap: de samenvatting afleiden uit de PR graaf. Die opbouw start vanuit het centrale thema dat bekomen werd in Sectie 3.4.3.1. Algoritme 2 beschrijft deze procedure in pseudocode. De effectieve opbouw van de zin begint bij het ophalen van de knoop die het centrale thema bevat. Vervolgens begint het algoritme aan een lus, voorgesteld vanaf lijn 6 tot en met lijn 20 in Algoritme 2. Die lus zorgt ervoor dat de samenvattende zin wordt uitgebreid door woorden vooraan of achteraan de zin toe te voegen. Dit proced´e loopt door zolang de zin niet aan een vooraf ingestelde maximale lengte zit, of tot wanneer de zin niet meer uitgebreid kan worden. In deze lus worden steeds het eerste en laatste woord van de zin bijgehouden. Deze zijn nodig om de inkomende en uitgaande links van de zin in de graaf te kunnen opvragen. Indien er nog inkomende en/of uitgaande links zijn, worden de lijsten hiervan opgehaald uit de respectievelijk eerste en laatste node van de huidig gevormde zin. De inkomende of uitgaande link met het hoogste gewicht wordt vervolgens gevolgd. Om te bepalen welke woordrepresentatie aan de outputzin wordt toegevoegd, wordt de lijst van mogelijke representaties die bij de link hoort opgehaald. De representatie die het meeste voorkomt wordt dan geselecteerd als aanvulling op de outputzin. Ten slotte worden de genomen links tussen het oude eerste (of laatste) woord en het nieuwe eerste (of laatste) woord verwijderd, zodat er geen oneindige lus kan optreden. Na deze stap 32 begint de volgende iteratie van de lus. Uiteindelijk wordt de gegenereerde samenvatting, indien nodig, nog voorzien van een hoofdletter aan het begin en een punt op het einde (lijn 21). Algoritme 2 Samenvatting bepalen uit de PR graaf Require: Graaf , T hema 1: Samenvatting ← T hema 2: HuidigeKnoop ← Graaf .get(T hema) 3: EersteKnoopV anZin ← T hema 4: LaatsteKnoopV anZin ← T hema 5: Lengte ← 1 6: while Lengte ≤ M axLengte and U itbreidingM ogelijk do 7: EersteKnoop ← Graaf .get(EersteKnoopV anZin) 8: LaatsteKnoop ← Graaf .get(LaatsteKnoopV anZin) 9: InkomendeLinks ← EersteKnoop.haalInkomendeLinksOp() 10: U itgaandeLinks ← LaatsteKnoop.haalUitgaandeLinksOp() 11: if Uitgaande en/of Inkomende links aanwezig then 12: Zoek link met grootste gewicht 13: Haal beste representatie voor die link op 14: Voeg representatie vooraan/achteraan de Samenvatting toe 15: Update EersteKnoopV anZin/LaatsteKnoopV anZin 16: Lengte ← Lengte + 1 17: else 18: U itbreidingM ogelijk ← f alse 19: end if 20: end while 21: Voeg, indien nodig, een hoofdletter aan het begin en een punt aan het eind van de zin toe 22: return Samenvatting 3.4.4 Besluit In Sectie 3.4 werden twee samenvattingstechnieken besproken: een selectietechniek en het PR-algoritme. Het is in deze masterproef de bedoeling om beide technieken te testen en hun prestaties te evalueren ten opzichte van de commentaar op televisie. Sectie 3.4.2 besprak de implementatie van de selectietechniek. Deze techniek is nuttig, maar tegelijk ook risicovol. Via deze techniek is het steeds zeker dat er enige samenhang in de gegenereerde zinnen zal zitten. Het risico is echter dat wanneer er eventueel spamtweets tot in deze stap geraken, die volledig in de samenvatting terecht kunnen komen. Sommige Twittergebruikers maken immers gebruik van de zogenaamde trending topics om spam, mede met behulp van zelf gegenereerde retweets, te verspreiden. Het spreekt 33 voor zich dat zulke tweets niet wenselijk zijn in een commentaarstroom. Het resultaat van deze techniek hangt dan ook sterk af van de filterstap. Wanneer bijvoorbeeld de inhoudelijke filter weggelaten zou worden, zouden er in quasi alle gegenereerde commentaren storende hyperlinks of hashtags voorkomen. Het toevoegen van een spamfilter zou het risico van deze methode wel kunnen wegnemen. De gewijzigde versie van het Phrase Reinforcement (PR) algoritme, waarvan de werking in Sectie 3.4.3 besproken werd, is minder vatbaar voor spam. Dit komt door de aangepaste weging van retweets. Er moeten namelijk al erg veel retweets optreden opdat een spamtweet invloed zou hebben op de samenvatting. Sharifi et al. [22] pasten het PRalgoritme voornamelijk toe op grote datasets. De beoogde toepassing in deze masterproef, voetbalcommentaar, werkt doorgaans met kleinere sets. Om beter te kunnen omgaan met die kleinere datasets werd het algoritme van Sharifi et al. [22] op twee punten aangepast. Enerzijds stellen Sharifi et al. voor om de PR graaf enkel op te bouwen rond het centrale thema. Tweets die m.a.w. het centrale thema niet bevatten, worden niet opgenomen in de graaf. Dit maakt de keuzemogelijkheden echter nog kleiner, waardoor er amper verschillen in gewichten optreden in de graaf en de gemaakte keuzes relatief willekeurig zijn. Het tweede punt waarop het algoritme afwijkt van de uitleg van [22] is het genereren van de samenvattende zin. Sharifi et al. stellen voor om enkel niet-unieke paden in de graaf te volgen bij het opbouwen van de zin. Dit komt erop neer dat er enkel links met een gewicht groter dan 1 genomen mogen worden. Uit experimenten bleek echter dat deze regel ervoor zorgde dat de lengte van de gegenereerde zinnen erg vaak te kort was (≤ 3 woorden). Daarom is er in deze masterproef voor gekozen om ook het volgen van unieke links toe te laten. Dit zorgt uiteraard wel voor een minder goede samenhang van de samenvatting. 3.5 Evaluatie Nadat alle individuele componenten van het generatiealgoritme uit dit hoofdstuk voorgesteld zijn, volgt een korte evaluatie. Tabellen 3.1 en 3.2 bevatten enkele resultaten die bekomen werden wanneer gebruikgemaakt werd van het in dit hoofdstuk beschreven basisalgoritme. Hier zien we al een duidelijk verschil tussen de implementatie die gebruik maakt van de selectietechniek (Tabel 3.1) en de implementatie die het Phrase Reinforcement algoritme gebruikt om samenvattingen te genereren (Tabel 3.2). Een opvallend aspect van de variant die PR gebruikt is dat er erg weinig samenhang in de gegenereerde tekst zit. Dit is enerzijds te wijten aan de gebrekkige clusterstap. De clusters zijn niet altijd even groot, waardoor er minder sterke links in de graaf zijn, en de gegenereerde zin redelijk willekeurig is. Zoals reeds vermeld werd in Sectie 3.3.3, hangt 34 Tabel 3.1: Commentaar gegenereerd aan de hand van de selectietechniek voor de eerste minuten uit de wedstrijd Arsenal-Liverpool. Tijd 0’00” 0’30” 1’00” 1’30” 2’00” 2’30” Commentaar Initialisatie algoritme Game on! COME ON YOU GUNNERS! arsenal. I am so nervous for the AFCvLFC game. Let’s go Liverpool LFC YNWA ? Arsenal vs Liverpool. Come on you Reds! Liverpool liverpool liverpool liverpool liverpool *chanting voice*. Time to watch Arsenal to beat Liverpool and stay top of the league. Nervous for this Liverpool game ? .and now, the game of the day. Liverpool! Come on you mighty Reds! KICK-OFF Liverpool get our last BPL match under way on Saturday at the Emirates Stadium against Arsenal. Liverpool vs Arsenal. COME ON LIVERPOOL. ? ? Arsenal - Liverpool! ? ?! Let the game begin! Arsenal vs Liverpool. Kick off let’s go lfc LFC. Go gunners ! Arsenal: We’re underway at the Emirates. Come on you Gunners! 0-0 (1). Tabel 3.2: Commentaar gegenereerd aan de hand van het PR algoritme voor de eerste minuten uit de wedstrijd Arsenal-Liverpool. Tijd 0’00” 0’30” 1’00” 1’30” 2’00” 2’30” Commentaar Initialisatie algoritme Game on! Come on the table. In the bench. Man in BBQ sauce last night. for this is the teams emerge. ? ? : ? realmadrid FCBarcelona CFC AFC LFC vs. Liverpool LFC YNWA Let’s go. Here we Go Arsenal V liverpool liverpool ? ? : LIVE ford Saturday night in. Off is moments away in the game of the season so far at the best. Game. Come on arsenal ! SNF LFC YNWA AFCVLFC LFC Come. Come on you reds! walk alone <3. Hoping for the teams emerge. AFCvLFC nerve wrecking. On LFC lets do this Game on Come on arsenal COME in my hand,cheeky score. Underway at the Emirates Stadium against Arsenal vs Liverpool. ? ? - Liverpool! get our. Massive Game on the Emirates. Come on arsenal ! LFC YNWA ARSLIV LIVE on you. Lets do this game I reckon our bench is it! must win this. is up. ”Arsenal: We’re underway at the Emirates. Come on you Gunners! 0-0 (1). Hoping for a draw would be a good soccer dis evening! Top of the game begin between LFC let’s go go Liverpool. ? ? Like Obama. 35 het resultaat van het k-means algoritme ook af van de gekozen initi¨ele clusters, wat deze clusteringstechniek nog onbetrouwbaarder maakt. Anderzijds is de gebrekkige samenhang van het verhaal ook een gevolg van het feit dat tweets bij de opbouw van de graaf op witruimte gesplitst worden. Bepaalde woorden die samen horen (bijvoorbeeld ’Manchester United’) worden hierdoor opgesplitst over twee knopen. Bijgevolg bestaat de kans dat het geheel van die twee woorden wordt weggegooid en er dus belangrijke informatie verloren gaat. Tabel 3.2 toont met ’Come on the table.’ een mooi voorbeeld van een foute samenvoeging van deelzinnen. Verder is het ook duidelijk dat er in een voetbalwedstrijd niet elke 30 seconden verschillende gebeurtenissen zijn en er dus simpelweg niet genoeg samenhangende tweets binnenkomen op deze 30 seconden om een kwalitatieve PR graaf te bekomen. De selectietechniek verbergt deze gebreken, aangezien er hoe dan ook een tweet geselecteerd wordt, zelfs al bevat een cluster slechts ´e´en tweet. Hoewel je dit als eindgebruiker niet merkt, is het niet de bedoeling dat ’rustige’ momenten in de wedstrijd even veel aandacht krijgen als belangrijke momenten. Wat betreft de samenhang van het verhaal is de selectietechniek afhankelijk van de gebruiker die de status deelde, maar over het algemeen geeft dit ook geen problemen. Het algoritme is voor beide versies snel genoeg om in (bijna) ware tijd te werken. De totale vertraging ten opzichte van de echte gebeurtenissen blijft immers beperkt. De vertraging bestaat uit drie componenten: de reactiesnelheid van Twitteraars, de grootte van het werkingsinterval (voor deze evaluatie 30 seconden) en ten slotte de uitvoeringstijd van de filter-, cluster- en samenvattingsstap. De reactiesnelheid van Twitteraars hangt af van de manier waarop ze de wedstrijd bekijken. Mensen die op televisie kijken, kijken namelijk al met enige vertraging naar de wedstrijd. Als we er echter vanuit gaan dat alle tweets uit het stadion komen, blijft deze vertraging beperkt. De effectieve uitvoering van het algoritme (filteren, clusteren en samenvatten) duurt typisch maximaal vijf seconden. Bovenop die vijf seconden komt dan nog de grootte van het interval. Dit alles geeft samen een vertraging die kleiner is dan ´e´en minuut, wat aanvaardbaar is. Televisie- en radio-uitzendingen komen namelijk zelf ook steeds met enige vertraging in de huiskamers door de regie en transmissie, waardoor de beelden weinig of niet vertraagd moeten worden. 3.6 Besluit In dit hoofdstuk werd een generatiealgoritme voor voetbalcommentaar op basis van een vast tijdsinterval voorgesteld. Dit algoritme doorloopt, volgens een vast tijdsinterval, 36 drie stappen. De tweets die tijdens het interval binnenkwamen, worden eerst gefilterd. Vervolgens worden de resterende tweets geclusterd en worden de resulterende clusters samengevat. De eerste stap, de filterstap, werd besproken in Sectie 3.2. In Sectie 3.3 werd de clusterstap besproken. Hier werden twee mogelijke clusteringstechnieken besproken: de hi¨erarchische aanpak en het k-means algoritme. Uit experimenten bleek dat enkel het k-means algoritme geschikt is voor een toepassing in (bijna) ware tijd. Ook om de clusters samen te vatten (zie Sectie 3.4) werden twee mogelijke manieren voorgesteld. Enerzijds is er de selectietechniek, anderzijds het Phrase Reinforcement (PR) algoritme. Beide technieken bleken hun voor- en nadelen te hebben. Zo blijkt uit Sectie 3.5 dat de selectietechniek tot meer samenhangende samenvattingen leidt dan het PR-algoritme, maar op zijn beurt dan weer gevoeliger is aan spam. De keuze voor een beperkte evaluatie is het gevolg van de bedenkelijke kwaliteit van de commentaarstroom, zoals ook blijkt in Sectie 3.5. Kiezen om te werken volgens een vast tijdsinterval bleek een na¨ıeve benadering te zijn. Deze bevindingen hebben ertoe aangezet om over te schakelen naar een tweede algoritme voor de generatie van commentaar. Dit alternatief algoritme probeert de problemen die in Sectie 3.5 werden aangekaart op te lossen met behulp van variabele timing en real-time clustering. De werking van dit systeem komt uitvoerig aan bod in Hoofdstuk 4. 37 Hoofdstuk 4 Generatiealgoritme voor voetbalcommentaar met clustering in ware tijd Hoofdstuk 3 besprak reeds een generatiealgoritme voor voetbalcommentaar. Dit algoritme maakt gebruik van een vast tijdsinterval. Het daar beschreven idee was echter duidelijk nog voor verbetering vatbaar. Zo gaat dit algoritme er bijvoorbeeld vanuit dat er steeds een vast aantal clusters in de Twitterstroom te vinden is. Ook de idee om te werken met een vast tijdsinterval bleek na¨ıef: momenten waarop er veel actie is op Twitter krijgen in de gegenereerde commentaarstroom exact evenveel aandacht als stille momenten. Dit hoofdstuk beschrijft een generatiealgoritme dat een uitbreiding is op de versie uit Hoofdstuk 3. Het verbeterde algoritme tracht de zwaktes die in het vorige hoofdstuk werden beschreven aan te pakken. Sectie 4.1 beschrijft de algemene vorm van het nieuwe algoritme. De filterstap uit Hoofdstuk 3 bleef bewaard in dit systeem. Secties 4.2 en 4.3 beschrijven de vernieuwingen op het vlak van clustering en samenvatten van tweets. In Sectie 4.4 volgen enkele conclusies. 4.1 Basisidee achter het algoritme Zoals hiervoor reeds vermeld werd, heeft dit algoritme tot doel om de zwaktes van het algoritme uit Hoofdstuk 3 weg te werken. De uitbreiding die in dit hoofdstuk wordt besproken maakt daarom gebruik van een variabele timing. Elke seconde worden de tweets die gedurende die seconde binnenkwamen gefilterd en toegekend aan een cluster. Nadat elke tweet (die voorbij de filterstap geraakte) toegekend is aan een cluster, worden de aanwezige clusters geanalyseerd. Dit houdt in dat per cluster beslist wordt of de cluster in kwestie al dan niet verwijderd moet worden. Vervolgens moet het systeem bepalen of 38 de verwijderde cluster samengevat moet worden. Om het mechanisme nog verder uit te breiden werd er ook een mechanisme voorzien om ’stille’ momenten op te vangen. Dit mechanisme zorgt ervoor dat de commentator een willekeurig feit over een concept in de tweets genereert. De exacte werking van het clusteringsmechanisme en het samenvatten van de clusters wordt verderop besproken in deze masterproef, in Secties 4.2 en 4.3. Figuur 4.1 illustreert de werking van het algoritme. 4.2 Clusteren van tweets Aangezien dit generatiealgoritme met een variabele timing werkt, moet het clusteringsmechanisme ook een verandering ondergaan. Het feit dat de tweets per seconde verwerkt moeten worden, betekent ook dat de toekenning van de tweets aan een cluster binnen de seconde moet kunnen gebeuren. In de literatuur met betrekking tot First Story Detection (zie Sectie 2.2.1.4) werd reeds een gelijkaardig clusteringsprobleem besproken. Het clusteringsmechanisme dat gekozen werd pakt dit probleem echter op een andere manier aan. Het clusteringsmechanisme dat door dit generatiealgoritme gebruikt wordt, heeft als sterkte dat er op voorhand geen aantal clusters opgegeven moet worden. Clusters worden met andere woorden aangemaakt en verwijderd wanneer nodig. Elke inkomende tweet wordt hierbij vergeleken met de aanwezige clusters. Indien uit deze vergelijking blijkt dat er geen enkele cluster dicht genoeg aanleunt bij de tweet, cre¨eert het systeem een nieuwe cluster. In het andere geval vervoegt de tweet de meest passende cluster. Aangezien de vergelijking binnen aanvaardbare tijd tot een goed einde gebracht moet worden, is het onmogelijk om elke tweet in elke cluster te beschouwen. Daarom kozen we ervoor om per cluster een kern van unieke tweets bij te houden. Deze kern bevat slechts een fractie van de tweets in de cluster en wordt opgebouwd tijdens de opbouw van de cluster. De eerste k unieke tweets die aan de cluster worden toegevoegd, worden lid van de kern. Deze variabele werd vastgelegd op 20. Met unieke tweets wordt bedoeld dat retweets niet aanvaard worden. Op die manier proberen we de diversiteit in de cluster wat hoger te houden. Om inkomende tweets eenvoudig met clusters te kunnen vergelijken, houdt een cluster ook de gemiddelde tweetvector van de clusterkern bij. Die gemiddelde vector wordt ook steeds meteen ge¨ updatet wanneer een nieuwe tweet in de kern terecht komt. De totale werking van het clusteringssysteem wordt in pseudocode ge¨ıllustreerd in Algoritme 3. 39 (a) De eerste seconde van het algoritme... (b) Enkele seconden later... Figuur 4.1: Een illustratie van de werking van het algoritme. In Figuur 4.1(a) zien we enkele tweets binnenkomen in de eerste seconde. Deze tweets worden gefilterd en vervolgens toegekend aan clusters. Deze twee clusters worden tijdens de toekenning gecre¨eerd. Enkele seconden later, in Figuur 4.1(b), zien we dat de eerste cluster intussen inactief geworden is en dat een nieuwe derde cluster aangemaakt wordt. De inactieve eerste cluster wordt verwijderd en (eventueel) samengevat. 40 Algoritme 3 Tweets uit de afgelopen seconde toekennen aan een cluster. Require: Set T weets 1: for all T weet in T weets do 2: BesteCluster ←NULL 3: BesteGelijkenis ← 0 4: for all Cluster in ActieveClusters do 5: if Gelijkenis(T weet, ClusterKern) > BesteGelijkenis then 6: BesteCluster ← Cluster 7: BesteGelijkenis ← Gelijkenis(T weet, ClusterKern) 8: end if 9: end for 10: if BesteGelijkenis > M inimaleGelijkenis then 11: Voeg T weet toe aan BesteCluster (en eventueel aan de kern van deze cluster) 12: else 13: Start nieuwe cluster met T weet 14: end if 15: end for 4.3 Samenvatten van tweets De grootste problemen met het eerste generatiealgoritme lagen, zoals eerder vermeld, niet bij het samenvatten van de tweets. De selectietechniek lijkt geen betere resultaten te kunnen behalen dan voorheen, aangezien de uitvoer daarvan quasi volledig afhangt van de filterstap en de aanwezige clusters. De resultaten die in Sectie 3.6 werden besproken toonden echter wel aan dat er relatief weinig samenhang in de output van het PR algoritme zat. Daarom werd het aangepaste PR algoritme uit Hoofdstuk 3 tijdens de ontwikkeling van dit uitgebreide generatiealgoritme verbeterd. Deze verbetering wordt besproken in Sectie 4.3.1. Aangezien de uitgebreide versie van het generatiealgoritme met variabele timing werkt, vergroot ook het risico op ’stille’ momenten in de commentaarstroom. Om die momenten op te vullen, werd ook een systeem gecre¨eerd dat aan de wedstrijd gerelateerde, willekeurige feiten van het internet haalt. Dit systeem wordt in Sectie 4.3.2 uit de doeken gedaan. Een ander gevolg van de variabele timing is dat het systeem nu voortdurend moet controleren wanneer een cluster samengevat moet worden. Dit controlesysteem is erg belangrijk voor de samenvattingsstap en wordt gedetailleerd besproken in Sectie 4.3.3. 4.3.1 Aanpassing van het PR algoritme Een algemeen probleem met de eerste versie van het PR algoritme was dat de uitvoer weinig samenhang vertoonde. Dit probleem wordt veroorzaakt door het feit dat elke knoop in de PR graaf slechts ´e´en woord bevat. De graaf bestaat met andere woorden uitsluitend uit unigrams. Deze aanpak kan er echter voor zorgen dat woorden die samen horen worden 41 opgesplitst in de uiteindelijke samenvatting. Om dit probleem op te lossen, werd gebruik gemaakt van NLP tools, die reeds besproken werden in Sectie 2.3 van de literatuurstudie. Concreet kan dit probleem opgelost worden met behulp van een PoS tagger en een chunker. In dit systeem werd gebruik gemaakt van de Stanford PoS tagger [28, 29], in combinatie met het Twitter-model uit [30] en de OpenNLP chunker [35]. De idee is om in dit systeem de knopen in de PR graaf voor te stellen als n-grams. Daardoor worden woorden die samen horen ook samen gehouden in de graaf. Hierdoor wordt de opbouw van de graaf licht gewijzigd. In plaats van de tweet in het begin te splitsen op witruimte, krijgen de woorden in de tweets nu eerst een PoS label van de PoS tagger. Een PoS label geeft de rol van een woord binnen een zin aan. Het duidt aan of een woord een werkwoord, zelfstandig naamwoord,... is. De labels van die tweet worden vervolgens door de chunker verwerkt. De output van de chunker geeft dan aan welke woorden samen horen. Het enige probleem dat dan nog rest, is dat sommige woordsequenties intrinsiek dezelfde zijn, maar anders verwoord zijn. Zo betekenen ’in the goal’ en ’in goal’ eigenlijk hetzelfde, maar zouden deze n-grams toch in andere knopen in de graaf terechtkomen. Om dit probleem te beperken worden de ngrams die het resultaat zijn van de chunker nog eens gefilterd, zodat bij langere sequenties enkel werkwoorden en zelfstandige naamwoorden worden overgehouden. Hierdoor zullen bijvoorbeeld de sequenties ’beautiful goal’ en ’nice goal’ op ´e´enzelfde knoop met naam ’goal’ mappen in de graaf. Wanneer een n-gram echter geen werkwoorden of zelfstandige naamwoorden bevat, wordt de sequentie in haar geheel in een knoop opgeslagen. De verdere opbouw van de graaf verloopt zoals beschreven in Sectie 3.4.3.2. Door deze aanpassing moet ook de bepaling van het centrale thema aangepast worden. Het centrale thema moet namelijk nog steeds kunnen mappen op de namen van de knopen. Hier werd echter ook dezelfde techniek gebruikt als in 3.4.3.1. Het enige verschil is dat nu de n-grams in een tweet als term worden beschouwd, waardoor we eigenlijk een mapping tussen n-grams en hun gewicht verkrijgen, in plaats van een mapping tussen unigrams en hun gewicht. 4.3.2 Commentaar verrijken met willekeurige feiten Een tweede toevoeging aan de samenvattingsstap zijn willekeurige feiten. Aangezien de verbeterde versie van het generatiealgoritme met een variabele timing werkt, is het niet ondenkbaar dat er soms stille momenten zijn in de gegenereerde commentaarstroom. Wanneer een stil moment zich voordoet, is het opportuun om de commentaar te verrijken met willekeurige, maar gerelateerde weetjes. Het systeem dat hiertoe werd ontwikkeld in deze 42 masterproef is slechts een proof-of-concept en is dus nog voor verbetering vatbaar. Wanneer het generatiealgoritme een stil moment detecteert, zal het een nieuwe programmadraad opstarten, die aan de slag gaat met de huidige actieve clusters. In een eerste stap voegt deze draad alle tweets uit alle actieve clusters samen. Al deze tweets worden vervolgens samengevoegd tot ´e´en lange tekst. Met behulp van de DBPedia Spotlight web service [43] gaan we in de volgende stap op zoek naar concepten in de tekst. Die concepten worden afgeleid uit concepten die bestaan op DBPedia [44]. Uit de bekomen lijst van concepten wordt dan het meest voorkomende concept gekozen. In een laatste stap wordt het gekozen concept opgezocht op DBPedia en worden de eerste twee zinnen uit het Engelstalige abstract over dit concept toegevoegd aan de commentaarstroom. Deze aanpak is echter niet voldoende gesofisticeerd, aangezien het systeem steeds voor het meest voorkomende concept kiest. Dit concept zal vaak hetzelfde zijn: in het geval van de voetbalcommentator is het gekozen concept bijna altijd ´e´en van de twee teams. Ook het feit dat we steevast voor de eerste twee zinnen uit het abstract kiezen is na¨ıef. Doordat meestal dezelfde concepten terugkomen, wordt ook steeds dezelfde tekst als willekeurig feit gekozen. 4.3.3 Beslissen wanneer een cluster samengevat moet worden Een laatste, maar daarom niet minder belangrijke toevoeging, is het controleren van de clusters. De idee hierachter is dat we in elke iteratie van het verbeterde generatiealgoritme moeten controleren welke clusters verwijderd en eventueel samengevat moeten worden. Deze extra stap is een gevolg van het clusteren in ware tijd. In het oude systeem was deze beslissing niet nodig, aangezien elke gegenereerde cluster daar samengevat werd. Dit beslissingsmechanisme treedt in werking wanneer de clusterstap afgerond is. Wanneer alle statussen uit de afgelopen seconde uiteindelijk toegekend zijn aan een cluster, wordt de informatie over de aanwezige clusters bijgewerkt. Die informatie is van groot belang bij de beslissing of de cluster in kwestie verwijderd en eventueel samengevat moet worden. Een omschrijving van de hiervoor gebruikte variabelen en hun functie in de beslissingsprocedure volgt hier: • Aantal verwerkte tweets sinds creatie van de cluster Deze variabele houdt bij hoeveel tweets reeds door het hele algoritme werden verwerkt sinds de creatie van de cluster in kwestie. Aan de hand van dit getal kan bepaald worden hoe belangrijk de cluster in kwestie is ten opzichte van de hele stroom van tweets. De graad van belang kan gemeten worden door de grootte van 43 de cluster te delen door deze parameter. Deze graad van belang is tevens een indicator voor de activiteit van een cluster. Een cluster die niet langer actief is kan worden verwijderd en eventueel worden samengevat. • Aantal seconden dat de cluster actief is De variabele die de levensduur van een cluster meet, wordt gebruikt om ervoor te zorgen dat dominante clusters ook ooit worden samengevat. Het kan namelijk gebeuren dat ´e´en cluster quasi alle statussen toegewezen krijgt en bijgevolg voor een lange tijd als actief wordt aanzien. Als het systeem in dat geval moet wachten tot de cluster inactief wordt, loopt de commentaar in kwestie een onaanvaardbare vertraging op ten opzichte van de beschreven gebeurtenis. Dit probleem wordt opgelost door een bovengrens te zetten op de levensduur van de cluster. • Aantal opeenvolgende iteraties waarin de cluster niet meer significant is Deze variabele houdt bij gedurende hoeveel opeenvolgende iteraties de cluster in kwestie niet langer een significant deel van de Twitterstroom uitmaakte. Deze variabele werd in het leven geroepen om clusters die rond een opgelegde significantiegrens schommelen, niet meteen te verwijderen. Naast deze variabelen, zijn er ook verschillende parameters betrokken in de implementatie van de beslissingsprocedure. Deze parameters zijn op te delen in twee categorie¨en. Enerzijds zijn er de parameters die optreden als trigger om een cluster te verwijderen en samen te vatten. Anderzijds zijn er ook nog twee parameters die bepalen wanneer een willekeurig weetje gegenereerd moet worden. Daarnaast is er ook een parameter die de grootte van de kern van de cluster bepaalt, zoals reeds vermeld werd in Sectie 3. De parameters die optreden tijdens de beslissing om over te gaan tot verwijdering en eventueel samenvatting zijn af te leiden uit de hierboven besproken variabelen. Een kort overzicht: • Minimaal vereiste clustersignificantie Deze parameter bepaalt een ondergrens voor de significantie van een cluster opdat die cluster actief zou blijven. Wanneer de significantie onder deze grens zakt en gedurende een bepaalde tijd laag blijft, kan de cluster verwijderd worden. Gekozen parameterwaarde: 30%. Deze waarde is op experimentele wijze bekomen. • Aantal opeenvolgende iteraties waarin de cluster niet significant is, alvorens over te gaan tot verwijdering Dit aantal iteraties bepaalt in hoeveel opeenvolgende iteraties de significantie van de cluster onder de ondergrens moet liggen vooraleer die cluster verwijderd wordt. Gekozen parameterwaarde: 15 iteraties (seconden). Op deze manier worden uitlopers van pieken in het tweetvolume nog meegenomen in de cluster. 44 • Maximale levensduur van een cluster Een tweede reden om over te gaan tot verwijdering is een te lange levensduur. Wanneer een cluster reeds langer bestaat dan deze bovengrens, wordt overgegaan tot verwijdering van de cluster. Gekozen parameterwaarde: 30 seconden. Deze waarde werd zo gekozen dat de maximale vertraging op het systeem niet groter zou zijn dan bij het eerste generatiealgoritme. • Vereiste clustergrootte om over te gaan tot samenvatting Eens de beslissing genomen is om een cluster te verwijderen, moet nog beslist worden of die cluster al dan niet samengevat moet worden. Wanneer de cluster in kwestie meer tweets bevat dan deze ondergrens wordt de cluster samengevat. Gekozen parameterwaarde: 5 tweets. Deze parameter is de meest onzekere en hangt af van het volume van de Twitterstroom. Hoe meer tweets er binnenkomen, hoe groter de clusters worden en hoe selectiever we kunnen zijn. De parameters die meespelen in de beslissing om een willekeurig feit te genereren zijn de volgende: • Maximale stilte na een samengevatte cluster Deze parameter bepaalt hoe lang het algoritme maximaal mag wachten alvorens een willekeurig feit te genereren. Deze tijd wordt in het algoritme gemeten vanaf het ogenblik dat de generatie van de samenvatting begon. Gekozen parameterwaarde: 7 seconden. Gemiddeld duurt het 4 seconden om een tweet voor te lezen.1 Reken hierbij enkele extra verwerkingsseconden en we komen aan 7 seconden. • Maximale stilte na een willekeurig feit Omdat het over het algemeen wat langer duurt om willekeurige feiten te lezen of voor te lezen, is er ook een aparte parameter om te beslissen hoe lang er gewacht moet worden tussen het genereren van twee willekeurige feiten. De werking hiervan is gelijkaardig als bij de vorige parameter. Gekozen parameterwaarde: 15 seconden. Zoals hierboven reeds vermeld, is een groter tijdsvenster aangewezen voor willekeurige feiten. Nu alle parameters en variabelen die een rol spelen in het algoritme gekend zijn, kan het beslissingsproces ook in detail uitgelegd worden. Algoritme 4 geeft dit proces weer in pseudocode. Wanneer de clusterstap afgelopen is, worden alle clusters ´e´en voor ´e´en overlopen. Eerst 1 Deze waarde werd bekomen door een experimentele test met typische voetbaltweets. 45 worden de clustervariabelen van de cluster in kwestie bijgewerkt, zoals reeds vermeld werd. Nadat deze variabelen bijgewerkt zijn, controleert het algoritme of er voldaan is aan (minstens) ´e´en van de voorwaarden voor verwijdering. Dit is het geval wanneer de maximale levensduur van de cluster overschreden is, of wanneer de cluster reeds een bepaalde tijd niet meer significant is. Als dat het geval is, moet enkel nog worden nagegaan of de cluster in kwestie groot genoeg is om ook samen te vatten. Wanneer een cluster wordt samengevat, wordt meteen ook de starttijd van de generatie opgeslagen. Eens elke cluster gecontroleerd en eventueel verwijderd en samengevat is, controleert het systeem of de commentaarstroom al dan niet in een stil moment zit. Hiervoor wordt de opgeslagen starttijd van de laatste samengevatte cluster gebruikt. Wanneer dit moment reeds lang genoeg geleden is, wordt een willekeurig feit gegenereerd. Hierbij moet wel een onderscheid gemaakt worden tussen de aard van de laatst gegenereerde tekst in de commentaarstroom. Een willekeurig feit is doorgaans langer dan een zin die uit tweets gegenereerd werd. Bijgevolg mag de tijd die verstrijkt tussen de generatie van twee willekeurige feiten wat groter zijn dan de tijd tussen de generatie van een samenvatting en een willekeurig feit. Algoritme 4 Samenvatten van clusters en genereren van willekeurige feiten. Require: Set ActieveClusters 1: for all Cluster in ActieveClusters do 2: Update clustervariabelen 3: if ClusterLevensduur > M axLevensduur or ClusterInsignif icantieT eller > M axInsignif icantieT ijd then 4: if ClusterGrootte > M inimaleGrootte then 5: Start samenvattingsdraad op 6: LaatsteSamenvattingT ijd ← HuidigeT ijd 7: LaatsteF eitT ijd ← 0 8: end if 9: Verwijder Cluster 10: end if 11: end for 12: if (LaatsteSamenvattingT ijd 6= 0 and T ijd − LaatsteSamenvattingT ijd > M axStilteN aSamenvatting) or (LaatsteF eitT ijd 6= 0 and T ijd − LaatsteF eitT ijd > M axStilteN aF eit) then 13: Genereer willekeurig feit 14: LaatsteF eitT ijd ← HuidigeT ijd 15: LaatsteSamenvattingT ijd ← 0 16: end if 46 4.4 Besluit In dit hoofdstuk werd een uitbreiding op het algoritme uit Hoofdstuk 3 besproken. Deze uitbreiding maakt niet langer gebruik van een vast tijdsinterval, maar clustert de inkomende tweets in ware tijd. Elke tweet die binnenkomt wordt de volgende seconde gefilterd en toegevoegd aan een cluster. Ook het samenvatten van clusters gebeurt op uiteenlopende momenten, afhankelijk van een reeks clustereigenschappen, zoals besproken in Sectie 4.3.3. Daarenboven voegt dit algoritme willekeurige feiten toe aan de commentaarstroom. Op die manier kunnen stille momenten in de commentaarstroom opgevangen worden. Dankzij deze aanpassingen worden verscheidene zwaktes van het eerste generatiealgoritme weggewerkt. Ook wat betreft de uitvoeringstijd doet dit generatiealgoritme beter dan de versie uit Hoofdstuk 3. Bij deze aanpak is de vaste intervaltijd namelijk uitgeschakeld. Wanneer de parameter voor de maximale levensduur van een cluster gelijkgesteld wordt aan de intervalgrootte uit het eerdere algoritme, is dit generatiealgoritme steeds minstens even snel. Deze versie is echter meer geschikt voor een toepassing in ware tijd, aangezien er vaak ook minder tijd zal verstrijken alvorens een samenvatting gegenereerd wordt. Een ander sterk punt ten opzichte van het generatiealgoritme op basis van een vast tijdsinterval is het resultaat van de clusterstap. In dit algoritme zullen sterk afwijkende tweets namelijk terecht komen in aparte, afgezonderde clusters. Die clusters zullen doorgaans erg klein zijn en dus niet samengevat worden. Bijgevolg hebben deze tweets geen invloed op de commentaarstroom. Toch heeft het systeem uit dit hoofdstuk ook enkele nadelen. Zo werd in Sectie 3.4.4 de grootte van de datasets reeds aangehaald als probleem bij de samenvattingsalgoritmen. Dit probleem kan echter niet opgelost worden door het generatiealgoritme uit dit hoofdstuk. Een tweede nadeel is dat het in dit systeem moeilijk te controleren is hoeveel uitvoer het generatiealgoritme genereert. Bijgevolg is het mogelijk dat er meer tekst gegenereerd wordt dan er uitgesproken kan worden op diezelfde tijd. Dit probleem is in het eerste systeem beter te controleren, aangezien dat systeem toelaat om te bepalen hoeveel clusters (en dus ook samenvattende zinnen) er per keer gevormd moeten worden. 47 Hoofdstuk 5 Van gegenereerde tekst naar een volledige commentator Om een compleet commentaarsysteem te cre¨eren, werd het systeem uit Hoofdstuk 4 verder uitgebreid. Het systeem zal nu ook de gegenereerde commentaar uitspreken. Het is bij voetbalwedstrijden namelijk altijd leuk om naast geluid ook beeld te hebben. Hiertoe werd een systeem ontwikkeld dat de gegenereerde commentaar omzet naar spraak. Dit systeem wordt besproken in Sectie 5.1. Om dit alles te demonstreren werd een demo-applicatie ontwikkeld. Deze applicatie laat toe om de gegenereerde commentaar te beluisteren naast de beelden van de voetbalwedstrijd in kwestie. In deze stap wordt ook de gepersonaliseerde toets toegevoegd aan de commentaarstroom. Daarenboven laat de applicatie toe om, gegeven bepaalde trefwoorden, een rechtstreekse Twitterstroom te becommentari¨eren. Deze functionaliteit wordt kort besproken in Sectie 5.2. 5.1 Omzetting van tekst naar spraak Een belangrijke component om tot een volledige commentator te komen is het uitspreken van de gegenereerde commentaar. Het zelf ontwikkelen van een text-to-speech systeem zou te ver afwijken van de doelstelling van deze masterproef. Daarom zal hiervoor gebruikgemaakt worden van een bestaand systeem. Toch komen in deze stap nog enkele andere specifieke bewerkingen aan bod. Zo is het bijvoorbeeld belangrijk dat de commentator genoeg tijd heeft om gegenereerde tekst uit te spreken (en dus geen achterstand oploopt ten opzichte van de Twitterstroom). Sectie 5.1.1 beschrijft de keuzes en eigenheden van deze component. Aangezien het systeem dat in deze masterproef wordt voorgesteld met sociale media werkt, is het ook interessant om emoties te betrekken in de uitgesproken commentaar. De mogelijkheden hieromtrent worden besproken in Sectie 5.1.2. 48 5.1.1 Werking Zoals reeds in de inleiding van dit hoofdstuk werd vermeld, wordt in deze masterproef gebruik gemaakt van een reeds beschikbaar text-to-speech systeem. In Sectie 2.4 werd een overzicht gegeven van beschikbare webservices. Hieruit concludeerden we dat Mary TTS ([40]) als duidelijke winnaar uit de vergelijking kwam. Deze web service stelt meerdere stemmen ter beschikking en laat toe om geluidsparameters te be¨ınvloeden. Het is ook mogelijk om deze service op een eigen (lokale) server te installeren, zodat het systeem niet afhankelijk is van een externe server. Het volstaat echter niet om zomaar alle gegenereerde commentaar door te sturen naar deze web service. Het generatiealgoritme voor commentaar controleert namelijk niet hoeveel tekst er gegenereerd wordt. Bijgevolg is het mogelijk dat er meer tekst gegenereerd wordt dan op dezelfde tijd uitgesproken kan worden. Hiertoe werd een systeem ge¨ımplementeerd dat gebruik maakt van een wachtlijn. Dit systeem loopt in een aparte programmadraad en ontvangt de uit te spreken tekst van de effectieve samenvattingsdraden. De ontvangen tekst wordt vervolgens opgeslagen in een wachtlijn. Deze wachtlijn heeft enkele bijzondere kenmerken: • Wanneer tijdens het voorlezen van een willekeurig feit een samenvatting van een cluster binnenkomt, moet het voorlezen van het willekeurig feit afgebroken worden en de meer relevante samenvatting voorgelezen worden. • Wanneer er zich meerdere teksten in de wachtlijn bevinden, worden in de regel de recentste berichten eerst gelezen. • Wanneer er zich echter een iets oudere1 tekst met hogere prioriteit in de wachtlijn bevindt, wordt dit bericht eerder gelezen. Willekeurige feiten hebben de laagste prioriteit. Teksten die gegenereerd werden uit grote clusters krijgen de hoogste prioriteit. • Wanneer een bericht reeds langer dan 30 seconden in de wachtlijn zit, wordt het verwijderd. We willen namelijk niet dat het commentaarsysteem op een later, stil moment oude informatie begint voor te lezen. 1 Hiervoor wordt een verschil van maximaal 10 seconden geaccepteerd. Deze waarde kan verklaard worden door het feit dat een gemiddelde tweet op 4 seconden voorgelezen kan worden. Wanneer een prioritair bericht binnenkomt vlak nadat het systeem een andere tekst is beginnen lezen, kan het dus nog wel even duur eer het prioritair bericht aan de beurt is. 49 5.1.2 Toevoegen van emotie Voetbal wekt steeds veel emotie op. Dat uit zich ook in de tweets van voetbalfans. Aangezien deze masterproef als doel heeft om een gepersonaliseerd commentaarsysteem af te leveren, vormt het toevoegen van sentiment aan de gesproken commentaar een meerwaarde. Sentimentanalyse is echter niet het hoofddoel van deze masterproef. Daarom werd er voor deze stap gekozen om een proof-of-concept te bouwen. Dit systeem voert een eenvoudige analyse van de gegenereerde commentaar uit: het telt het aantal hoofdletters in de zin. Wanneer meer dan 30% van de tekens in de tekst een hoofdletter is, wordt het commentaarvolume verdubbeld. Op die manier zal de commentator luider spreken wanneer Twittergebruikers ’roepen’. In Sectie 2.4 werd reeds vermeld dat de ontwikkelaars van Mary TTS nog volop onderzoek voeren naar het voorzien van emoties in de stemmen. Deze implementatie is echter nog niet beschikbaar voor de Engelstalige stemmen en kan dus voorlopig nog niet gebruikt worden in deze masterproef. Eens de implementatie echter beschikbaar is, kan de commentator verbeterd worden door een uitgebreid sentimentanalysesysteem in gebruik te nemen. Op die manier kunnen emoties zoals boosheid, vrolijkheid en triestheid gedetecteerd worden, waardoor de uitgesproken commentaar aantrekkelijker wordt. 5.2 Volledige commentator Het laatste aspect dat nog ontbreekt aan het systeem dat tot nu toe besproken werd, is de uitwerking van het gepersonaliseerde aspect. Dit aspect werd meegenomen bij de uitwerking van een demo-applicatie. Daarenboven is het ook de bedoeling dat het systeem uit deze masterproef gedemonstreerd kan worden, bijvoorbeeld in combinatie met videobeelden. De commentaarapplicatie biedt twee opties. De gebruiker kan ervoor kiezen om een voetbalwedstrijd uit een databank te becommentari¨eren, of om live commentaar te genereren uit een Twitterstroom. Figuur 5.1 geeft deze keuze weer. Sectie 5.2.1 bespreekt de werking van de commentaarapplicatie met videobeelden. In Sectie 5.2.2 gaan we kort in op de tweede optie, de rechtstreekse Twitterstroom. 50 Figuur 5.1: Wanneer de commentaarapplicatie opgestart wordt, krijgt de gebruiker de keuze om een voetbalwedstrijd uit de databank in te laden of een rechtstreekse Twitterstroom te becommentari¨eren. 5.2.1 Becommentari¨ eren van een voetbalwedstrijd met videobeelden Wanneer de gebruiker ervoor kiest om tweets over een wedstrijd uit de databank in te laden, krijgt hij eerst een keuzevenster te zien. In dat keuzevenster kan de gebruiker kiezen welke wedstrijd hij becommentarieerd wil zien. Figuur 5.2 toont deze keuze. Nadat de gebruiker een wedstrijd gekozen heeft, krijgt hij de kans om de commentator te personaliseren. De gebruiker krijgt namelijk de keuze om zijn favoriete team te kiezen. Daarnaast kan er ook voor gekozen worden om de volledige stroom van tweets in beschouwing te nemen. Deze keuze wordt ge¨ıllusteerd in Figuur 5.3. In deze applicatie wordt de opdeling van de teams gemaakt op basis van hashtags. Bij het voorbeeld in Figuur 5.3 wordt de commentaar voor fans van Manchester United bijvoorbeeld gevormd op basis van de tweets die onder andere de hashtags #MUFC en #ManUtd bevatten. Deze techniek is echter voor verbetering vatbaar, aangezien andere fans deze hashtags ook soms gebruiken. Eens de gebruiker alle keuzes gemaakt heeft, krijgt hij het venster in Figuur 5.4 te zien. Hiervoor werden beelden van het Engelse Sky Sports en het Canadese Sportsnet gebruikt. 51 Figuur 5.2: Het venster dat de gebruiker toelaat een wedstrijd uit de databank in te laden. Figuur 5.3: Na de keuze voor een wedstrijd, moet de gebruiker aangeven welk team zijn voorkeur geniet. De gebruiker kan er ook voor kiezen om alle tweets in beschouwing te nemen. 52 Figuur 5.4: Wanneer alle keuzes gemaakt werden, krijgt de gebruiker de beelden van de wedstrijd in kwestie te zien, terwijl de gegenereerde commentaar getoond en voorgelezen wordt. Met behulp van de Java-bibliotheek vlcj [45] worden de beelden weergegeven in de applicatie. Om te zorgen dat de timing van de commentaar overeenkomt met de beelden, werd ervoor gezorgd dat het begin van elk van de video’s gelijk valt met het begin van de Twitterstroom in de databank. Hiertoe werd het moment van de eerste tweet die rapporteert over de aftrap gelijkgezet met het moment van de aftrap in de videostroom. 5.2.2 Becommentari¨ eren van een rechtstreekse Twitterstroom De tweede mogelijke optie die de gebruiker krijgt is het becommentari¨eren van een rechtstreekse Twitterstroom. Deze optie werd toegevoegd als toepassing van het ongesuperviseerde aspect van het commentaarsysteem uit deze masterproef. Met behulp van de live commentator kunnen ook andere evenementen of gebeurtenissen becommentarieerd worden. Figuur 5.5 toont het venster dat de gebruiker toelaat om de gewenste Twitterstroom te defini¨eren. Op basis van deze rechtstreekse Twitterstroom wordt vervolgens de commentaar gegenereerd, zoals in Figuur 5.6. Dit voorbeeld toont een commentaarstroom over de promotie van Cambridge United naar The Football League (de Engelse vierde klasse). Deze commentator werkt echter ook voor Twitterstromen die helemaal niet gerelateerd zijn aan voetbal, zoals bijvoorbeeld de dood van een bekend persoon, een belangrijk evenement,... 53 Figuur 5.5: Eerst moet de gebruiker de trefwoorden voor de Twitterstroom ingeven. Vervolgens kan het systeem op basis van die Twitterstroom een commentaarstroom genereren. Het gepersonaliseerde aspect in deze toepassing wordt gerealiseerd door de gebruiker zelf te laten kiezen op basis van welke Twitterstroom de commentaar gegenereerd wordt. 5.3 Besluit Dit hoofdstuk besprak hoe de gegenereerde tekstuele commentaar werd omgevormd tot een volwaardige commentaarapplicatie. Dit gebeurt in twee stappen. In de eerste stap wordt de gegenereerde tekst omgezet naar spraak. De tweede stap voegt het persoonlijke aspect toe aan de commentaar. Dit alles wordt omringd door een applicatie die toelaat de commentaar te beluisteren bij de videobeelden. In de eerste stap, de omzetting van tekst naar spraak, zagen we dat niet zomaar alle gegenereerde tekst uitgesproken kan worden. Het is immers moeilijk te voorspellen hoeveel tekst er uit het generatiealgoritme zal komen. Daarnaast werd in deze stap ook rekening gehouden met emotie. In deze masterproef werd hiervoor een eenvoudig mechanisme gebruikt. Wanneer de gebruikte TTS client, Mary TTS, emotie ondersteunt voor de Engelse stemmen, is het aangewezen om meer geavanceerde technieken te gebruiken. De tweede stap introduceert het gepersonaliseerde aspect van de commentator. Dit werd gerealiseerd door de Twitterstroom op te splitsen met behulp van hashtags. Daarnaast zorgt deze stap ervoor dat de commentaar ook bij de videobeelden beluisterd kan worden. 54 Figuur 5.6: Nadat de gebruiker de trefwoorden voor de Twitterstroom opgegeven heeft, begint het systeem commentaar te genereren op basis van de inkomende tweets. 55 Hoofdstuk 6 Evaluatie In dit hoofdstuk wordt het commentaarsysteem ge¨evalueerd. In deze evaluatie wordt enkel het algoritme uit Hoofdstuk 4 in beschouwing genomen. Het algoritme uit Hoofdstuk 3 werd immers al kort ge¨evalueerd in Sectie 3.5, waar bleek dat de kwaliteit van de (door dit systeem) gegenereerde commentaar te laag is. Dit hoofdstuk evalueert de uitvoer van het volledige commentaarsysteem. Dit is de uitvoer van de commentaarapplicatie, zoals die bekomen wordt in Hoofdstuk 5. Om het systeem te evalueren, werden enkele videofragmenten met bijhorende commentaren voorgelegd aan een testpubliek. In Sectie 6.1 wordt beschreven op welke vlakken de commentaren ge¨evalueerd werden. Vervolgens wordt het testpubliek gekarakteriseerd in Sectie 6.2. Sectie 6.3 bespreekt de resultaten die bekomen werden. In Sectie 6.4 sluiten we het hoofdstuk af met enkele bevindingen. 6.1 Opbouw van de vragenlijst Zoals in de inleiding van dit hoofdstuk reeds vermeld werd, gebeurde de evaluatie van het commentaarsysteem aan de hand van een vragenlijst. De deelnemers kregen bij het invullen vijf videofragmenten te zien. Deze fragmenten waren afkomstig van vier wedstrijden uit de verzamelde dataset (zie Bijlage C). Voor elk van deze videofragmenten werden vijf verschillende commentaarfragmenten voorgelegd aan het testpubliek. Deze vijf commentaarfragmenten zijn steeds: • De originele commentaar, die bij de beelden hoort. • Een commentaarfragment dat gegenereerd werd m.b.v. de selectietechniek, uit de volledige set van tweets. 56 • Een commentaarfragment dat gegenereerd werd m.b.v. de selectietechniek en gepersonaliseerd is voor ´e´en van beide teams. • Een commentaarfragment dat gegenereerd werd m.b.v. Phrase Reinforcement, uit de volledige set van tweets. • Een commentaarfragment dat gegenereerd werd m.b.v. Phrase Reinforcement en gepersonaliseerd is voor ´e´en van beide teams. De keuze om steeds slechts ´e´en gepersonaliseerd fragment per techniek te tonen is een bewuste keuze. Hoe meer fragmenten de leden van het testpubliek te zien krijgen, hoe moeilijker zij deze fragmenten kunnen vergelijken. Dat is ook een extra reden waarom het algoritme uit Hoofdstuk 3 niet in deze evaluatie werd betrokken. Tabel 6.1 geeft aan voor welk team de gepersonaliseerde commentaarfragmenten gegenereerd werden. Deze keuze gebeurde willekeurig. De commentaarteksten kunnen gelezen worden in Bijlage B. De volgorde die in deze bijlage wordt gehanteerd is ook de volgorde waarin het testpubliek de fragmenten te zien kreeg. De gekozen videofragmenten bevatten verscheidene situaties. Zo zijn er drie fragmenten die een doelpunt bevatten. Op deze momenten is er met andere woorden veel actie. Bijgevolg is er dan ook veel stof om over te praten. De andere twee fragmenten bevatten minder actie. In het fragment uit de wedstrijd Manchester United - Arsenal gebeurt er een hele tijd niks belangrijks. Op het einde van het fragment is er echter wel een discutabele strafschopfase. Het laatste fragment, uit de wedstrijd Arsenal - Liverpool, vertoont, behalve een herhaling van een doelpunt, ook bijster weinig actie. Dat fragment eindigt echter ook met een actie: een vervanging. Voor elk van de vijf commentaarfragmenten bij een videofragment kregen de deelnemers de vraag om het fragment te evalueren op vlak van drie parameters. Deze werden beoordeeld aan de hand van een score van 1 tot 5. • Originaliteit Hoe origineel is het commentaarfragment in kwestie? Brengt het fragment veel nieuwe en/of leuke inzichten, naast wat er in de video gebeurt, of niet? • Relevantie Is het commentaarfragment relevant? Komt de inhoud van het fragment overeen met wat er gebeurt in de video? • Leukheid Hoe leuk is de commentaar in kwestie? 57 Tabel 6.1: Een overzicht van de ge¨evalueerde videofragmenten en bijhorende gepersonaliseerde commentaarfragmenten. De tekst van deze (en de niet-gepersonaliseerde) commentaarfragmenten is terug te vinden in Bijlage B. Videofragment Gepersonaliseerd Gepersonaliseerd fragment via selectie? fragment via PR? Arsenal - Liverpool, doelpunt Santi Cazorla Everton - Liverpool, doelpunt Kevin Mirallas Manchester United - Arsenal, penaltyfase Sunderland - Manchester United, doelpunt Craig Gardner Arsenal - Liverpool, vervanging Arsenal Arsenal Liverpool Everton Arsenal Manchester United Manchester United Manchester United Liverpool Arsenal Daarnaast werd er, per videofragment, gevraagd om drie keer een keuze te maken tussen de vijf commentaarfragmenten. Hierbij werd aan de deelnemers gevraagd om zich in de plaats te stellen van een fan van de thuisploeg, een fan van de uitploeg en een neutrale fan. Op die manier wordt ook het gepersonaliseerde aspect ge¨evalueerd. 6.2 Testpubliek De vragenlijst werd via sociale media verspreid onder vrienden en kennissen. Daarnaast werd de vragenlijst ook verspreid binnen enkele fanclubs. In totaal vulden 22 personen de vragenlijst in. Onder het testpubliek bevindt zich ook ´e´en sportjournalist: Johan De Caluw´e. Dhr. De Caluw´e becommentarieert wekelijks wedstrijden uit de Belgische Jupiler Pro League voor Sporza Radio. Zijn evaluatieresultaten zullen in Sectie 6.3 als referentie gebruikt worden. Figuur 6.1 toont enkele statistieken over het testpubliek. De deelnemers zijn tussen de 20 en 59 jaar oud. 77% is man, 23% is vrouw. Daarnaast verklaart 81% van de deelnemers dat hij/zij minstens ´e´en keer per maand naar voetbal kijkt. 59% verklaart zelfs dat hij/zij minstens ´e´en keer per week kijkt. De Engelse Premier League wordt door 68% van het testpubliek gevolgd. 6.3 Resultaten De resultaten die uit de vragenlijst kwamen, zullen per videofragment besproken worden. Elk videofragment wordt besproken in een deelsectie. 58 (a) Het geslacht van de deelnemers. (b) De interesse van het testpubliek in de Engelse Premier League. Figuur 6.1: Enkele karakteristieken van het testpubliek. 6.3.1 Eerste videofragment: Arsenal - Liverpool, doelpunt Santi Cazorla (A) Figuren 6.2 en 6.3 geven de evaluatieresultaten voor het eerste videofragment grafisch weer. In Figuur 6.2 worden de scores op vlak van originaliteit, relevantie en leukheid van de commentaarfragmenten afgebeeld. Uit deze resultaten blijkt dat alle zelf gegenereerde commentaren op vlak van originaliteit lichtelijk beter scoren dan de originele commentaar. Wat betreft relevantie komt de originele commentaar duidelijk als winnaar uit de bus. Dit lijkt een logisch resultaat, aangezien die commentaarstroom bij de getoonde beelden hoort. Net zoals bij de originaliteit, liggen de resultaten op het vlak van leukheid ook erg dicht bij elkaar. Enkel de gepersonaliseerde commentaar, die gegenereerd werd met het PR-algoritme, valt wat uit de toon. Over de hele lijn lijkt deze variant ook als zwakste uit de bus te komen voor dit videofragment. De scores van de referentiepersoon (Figuur 6.2(b)), Johan De Caluw´e, sluiten aan bij de gemiddelde scores. Toch heeft hij op het vlak van originaliteit een duidelijke voorkeur voor de gegenereerde commentaren. Ondanks deze vaststelling, vindt hij de originele commentaar de leukste. Als we de voorkeuren van het testpubliek gaan bekijken (Figuur 6.3), zien we dat de Arsenalfans een gepersonaliseerde variant verkiezen. Dit is te verklaren doordat beide gepersonaliseerde varianten werden gegenereerd op basis van Arsenal-tweets. Het is echter wel duidelijk dat de gepersonaliseerde PR-techniek aanzienlijk slechter scoort dan de gepersonaliseerde selectietechniek. De voorsprong van deze laatste techniek op de originele commentaar is ook klein. Bij de fans van Liverpool en de neutrale fans is er een duide59 lijke winnaar: de originele commentaar. Het videofragment toont namelijk een doelpunt van Arsenal en aangezien de gegenereerde commentaren eerder euforisch lijken, is dit een logische uitkomst. 6.3.2 Tweede videofragment: Everton - Liverpool, doelpunt Kevin Mirallas (E) De evaluatieresultaten voor dit videofragment zijn af te lezen in Figuren 6.4 en 6.5. De gemiddelde scores voor originaliteit, relevantie en leukheid (Figuur 6.4(a)) liggen in dezelfde lijn als bij het eerste videofragment. Op het vlak van originaliteit en leukheid zijn de verschillen opnieuw klein. Op het vlak van relevantie is de originele commentaar opnieuw de grote winnaar. Deze keer is er echter een duidelijke verliezer over de hele lijn: de gepersonaliseerde commentaar die via de selectietechniek bekomen werd. Uit de scores van de referentiepersoon kunnen we dan weer afleiden dat de selectietechniek op de volledige stroom van tweets eerder de verliezer is. Figuur 6.4(b) toont ook duidelijk dat de originele commentaar de winnaar is. Figuur 6.5 toont de keuzes van het testpubliek. Onder de Evertonfans is er onverdeeldheid. Zowel beide PR-technieken als de originele commentaar gaan met ongeveer een kwart van de stemmen naar huis. Het feit dat de gepersonaliseerde commentaar op basis van Phrase Reinforcement goed scoort is logisch, aangezien deze commentaar gebaseerd is op Everton-tweets. Het is dan ook eigenaardig dat Liverpoolfans deze commentaar op de tweede plaats zetten. Nog eigenaardiger is dat de gepersonaliseerde selectietechniek de minste stemmen krijgt, hoewel die gebaseerd is op Liverpool-tweets. De neutrale fan kiest ook hier duidelijk voor de originele commentaar. 60 (a) De gemiddelde evaluatieresultaten van de testgroep. (b) De evaluatieresultaten van de referentiepersoon, Johan De Caluw´e. Figuur 6.2: Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het eerste videofragment. 61 (a) Voorkeur wanneer testpersonen Arsenalfans zijn. (b) Voorkeur wanneer testpersonen Liverpoolfans zijn. (c) Voorkeur wanneer testpersonen neutrale fans zijn. Figuur 6.3: Evaluatie van de voorkeuren van het testpubliek voor het eerste videofragment. 62 (a) De gemiddelde evaluatieresultaten van de testgroep. (b) De evaluatieresultaten van de referentiepersoon, Johan De Caluw´e. Figuur 6.4: Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het tweede videofragment. 63 (a) Voorkeur wanneer testpersonen Evertonfans zijn. (b) Voorkeur wanneer testpersonen Liverpoolfans zijn. (c) Voorkeur wanneer testpersonen neutrale fans zijn. Figuur 6.5: Evaluatie van de voorkeuren van het testpubliek voor het tweede videofragment. 64 6.3.3 Derde videofragment: Manchester United - Arsenal, penaltyfase Figuren 6.6 en 6.7 tonen de evaluatieresultaten voor het derde videofragment. Opmerkelijk aan deze resultaten is dat drie van de vier gegenereerde resultaten een score van slechts 2, 5 of lager halen op relevantie. Dit is waarschijnlijk te wijten aan het feit dat er weinig gebeurt tijdens dit videofragment. Hier haalt de gepersonaliseerde commentaar op basis van het PR-algoritme opnieuw de minst goede resultaten. Over de hele lijn scoren de originele commentaar en de commentaar uit de selectietechniek het best. De referentiepersoon lijkt, op vlak van originaliteit en leukheid ook een voorkeur te hebben voor de commentaar uit de selectietechniek. Ook de commentaar uit het PR-algoritme krijgt goede scores. In Figuur 6.7(c) zien we opnieuw dat neutrale fans de voorkeur geven aan de originele commentaar. Figuur 6.7(a) toont de keuze van Manchester Unitedfans. Voor dit fragment geven zij duidelijk de voorkeur aan de commentaar uit de selectietechniek. De originele commentaar komt op de tweede plaats. De gepersonaliseerde commentaar uit het PR-algoritme, die gegenereerd werd uit de Manchester United-tweets, krijgt daarentegen erg weinig stemmen. Dit wijst er waarschijnlijk op dat de tekstkwaliteit te laag is. De Arsenalfans kiezen echter wel duidelijk voor de gepersonaliseerde commentaar uit de Arsenal-tweets. Dit kan afgeleid worden uit Figuur 6.7(b). Ook hier komt de originele commentaar op plaats twee. 6.3.4 Vierde videofragment: Sunderland - Manchester United, doelpunt Craig Gardner (S) De scores voor de commentaren bij het vierde videofragment liggen opnieuw in dezelfde lijn als bij vorige videofragmenten. Figuur 6.8(a) toont dat de gepersonaliseerde commentaar uit het PR-algoritme opnieuw de zwakste scores haalt. De commentaar uit het PR-algoritme (gebaseerd op de volledige stroom van tweets) scoort daarentegen over de hele lijn beter dan de andere gegenereerde commentaren. Onze referentiepersoon heeft voor dit fragment opnieuw een duidelijke voorkeur voor de originele commentaar. In Figuur 6.9 merken we dat Sunderlandfans voornamelijk de originele commentaar verkiezen. De gepersonaliseerde commentaren zijn hier namelijk allebei gebaseerd op de Manchester United-tweets. Toch kiezen de fans van Manchester United niet voor ´e´en van beide gepersonaliseerde commentaren. Hun voorkeur gaat uit naar de commentaar uit het PR-algoritme en de originele commentaar. Zoals dat bij vorige videofragmenten het geval was, kiezen neutrale fans ook hier massaal voor de originele commentaar. 65 (a) De gemiddelde evaluatieresultaten van de testgroep. (b) De evaluatieresultaten van de referentiepersoon, Johan De Caluw´e. Figuur 6.6: Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het derde videofragment. 66 (a) Voorkeur wanneer testpersonen Manchester Unitedfans zijn. (b) Voorkeur wanneer testpersonen Arsenalfans zijn. (c) Voorkeur wanneer testpersonen neutrale fans zijn. Figuur 6.7: Evaluatie van de voorkeuren van het testpubliek voor het derde videofragment. 67 (a) De gemiddelde evaluatieresultaten van de testgroep. (b) De evaluatieresultaten van de referentiepersoon, Johan De Caluw´e. Figuur 6.8: Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het vierde videofragment. 68 (a) Voorkeur wanneer testpersonen Sunderlandfans zijn. (b) Voorkeur wanneer testpersonen Manchester Unitedfans zijn. (c) Voorkeur wanneer testpersonen neutrale fans zijn. Figuur 6.9: Evaluatie van de voorkeuren van het testpubliek voor het vierde videofragment. 69 (a) De gemiddelde evaluatieresultaten van de testgroep. (b) De evaluatieresultaten van de referentiepersoon, Johan De Caluw´e. Figuur 6.10: Evaluatie van originaliteit, relevantie en leukheid van commentaren bij het vijfde videofragment. 70 (a) Voorkeur wanneer testpersonen Arsenalfans zijn. (b) Voorkeur wanneer testpersonen Manchester Unitedfans zijn. (c) Voorkeur wanneer testpersonen neutrale fans zijn. Figuur 6.11: Evaluatie van de voorkeuren van het testpubliek voor het vijfde videofragment. 71 6.3.5 Vijfde videofragment: Arsenal - Liverpool, vervanging De evaluatieresultaten voor het laatste videofragment worden weergegeven in Figuren 6.10 en 6.11. Naast de originele commentaar halen de twee commentaren uit de selectietechniek de beste scores. Toch steekt ook hier opnieuw geen enkele commentaar echt bovenuit. Onze referentiepersoon heeft een andere mening. Zijn voorkeur lijk uit te gaan naar de gepersonaliseerde commentaar uit het PR-algoritme. Dit is opvallend, aangezien deze commentaar gemiddeld gezien het minst goed scoort bij het testpubliek. In Figuur 6.11 zien we dat zowel de neutrale fans als de fans van Liverpool de originele commentaar verkiezen. De Arsenalfans verkiezen de commentaar uit de selectietechniek. Opvallend aan deze resultaten is dat geen van beide supportersclans voor zijn eigen gepersonaliseerde commentaar kiest. 6.4 Besluit Uit de evaluatieresultaten van de vijf individuele fragmenten werd de grafiek in Figuur 6.12 afgeleid. Uit deze grafiek kunnen enkele algemene bevindingen opgemaakt worden. Een eerste opmerking is dat de scores over het algemeen laag zijn. Op de relevantie van de originele commentaar na, wordt nergens een score hoger dan 3, 3 op 5 gehaald. Daarenboven is het verschil met de laagste score (2, 45) klein. De algemene resultaten liggen met andere woorden erg dicht bij elkaar. We kunnen echter wel stellen dat de niet-gepersonaliseerde commentaren1 beter beoordeeld worden dan de gepersonaliseerde commentaren. Hoogstwaarschijnlijk is dit het gevolg van de hoeveelheid tweets die naar het generatiealgoritme vertrekken. Uit Bijlage C blijkt namelijk dat de Twitterstromen voor individuele teams soms gevoelig kleiner is. Dat is meteen ook de reden waarom de gepersonaliseerde commentaar op basis van het PR-algoritme het zwakst presteert. Bij de toepassing van het PR-algoritme laat een gebrek aan data zich namelijk sneller opmerken dan bij gebruik van de selectietechniek.2 Ondanks de ietwat lage scores, bleken er in de evaluatieresultaten slechts twee personen te zijn die de gegenereerde commentaren helemaal niks vinden. Dit toont toch enig potentieel aan. Mensen lijken de persoonlijke toets die Twitter met zich meebrengt toch enigszins te appreci¨eren. In de diagrammen die de voorkeuren van de fans weerspiegelen, zagen we echter wel dat de fans zeer vaak opteerden voor de originele commentaar. In andere gevallen was 1 De commentaren die gegenereerd werden op basis van de volledige stroom van tweets. Wanneer er weinig tweets voorhanden zijn, zijn de clusters automatisch kleiner. Dat leidt, zoals reeds vermeld werd in Sectie 3.5, tot een lagere kwaliteit van de uitvoer bij het PR-algoritme. 2 72 de originele commentaar steeds de tweede meest frequent gekozen commentaar. Neutrale fans kozen keer op keer overtuigend voor de originele commentaar. De fans van de teams kiezen over het algemeen voor een gegenereerde commentaar wanneer die commentaar hun team bejubelt. Toch viel het op dat fans zelden voor hun eigen gepersonaliseerde commentaar kozen. Dit wordt reeds verklaard door de lagere scores voor de gepersonaliseerde commentaren. Anderzijds zijn de niet-gepersonaliseerde commentaren ook redelijk partijdig. Wanneer een team bijvoorbeeld scoort, zal de totale stroom van tweets ook overheerst worden door tweets van blije fans. Fans van het andere team zijn op die momenten ’stiller’, waardoor hun tweets zelden of nooit in de commentaar verschijnen. Figuur 6.12: Deze grafiek toont de gemiddelde scores van de vijf commentaren over de vijf fragmenten heen. 73 Hoofdstuk 7 Besluit en toekomstig werk 7.1 Besluit In deze masterproef werd een systeem voorgesteld dat voetbalcommentaar genereert op basis van Twitterberichten. Dit systeem werkt in (bijna) ware tijd en op een ongesuperviseerde manier. We beschreven twee generatiealgoritmen voor commentaar. Het eerste algoritme maakt gebruik van een vast tijdsinterval. Dit algoritme verzamelt gedurende het interval alle tweets die binnenkomen. Na afloop van het interval worden deze tweets geclusterd en wordt elke cluster apart samengevat. Wat betreft het samenvatten werden twee mogelijke technieken voorgesteld: Phrase Reinforcement (PR) en een selectietechniek. In de evaluatie van dit systeem bleek echter al deze aanpak te na¨ıef is. Elk moment in de stroom werd even belangrijk geacht en de tekstkwaliteit liet te wensen over. Ook de manier van clusteren, via het k-means algoritme, is niet ideaal voor deze toepassing. De zwaktes van dit eerste algoritme werden weggewerkt in het tweede algoritme. Dit algoritme maakt gebruik van clustering in ware tijd. Tweets die binnenkomen worden meteen toegewezen aan een bestaande of nieuwe cluster. Wanneer clusters na een bepaalde periode niet meer actief zijn, of reeds te lang actief zijn, worden ze verwijderd en eventueel samengevat. Om te voorkomen dat er stille momenten opduiken in de commentaarstroom, werden in dit algoritme willekeurige feiten ge¨ıntroduceerd. Dit zijn weetjes die verband houden met wat er op Twitter wordt gezegd. Het commentaarsysteem leest vervolgens de gegenereerde commentaar voor. Aangezien het generatiealgoritme echter niet kan weten hoeveel tekst er gegenereerd mag worden, werd in deze stap een prioriteitswachtlijn gebruikt. Bepaalde belangrijke samenvattingen kregen hierdoor voorrang op andere samenvattingen (zoals willekeurige feiten). Verder 74 voorziet deze stap ook in een eenvoudige vorm van sentimentanalyse. Tijdens de evaluatie van het commentaarsysteem kreeg het testpubliek enkele videofragmenten en bijhorende commentaren1 voorgelegd. Over het algemeen lagen de scores voor alle commentaren, inclusief de originele commentaar bij de videofragmenten, erg laag. Enkel de relevantie van de originele commentaar kreeg steeds een hoge score. Dit is logisch, aangezien deze commentaar ingesproken is door mensen die naar dezelfde beelden keken. Enerzijds lijken de lage scores erop te wijzen dat het testpubliek niet zit te wachten op een commentator die voornamelijk informatie vanop Twitter gebruikt. Anderzijds werd geen enkele van de gegenereerde commentaren volledig afgebroken. Het testpubliek staat met andere woorden toch enigszins open voor toevoegingen op basis van Twitter. Ondanks het feit dat het testpubliek de gegenereerde commentaren niet radicaal afkeurde (ten opzichte van de originele commentaar), verkoos een groot aantal personen steeds de originele commentaar. Nochtans scoorde die commentaar lager op het vlak van originaliteit en leukheid. De hoge relevantie van de originele commentaar is hier waarschijnlijk de doorslaggevende factor. Daarom lijkt het ons voorlopig beter om, in plaats van een volledige commentaarstroom, eerder gepersonaliseerde, uitgebreide samenvattingen te genereren. Dit kan gerealiseerd worden met behulp van hoogtepuntextractiesystemen. Over de verscheidene hoogtepunten kan het systeem dan vervolgens enkele samenvattende zinnen genereren. 7.2 Toekomstig werk Om in de toekomst tot commentaarstromen van een hogere kwaliteit te komen, kunnen nog enkele potenti¨ele verbeteringen toegepast worden. Zo is het nuttig om verder onderzoek te voeren naar betere afstandsmetrieken voor de clusterstap. De gebruikte metriek, cosine similarity, houdt namelijk geen rekening met de context van tweets. Zo is het perfect mogelijk dat twee tweets die hetzelfde thema behandelen toch in andere clusters zullen vallen, omdat ze een andere woordenschat gebruiken. Daarnaast werkt het commentaarsysteem met een proof-of-concept voor de generatie van willekeurige feiten en de toevoeging van emotie aan de gesproken commentaar. Deze aspecten kunnen bijgevolg in de toekomst verder uitgewerkt worden. Ook het gepersonaliseerde aspect van de voetbalcommentator kan verbeterd worden. Mo1 De deelnemers kregen de originele commentaar en vier gegenereerde commentaren te zien, zoals uitgelegd in Hoofdstuk 6. 75 menteel worden de gepersonaliseerde commentaren gegenereerd uit tweets die gebruikmaken van de hashtags voor een bepaald team. Toch gebruiken fans van andere teams deze hashtags ook. De toevoeging van een classificator zou tot een betere opsplitsing van tweets kunnen leiden. Ten slotte is ook het tijdsaspect voor verbetering vatbaar. Het is immers moeilijk om de gegenereerde commentaar goed af te stemmen op de videobeelden. Om de commentator toe te passen op live voetbalbeelden, is verder onderzoek rond de vertragingstijden van voetbalbeelden en Twitterberichten vereist. Een algemene bemerking is dat het systeem enkel werd getest op voetbalwedstrijden. Aangezien het systeem ongesuperviseerd werkt, is het ook mogelijk om commentaar te genereren bij evenementen, gebeurtenissen of wedstrijden in andere sporten. Deze mogelijkheid werd echter nog niet getest. Door verder onderzoek uit te voeren zal het systeem ook getest worden met grotere datasets. Enerzijds kunnen we verwachten dat het PRalgoritme beter zal presteren. Anderzijds zal een overvloed aan data de samenvattingsstap uit het generatiealgoritme vertragen. 76 Bijlage A Configuraties Deze bijlage bevat uitleg over de twee configuratiebestanden die gebruikt worden door het systeem uit deze masterproef. Enerzijds is er een configuratiebestand waarin de parameters voor uitvoering van het commentaaralgoritme zijn opgenomen. Deze configuratie wordt uitgelegd in A.1. Anderzijds is er een configuratiebestand dat databank- en serverconfiguraties bevat. Dit wordt besproken in A.2. A.1 Configuratie van het commentaaralgoritme In Hoofdstukken 3 en 4 kwamen heel wat parameters voor de besproken algoritmen aan bod. Deze parameterwaarden zijn eenvoudig aan te passen aan de hand van het bestand algorithmConfig.properties. Dit bestand bestaat uit enkele verschillende afdelingen. De eerste afdeling bevat parameters die bepalen of het algoritme uit Hoofdstuk 3 of het algoritme uit Hoofdstuk 4 gebruikt moet worden. # ========================================================== # A l g o r i t h m Choice P r o p e r t i e s # ========================================================== # Value t o i n d i c a t e w h e t h e r t o use t h e dynamic summarization # system or t h e f i x e d i n t e r v a l summarization system # p o s s i b l e v a l u e s : f i x e d , dynamic timing mode=dynamic # Value t h a t i n d i c a t e s w h e t h e r we want t o use PR or t w e e t # selection # p o s s i b l e v a l u e s : pr , s e l e c t i o n s u m m a r i z a t i o n a l g o r i t h m=s e l e c t i o n 77 # Value t h a t i n d i c a t e s w h e t h e r we w i l l s p l i t up t w e e t s i n # unigrams or n−grams . This parameter i s o n l y u s e f u l when # working i n PR mode . # p o s s i b l e v a l u e s : unigram , ngram t e x t s p l i t t i n g m o d e=ngram De variabele timing mode bepaalt welk algoritme gebruikt moet worden. Aan de hand van de variabele summarization algorithm kan de gebruiker kiezen welk samenvattingsalgoritme hij wil gebruiken: het PR-algoritme of de selectietechniek. De laatste variabele, text splitting mode, bepaalt of tweets gesplitst moeten worden op witruimte of via een chunker. Deze variabele is enkel van belang wanneer het PR-algoritme gebruikt wordt. De tweede afdeling van het configuratiebestand bevat parameters die eigen zijn aan het algoritme uit Hoofdstuk 3. # ========================================================== # Fixed I n t e r v a l A l g o r i t h m P r o p e r t i e s # ========================================================== # General P r o p e r t i e s # −−−−−−−−−−−−−−−−−−− # The s i z e o f t h e time window i n which incoming Tweets are # h a n d l e d by t h e a l g o r i t h m a l g o r i t h m r u n i n t e r v a l =30000 # Clustering Properties # −−−−−−−−−−−−−−−−−−−−− # The parameter K used i n K−means c l u s t e r i n g k means parameter=3 # The maximal number o f i t e r a t i o n s t o be done i n K−means # c l u s t e r i n g ( i n c a s e t h e s t o p c o n d i t i o n i s not met w i t h i n # r e a s o n a b l e time ) k m e a n s m a x i t e r a t i o n s =50 Hier kan een opdeling gemaakt worden tussen algemene variabelen en clusteringsvariabelen. De enige algemene variabele, algorithm run interval, legt de grootte van het tijdsinterval vast. Deze waarde wordt uitgedrukt in seconden. De clusteringsvariabelen zijn k means parameter en k means maxiterations. De eerste variabele is de parameter k uit het k-means algoritme. De tweede parameter legt het 78 maximale aantal iteraties voor dit algoritme vast. De volgende afdeling in het configuratiebestand bevat de vele parameters voor het algoritme uit Hoofdstuk 4. # ========================================================== # Variable I n t e r v a l Algorithm P r o p e r ti e s # ========================================================== # Maximal s i z e o f t h e c l u s t e r core , t h a t i s used t o d e c i d e # i n what c l u s t e r a s t a t u s b e l o n g s m a x c l u s t e r c o r e s i z e =20 # Minimal % o f a l l t w e e t s t h a t have t o be i n a c l u s t e r , f o r # t h e c l u s t e r t o be c o n s i d e r e d as ’ newsworthy ’ . When t h e # r a t i o d r o p s b e n e a t h t h i s r a t e , a summary i s g e n e r a t e d f o r # the c l u s t e r . c l u s t e r s t r e a m i m p o r t a n c e r a t i o t h r e s h o l d =0.3 # Minimal s i m i l a r i t y t h a t i s needed f o r a s t a t u s t o be # added t o a c l u s t e r . m i n i m a l s i m i l a r i t y t h r e s h o l d =0.2 # Minimal time t h a t has t o go by w h i l e t h e importance r a t i o # i s b e n e a t h t h e t h r e s h o l d b e f o r e t h e c l u s t e r i s removed # ( and e v e n t u a l l y summarized ) . In s e c o n d s . c l u s t e r d e l e t i o n t r i g g e r t i m e =15 # Maximal number o f s e c o n d s t h a t a c l u s t e r can be a c t i v e . # This i s used t o p r e v e n t t h e c a s e when one c l u s t e r i s # a c t i v e a l l o f t h e time . In s e c o n d s . c l u s t e r m a x a l i v e t i m e =30 # The minimal c l u s t e r s i z e t h a t i s needed b e f o r e t h e # c l u s t e r p r o c e e d s t o t h e summarization s t e p . m i n i m a l c l u s t e r s i z e f o r s u m m a r i z a t i o n =5 # Maximal time i n between t h e g e n e r a t i o n o f two summaries . # This v a r i a b l e i s used t o p r e v e n t s i l e n t moments . I f t h i s # time i s exceeded , t h e system w i l l p r o v i d e a random f a c t . # Time i n s e c o n d s . m a x s i l e n c e t i m e =7 # Maximal time t h a t has t o be between 2 random f a c t s . # In s e c o n d s . m i n t i m e b e t w e e n r a n d o m f a c t s =15 79 De eerste parameter legt de maximale grootte van de clusterkern vast. De tweede parameter geeft aan hoe belangrijk een cluster moet zijn opdat die cluster actief blijft. De variabele minimal similarity threshold geeft aan hoe groot de gelijkenis tussen een tweet en een cluster minstens moet zijn opdat de tweet in de cluster komt. De volgende twee variabelen leggen vast wanneer een cluster verwijderd moet worden. Deze bepalen respectievelijk hoe lang een cluster inactief moet zijn voor die cluster verwijderd wordt en hoe lang een cluster maximaal kan bestaan. De variabele minimal cluster size for summarization bepaalt hoe groot een verwijderde cluster moet zijn om samengevat te worden. De laatste variabelen, max silence time en min time between random facts, worden gebruikt om te bepalen wanneer willekeurige feiten gegenereerd worden. A.2 Databank- en serverconfiguratie De instellingen voor datatoegang en voor de text-to-speech server worden opgeslagen in het bestand serverConfig.properties. Dit bestand ziet er als volgt uit. # ========================================================== # Data p r o p e r t i e s # ========================================================== # Base l o c a t i o n o f t h e f o l d e r where a l l ( v i d e o ) d a t a i s # k e p t . This i s t h e f o l d e r t h a t c o n t a i n s t h e match−f o l d e r s # ( e . g . ’ A r s e n a l L i v e r p o o l 02112013 ’) v i d e o b a s e l o c a t i o n =/U s e r s / g e r t j a n g o o s s e n s / T h e s i s /Data/ # ========================================================== # TTS p r o p e r t i e s # ========================================================== # Address o f t h e TTS s e r v e r t t s s e r v e r a d d r e s s=http : / / mary . d f k i . de : 5 9 1 2 5 / p r o c e s s ? #t t s s e r v e r a d d r e s s=h t t p : / / l o c a l h o s t : 5 9 1 2 5 / p r o c e s s ? # ========================================================== # Database p r o p e r t i e s # ========================================================== # Link t o c o n n e c t t o u s i n g t h e j a v a mysql c o n n e c t o r . m y s q l c o n n e c t i o n l i n k=l o c a l h o s t : 8 8 8 9 / v o e t b a l t w e e t s ? u s e r=r o o t &password=r o o t 80 De variabele video base location legt de map vast waar de videobeelden voor de verzamelde dataset opgeslagen zijn. De relatieve link naar de specifieke videobestanden vanuit deze map is opgeslagen in de databank. Met behulp van de variabele tts server address kan de gebruiker de link naar de gebruikte Mary TTS [40] server vastleggen. Deze link kan naar de server van de ontwikkelaars verwijzen, maar kan ook verwijzen naar een lokale installatie. Ten slotte geeft de variabele mysql connection link aan via welke link het programma kan verbinden met de database die de datasets bevat. 81 Bijlage B Commentaarfragmenten bij de evaluatie Deze bijlage geeft een overzicht van de commentaarfragmenten die voorgelegd werden aan het testpubliek. Deze fragmenten worden steeds gegeven in de volgorde zoals ze in de vragenlijst verschenen. Ook de links naar de bijhorende videofragmenten worden hier gegeven. Om deze fragmenten te kunnen bekijken of downloaden kan ingelogd worden met gebruikersnaam user en wachtwoord evaluatie. B.1 Eerste videofragment: Arsenal - Liverpool, doelpunt Santi Cazorla (A) Dit videofragment is te bekijken of te downloaden op http://www.gertjangoossens.be/ Masterproef/Fragment1.mp4. De commentaarfragmenten die in de vragenlijst werden opgenomen worden gegeven zijn de volgende: Commentaar - Originele commentaar Once again good pressure from Liverpool. Forcing Arsenal to play back square. Mikel Arteta, Sagna, Giroud is in the middle who is hanging on there. In the it’s the header that hits the post. But the rebound is in! Santi Cazorla! At the second attempt. And it all stammed from a carefully crafted pass from Ramsey inside his own half, that relieved Rosicky. Here it is, it’s a really good pass. Then played in from Sagna. Skrtel and Kolo Toure are waiting in that near-post area, and it’s a great reaction from Cazorla. First he comes in at the far post. Where was Flanagan? He’s nowhere in the picture, he was still high up the field. But what a good finish it is, second time realm. Sagna, the provider down that right-hand side. That’s the problem with the back three. Sakho had to go out and stop the cross. They were the outnumbered in the box, and Flanagan was caught 82 high up the field. Santi Cazorla on the Arsenal score sheet for the first time this season. Commentaar - Selectietechniek op Arsenal-tweets This is a brilliant game so far. This is going to be a close one. RANDOM FACT: Arsenal Football Club is an English Premier ... (afgebroken) Common Arsenal we need to win this game. RANDOM FACT: Liverpool Football Club is an English Premier League football club based in... (afgebroken) Lfc I predict a win for liverpool of 27-0. Yes I said 27-0. GET THE FUCK IN THERE! 1-0 the Arsenal! CAZORLA! Arsenal take the lead! 1-0! My little silent celebrations make me think I’m slightly crazy. Cazorlaa! Get in there arsenal ?AFCvLFC. What a goal off of the rebound omg. EPL Match Update - Goal - Arsenal 1 - 0 Liverpool - Santi. What a sweet goal for Santi Carzola. Fucking yes! About time I got a bit of luck! Carzola! Come on arsenal! 1-0 to the arsenal. What a goal that is santi. Get in Cazorla! What a finish! WE ARE TOP OF THE LEAGUE, SAY WE ARE TOP OF THE LEAGUE. Commentaar - Selectietechniek op alle tweets This is a brilliant game so far. Flanagan having a good game thus far. RANDOM FACT: Liverpool Football Club is an English Premier League football club ... (afgebroken) Common Arsenal we need to win this game. This match is getting a bit violent ?arsenal. GOAL ARSENAL SANTI CAZORLA 1-0. GET THE FUCK IN THERE! 1-0 the Arsenal! YESS! arsenal! Get the fuck in! GOAL: Arsenal 1 - 0 Liverpool. Santi Cazorla finishes well. What a sweet goal for Santi Carzola. That’s how you follow up lads! Cazorla! The Gunners took the lead. That’s a time to score ur first of the season.santi caazzoorrllaa. Come on arsenal! 1-0 to the arsenal. Come On Arsenal! Get in there Santi Cazorla. Commentaar - Phrase Reinforcement op alle tweets That problem for us, or a Liverpool win the league. Flanno doing good so far! RANDOM FACT: The Premier League is an English professional league for association football clubs. At the top of the English football league system, it is the country’s primary football competition. I predict a win this game deserves to be a top of the table clash. Come on the counter. Take the lead! OO SANTI CAZOORRLLAA. You didn’t sign him. Get in there. What goal off the post! Goal from Arsenal. I like him. That was beautiful! Arsenal the defence doing FUK OFF. I got a bit of luck! Carzola! Goal! Arsenal! Sagna puts a good cross in, Cazorla heads it goalwards but it hits the post, he’s there for the rebound though 1-0. With the assist for Cazorla. Come on arsenal! 1-0 to the Arse-nal! Come on arsenal! Get 83 in there Santi Cazorla. Come on 18MINS AFTER THE BALL HE THE POST, SAKHO LOST SAGNA WHO CROSSED IT. That was nice, That was class. Commentaar - Phrase Reinforcement op Arsenal-tweets This is i hope you want the two teams to lose. arsliv. We can win this. I hope someday i get to cheer for him in my room with my tv and I’ve put the football on. Arsenal right from there. We have hardly any passion in the box, not much else. RANDOM FACT: A trophy is a reword for a specific achievement, and serves as recognition or evidence of merit. Trophies are most often rewarded for sporting achievements... (onderbroken) A top of the table clash. Come on lads! Love my boy Santi. Get in there Santi. What a goal off the post. AFC 1-0. What a sweet goal by Arsenal needed that goal for Santi Cazorla. I got a bit of luck! Carzola! B.2 Tweede videofragment: Everton - Liverpool, doelpunt Kevin Mirallas (E) Dit videofragment is te bekijken of te downloaden op http://www.gertjangoossens.be/ Masterproef/Fragment2.mp4. De commentaarfragmenten die in de vragenlijst werden opgenomen worden gegeven zijn de volgende: Commentaar - Selectietechniek op Liverpool-tweets GOAL! Phil Coutinho puts LFC ahead, LFC 1-0. GET NEW F O L L O WERS?Visit satchat,TurnUp,DoctorWho50th,YNWA,LFC,acl,Derrick Rose,JFK,Catching Fire,Pandora. MIrallas! 1-1 What a start to the game! WHAT A GAME THIS IS GOING TO BE ! Two GOALS in two minutes! Wow! What a start to a derby! We can’t defend set pieces for shit. Pathetic defending, yet again we concede from a corner. EFC 1-1. What a start to the game ! Commentaar - Originele commentaar Pienaar, to McCarthy. Jagielka. Always so important for teams to settle, on a day like today. And that will certainly have settled Liverpool. Yeah, and I believe Liverpool’s record in going ahead in games this seasons is very strong too, so things are going very well for them. Now Mignolets clearance in combination with Skrtel, allowing Everton to apply some more early pressure here. My only concern for Everton is just how they allowed Coutinho so much room. Lucas has been doing more travelling than most. He’s been off to Miami and Toronto. His task week with the Brazil national team, he came off the bench twice. 84 It’s been left to Leighton Baines, and his dead ball expertise to flow this one in. For Liverpool, Lukaku and Distin are the guys they principally need to make sure to keep tight. So Distin round the back. Skrtel! OH YES! Tapped it in for the leveller, Kevin Mirallas! 2 goals in a few minutes in the Merseyside! That’s got them rolling here! Commentaar - Phrase Reinforcement op Everton-tweets RANDOM FACT: The Premier League is an English professional league ... (afgebroken) Come on Reds! 0-1 eveliv YNWA! Phil Coutinho. What a game THIS is going to be one crazy game. Well this is definitely shaping up. Come on everton! Goodison erupts as Mirallas prods home from a Baines free kick. EFC 1 LFC 1. This is this actually a. Two goals in a few minutes gone derby day has started with a bang! RANDOM FACT: The 2008-09 Premier League season (known as the Barclays Premier ... (afgebroken) Come on Everton. By themselves. The match will end up 5-5 at fault this time. RANDOM FACT: The Merseyside derby is the name given ... (afgebroken) Is something else, dead ball specialist Leighton Baines creates from a set piece. When are we are made of. Commentaar - Phrase Reinforcement op alle tweets Up 1-0 is worth the early start this morning. RANDOM FACT: The Premier League is an English professional league for association (afgebroken)... Goal by Coutinho from a set piece, now let’s defend them properly. Get in Coutinho. Goal! everton liverpool (kevin mirallas,. WHAT A GAME this is going to be a loong night. Come on Everton! Well this is going to be.Goodison erupts as Mirallas prods home from a Baines free kick. EFC 1 LFC 1. Goal! Mirallas grabs an equaliser. EFC right back in it. This is the Derby as usual! 1-1. Come on Gerrard’s corner. On set pieces seems to be working. Be some game this! 1-1. By mirallas! everton 1- 1 liverpool at this time. Reds defenders were confused by themselves. The match will end up 5-5 at this point. Commentaar - Selectietechniek op alle tweets They Marked the Big Guys and the Smallest find the net coutinho LFC 1-0. Liverpool 1-0 Everton LIVE ON ¿¿. Two GOALS in two minutes! Wow! COUTINHO! Liverpool lead in the Derby! YESS MIRALLAS! Everton 1 - 1 Liverpool. WHAT A GAME THIS IS GOING TO BE ! GOAL! Everton 1-1 Liverpool (Kevin Mirallas, 8’). This looks to be a good match. Poor marking, goal for EFC 1-1. Putain Mirallas. Liverpool 1 - 1 Everton. Goodison erupts as Mirallas prods home from a Baines free kick. EFC 1 LFC 1. What a start to a derby! Goal! Mirallas grabs an equaliser. EFC right back in it. What a start to the game ! 2 goals in 7 minutes . Merseyside Derby . 85 B.3 Derde videofragment: Manchester United - Arsenal, penaltyfase Dit videofragment is te bekijken of te downloaden op http://www.gertjangoossens.be/ Masterproef/Fragment3.mp4. De commentaarfragmenten die in de vragenlijst werden opgenomen worden gegeven zijn de volgende: Commentaar - Phrase Reinforcement op Manchester United-tweets In formation at HT. Is this Goal a msg to that corner!.mufc. Like a team thats won the league before. Giroud gets his head on it had to be him didn’t it? RVP got on a deflected cross, but he’s a long way out and. Of my chilled favMUFC. For Free ”Crucifi X: RT4RT? . We’ll do what we are around the world, twice the amount of energy. Cheering for Man U very strong persie! You go ahead and celebrate vs. former teams”garbage. These are grown men. It’s sad If RvP celebrating hurts their feelings. We gonna take the lead till the very end. Commentaar - Selectietechniek op Arsenal-tweets This match is slow. Arsenal vs. You say?”piersmorgan: We’re in complete control. Maybe you are watching it in slow motion piersmorgan: We’re in complete control. FUCKING RIGHT piersmorgan: We’re in complete control. Afc. Yh, ur team was in complete control of d ”Park Da Bus”formation b4 RVP burst ur bubble. piersmorgan: We’re in complete control. Afc the game is still young we will still turn the tables. ”piersmorgan: We’re in complete control. Afc”Madting. Maybe not”piersmorgan: We’re in complete control. Not looking good for Arsenal. it may get worse in the second half if TheBoyWonder enters the match! AFC this game is way too big for Aaron Ramsey. Come on Arsenal! come on Arsenal! come on Arsenal! come on Arsenal! come on Arsenal! come on Arsenal! come on Arsenal! Commentaar - Selectietechniek op alle tweets We haven’t turned up so far for this game. We are better than this. Arsenal can only win this when they control the game but as it is now, MUFC is owning it. LOL ”captainugros: UNITED 1 - CONTROL 0 piersmorgan: We’re in complete control. Nobody knows how to play Arsenal better than ManchesterUnited, absolutely nobody! United’s passing has been really good. Something which we definitely lack. Arsenal need to keep the ball more! Penalty. Wtf. That was a penalty. United united united! Manchester united! We are back, and with a BANG! Valencia shouldn’t be allowed to cross the ball likewise to Rooney he shouldn’t make a turn while the ball is on his right foot. ? mufc rvp he scores when he wants! Containing the rest of the hype til the match is over never know what 86 can happen in these games ? ”piersmorgan: We’re in complete control. Afc”lol. That looked shoulder to shoulder on Rooney. Commentaar - Phrase Reinforcement op alle tweets ”piersmorgan: We’re in complete control. Haven’t really got going in complete control. Love ma GirlFriend. BusbyMUFC insideManutd;. Over o: tweetDapsyn: Cracker heading from OUTSIDE THE BOX FFS! We’re in complete control. Know just changed. If we continue playing like this we will lose. We’re in complete control. Come on it. With the header and WayneRooney with this ”don’t celebrate vs. former teams”garbage. Thees are grown men. It’s sad If RvP celebrating hurts their feelings. ”piersmorgan: We’re in complete control. For Free ”Crucifi X: RT4RT?. Commentaar - Originele commentaar Smalling, Kagawa, Rooney, Valencia, away from Vermaelen! Flashed right across behind the penalty spot. Played out by Ramsey, he’s not happy with his clearance. Rooney. Long ball by Evans. Again by Smalling. United are in the perfect zone, man to man, but I would prefer, certainly as a coach, to just be getting blocks on Luis (Valencia), because if you give him a chance for a running job, it’s very hard to deal with. They’re gonna have the advantage. If you stop the run, you get arms and bodies in the way, I think it helps your case enormously. Taken by Kagawa, he has only Van Persie in advance of him. Rooney’s squre, and now Valencia getting up as well. Kagawa. Here comes Evra. Koscielny away of Rooney, but it comes back to Rooney from an Arsenal player. Ronney went over, thinks he should have a penalty, but the referee, looking through a crowd, thought otherwise. B.4 Vierde videofragment: Sunderland - Manchester United, doelpunt Craig Gardner (S) Dit videofragment is te bekijken of te downloaden op http://www.gertjangoossens.be/ Masterproef/Fragment4.mp4. De commentaarfragmenten die in de vragenlijst werden opgenomen worden gegeven zijn de volgende: Commentaar - Phrase Reinforcement op alle tweets Go wild, wild, wild! we’ll go wild.wild.wild. Under way at Sunderland as they take on Man Utd in the. Come on United! RANDOM FACT: Manchester United Football Club is an English professional football club, based in Old Trafford, Greater Manchester, that plays in the Premier League. Founded as Newton Heath LYR Football Club in 1878, the club changed its name to Manchester 87 United in 1902 and moved to Old Trafford in 1910. We are HERE again! 1 point as usual ”MUFCSupport: LET’S GET something tonight, think Kevin Ball’s attitude as a player will help me sleep at the Stadium. Is in week out! Fuck off. Come onn mann wtf. We are so damn screwed with this sort of defending! down already! U sure its man u’s match or u r fflin d commentary on United! Bring out the flare that was. Is this a bad dream? Please tell me this may be a loong 90 mins. Come on Sunderland. What was the defence doing! What the fuckin hell was that AWFUL! With the strike, Vidic with the poor attempted clearance again. We can’t clear! Commentaar - Phrase Reinforcement op Manchester United-tweets So Come on. Under way at Sunderland as they take on Man Utd in the. Come on United! Come on United! RANDOM FACT: Manchester United Football Club is an English professional football club, based in Old Trafford, Greater Manchester, that plays in the Premier League. Founded as Newton Heath LYR Football Club in 1878, the club changed its name to Manchester United in 1902 and moved to Old Trafford in 1910. Is in week out! Fuck off. Shit are united. Is so so so poor. What a goal, amazing manutd defending that was. come on Sunderland. Here we go again. From vidic what the hell was that AWFUL! Watching the game is on Utd! In play now but not happy about it. What THE ACTUAL FUCK?! Commentaar - Originele commentaar It’s quite a chance today, for the 18 year old, Belgium born player, Adnan Januzaj. What do you make of him? Well he’s a real talent. Great pass play, not saying he is the quickest of players, but there is a balance about him. He was fantastic in pre-season. Fully deserves his chance. He could boost up his own value with a good performance here today. Played back by Phil Jones. This is Nemanja Vidic. De Gea was just a spectator here, last seasons. He was out for a long period, after crashing into his own player, Vidic. It was a flat Sunderland performance that day. Perhaps these first four minutes, they were better than the whole 90 minutes back then. Here’s Giaccherini. He’s got away from Patrice Evra. Looked for Altidore with a cross. Jones, oh it’s come back! And Gardner strikes, and Sunderland strike early. And what a boost that is for the home side! The bottom side in the divison lead the champions! Craig Gardner scores! Commentaar - Selectietechniek op Manchester United-tweets So come on david moyes, play like fergie’s boys. we’ll go wild, wild, wild! we’ll go wild, wild, wild! Probably the only match I want MUFC to win! We really can’t keep the football can we. RANDOM FACT: Manchester United Football ... (afgebroken) 88 Game on! Come on you, lads! RANDOM FACT: Manchester United Football Club is an English professional football club, based in Old Trafford, Greater Manchester, that plays in the Premier League. Founded as Newton Heath LYR Football Club in 1878, the club changed its name to Manchester United in 1902 and moved to Old Trafford in 1910. Vidic is a liability at the moment. The pub down the road LFC MUFC. Sunderland 1-0. Again terrible defending by United. Mufc fuck !:’(:’(:’(. Goal. Sunderland 1 - 0 Manchester United. What a way to start Sunderland? Are you fuckin serious! what is going on Davey? Dear oh dear this not good at all. Commentaar - Selectietechniek op alle tweets So come on david moyes, play like fergie’s boys. we’ll go wild, wild, wild! we’ll go wild, wild, wild! Probably the only match I want MUFC to win! We really can’t keep the football can we. Game on! Come on you, lads! Mufc: David Moyes should keep the suits off and go for the track down. RANDOM FACT: Manchester United Football Club is an English professional football club, ...(afgebroken) Come on! Get the fuck in! Mufc wtf was that ? Come onn mann wtf. The pub down the road LFC MUFC. Sunderland 1-0. Again terrible defending by United. Really really, Manutd. Moyes what are you doing. Horrible, horrible start. Clear. The. Ball. What a way to start Sunderland? Hahahaha Sunderland up on ManUtd thanks to Vidic’s fuck up. B.5 Vijfde videofragment: Arsenal - Liverpool, vervanging Dit videofragment is te bekijken of te downloaden op http://www.gertjangoossens.be/ Masterproef/Fragment5.mp4. De commentaarfragmenten die in de vragenlijst werden opgenomen worden gegeven zijn de volgende: Commentaar - Selectietechniek op alle tweets Aaron Ramsey is utterly brilliant. 2-0 to the Arsenal. I don’t hear the Liverpool fans. We love you Arsenal we do We love you Arsenal we do We love you Arsenal we do ARSENAL, WE LOVE YOU! This game is not over yet. It’s all quiet it’s all quiet over there ZunaiD wasim t93 nbalera mweezy6. What a shit game this is. WE ARE TOP OF THE LEAGUE , SAY WE ARE TOP OF THE LEAGUE. Oh so proud to be a. ”ArtisticArsenal: WERE TOP OF THE LEAGUE, WERE TOP OF THE LEAGUE. ARSENAL FOOTBALL CLUB, WERE TOP OF THE LEAGUE! This is a quality Arsenal side! 89 Wenger OUT! Be happy for Monreal and Vermaelen to come on now and just calmly see the game out! It’s my Game ,it’s my pattern.en besides am at Home. Struggling to keep possession in the last 10 minutes, need to settle the game down. What a game! This is wonderful to watch! Honestly though, I think we look a touch complacent today. One more goal. One more goal. And this is sealed. COYG. Monreal on for Rosicky. 2-0 (71). Rosicky off, Monreal on Arsenal still 2-0 to the good. Commentaar - Originele commentaar Giroud. Gerrard. Coutinho. Szczesny bowls it out. Skrtel is watchful enough to go across. Monreal is ready to come on for Arsenal. We’ve seen him many times this season. He usually comes on not at left back, but at left midfield, in place of Cazorla or zil. Jordan Henderson with the early cross towards Sturridge. What an opportunity. Brilliant cross from Henderson, he’s done well since he’s gone to right back. It might be Ramsey coming off. Here’s the run of Ramsey, good first touch from him, great second touch. Great strike, Mignolet had absolutely no chance. Does zil get another assist for that little pass? Tomas Rosicky making way. Nacho Monreal, the Spaniard, takes his place. Commentaar - Phrase Reinforcement op Arsenal-tweets He is in the world, he could of been one of the best players in the mafia? We love you Arsenal we do in January. hate to see you know what to do We can win this! :D. Is in great form. AFCvLFC Arsene ¡3. ”piersmorgan: Come on Chomper, you know what to do in January. hate to see you suffer like this. luis16suarez. I could wish i can’t :( don’t worry u’l get enough of 12-15 years. In January. hate to see you know what to do in the last 20 minutes is needed to ensure our win it! Is off. Being outplayed by Arsenal. ARSLIV MISSING JOHNSON SO BADLY RIGHT NOW. Commentaar - Selectietechniek op Liverpool-tweets Moses is on to part the Red Sea. So Rodgers takes out Flanagan and replaces him with Moses so who plays Right Back Now SMH. What a shit game this is. I can’t see any way back in this game. Apart from the first 10 mins we’ve been poor today. Bitterly disappointed. WE ARE TOP OF THE LEAGUE , SAY WE ARE TOP OF THE LEAGUE. Arsenal 2 liverpool 0 with 20 mins to go. Whats gonna happen next? :p. Be happy for Monreal and Vermaelen to come on now and just calmly see the game out! When at their best, watching Arsenal is like watching Barcelona. It’s my Game ,it’s my pattern.en besides am at Home. What a game! This is wonderful to see! What a game! This is wonderful to watch! ”ckeogh1971: Luis, you wanna win the title ? You wanna play Champions league ? You know what to do. FreeSuarez AFCVLFC”hahahaha. Rosicky off Monreal on. Great shift Tomas. 90 Commentaar - Phrase Reinforcement op alle tweets With moses on. It’s all quiet it’s. ”piersmorgan: Come on Chomper, you know what to do in January. hate to see you suffer like this. luis16suarez. ”piersmorgan: Come on Chomper, you know what to do in January. hate to see you suffer like. In the EPL, it’s the jersey. Need something special to clinch this back. Possible. WERE TOP of the hatred from our tea am tonight is upset CarolRadull. In it for giving hom the chance. So secured sia. You all night! You beautiful, beautiful man. I see why Suarez wants to that 5-point gap :D. At the moment! To Ozil? He needs to learn how we play from OlivierGiroud 2-0 (71). I think Real Madrid bought the wrong welsh man. I agree iamLiQuiD: Ur vision blur bro”0Lamlde: I do like Henderson at right back. 91 Bijlage C Overzicht van de verzamelde datasets In het kader van deze masterproef werden tweets verzameld tijdens 22 verschillende wedstrijden uit de Engelse Premier League. Deze wedstrijden vonden plaats tussen september 2013 en december 2013. Niet alle sets waren echter bruikbaar. Tijdens een deel van de wedstrijden bleken er immers niet genoeg tweets te zijn om een kwalitatieve commentaarstroom te genereren. Na filtering bleven er nog minder tweets over. Tabel C.1 geeft een overzicht van alle verzamelde data. Het aantal tweets dat hier vermeld wordt, is het aantal tweets dat tijdens de 90 minuten verstuurd werd. Daarnaast wordt ook het aantal tweets voor de thuisploeg en de uitploeg individueel weergegeven. De som van deze aantallen is groter dan het totale aantal tweets voor de wedstrijden. Dit komt doordat bepaalde hashtags overlappen. Sommige gebruikers gebruiken namelijk hashtags van beide teams in hun tweets. Ook de algemene hashtags voor de wedstrijd (bijvoorbeeld: #ARSLIV, #AFCvLFC) kunnen voor beide teams gebruikt worden. 92 93 Datum Arsenal - Liverpool 2 november 2013 Arsenal - Norwich 19 oktober 2013 Chelsea - West Bromwich Albion 9 november 2013 Crystal Palace - Arsenal 26 oktober 2013 Everton - Liverpool 23 november 2013 Everton - Newcastle United 30 september 2013 Fulham - Manchester United 2 november 2013 Liverpool - Crystal Palace 5 oktober 2013 Manchester City - Everton 5 oktober 2013 Manchester United - Arsenal 10 november 2013 Manchester United - Stoke City 26 oktober 2013 Newcastle United - Chelsea 2 november 2013 Newcastle United - Liverpool 19 oktober 2013 Norwich - Chelsea 6 oktober 2013 Sunderland - Arsenal 14 september 2013 Sunderland - Manchester City 10 november 2013 Sunderland - Manchester United 5 oktober 2013 Sunderland - Newcastle United 27 oktober 2013 Swansea - Liverpool 16 september 2013 Tottenham - Chelsea 28 september 2013 Tottenham - Manchester United 1 december 2013 West Bromwich Albion - Arsenal 6 oktober 2013 Wedstrijd 115278 83560 30112 59518 65656 27127 50019 43001 14752 116485 50808 45596 53458 33732 83590 7344 68468 15415 48683 50587 47888 52720 Totaal aantal tweets 92005 74342 26061 26950 40102 14249 10524 13716 10029 70516 48141 24980 30309 8001 27096 4050 17520 7575 13228 24937 21832 23503 Aantal tweets (T) Tabel C.1: Een overzicht van de verzamelde data 73631 35987 9009 53303 58073 16007 45030 39922 7626 75572 4555 31110 43401 28986 69871 5184 59420 11476 42986 40906 37792 46920 Aantal tweets (U) Bibliografie [1] HTC. Voetbalfan in stadion twittert meer dan kijker thuis, May 2014. URL http://www.marketingtribune.nl/online/nieuws/2013/10/ voetbalfan-in-stadion-twittert-meer-dan-kijker-thuis/index.xml. [2] Wayne Xin Zhao, Jing Jiang, Jianshu Weng, Jing He, Ee-Peng Lim, Hongfei Yan, en Xiaoming Li. Comparing Twitter and Traditional Media Using Topic Models. In Proceedings of the 33rd European conference on Advances in information retrieval, ECIR’11, pages 338–349, Berlin, Heidelberg, 2011. Springer-Verlag. ISBN 978-3-64220160-8. [3] Fernando Perez-Tellez, David Pinto, John Cardiff, en Paolo Rosso. On the difficulty of clustering company tweets. In Proceedings of the 2nd international workshop on Search and mining user-generated contents, SMUC ’10, pages 95–102, New York, NY, USA, 2010. ACM. ISBN 978-1-4503-0386-6. [4] Alan Ritter, Sam Clark, en Oren Etzioni. Named entity recognition in tweets: an experimental study. In Proceedings of the Conference on Empirical Methods in Natural Language Processing, pages 1524–1534. Association for Computational Linguistics, 2011. [5] Smitashree Choudhury en John G. Breslin. Extracting semantic entities and events from sports tweets. In Proceedings, 1st Workshop on Making Sense of Microposts (#MSM2011): Big things come in small packages, pages 22–32, 2011. [6] Siqi Zhao, Lin Zhong, Jehan Wickramasuriya, en Venu Vasudevan. Human as realtime sensors of social and physical events: A case study of Twitter and sports games. 2011. [7] Omar Alonso en Kyle Shiells. Timelines as Summaries of Popular Scheduled Events. In Proceedings of the 22nd international conference on World Wide Web companion, pages 1037–1044. International World Wide Web Conferences Steering Committee, 2013. 94 [8] Takashi Kobayashi, Tomokazu Takahashi, Daisuke Deguchi, Ichiro Ide, en Hiroshi Murase. Detection of Biased Broadcast Sports Video Highlights by Attribute-Based Tweets Analysis. In Shipeng Li, Abdulmotaleb El-Saddik, Meng Wang, Tao Mei, Nicu Sebe, Shuicheng Yan, Richang Hong, en Cathal Gurrin, editors, MMM (2), volume 7733 of Lecture Notes in Computer Science, pages 364–373. Springer, 2013. ISBN 978-3-642-35728-2. [9] Alchemy API, February 2014. URL http://www.alchemyapi.com/. [10] TextRazor, November 2013. URL http://www.textrazor.com/. [11] Bjornar Larsen en Chinatsu Aone. Fast and Effective Text Mining Using LinearTime Document Clustering. In Proceedings of the fifth ACM SIGKDD international conference on Knowledge discovery and data mining, KDD ’99, pages 16–22, New York, NY, USA, 1999. ACM. ISBN 1-58113-143-7. [12] Kevin Dela Rosa, Rushin Shah, Bo Lin, Anatole Gershman, en Robert Frederking. Topical Clustering of Tweets. In Proceedings of SIGIR Workshop on Social Web Search and Mining, 2011. [13] Daniel Ramage, Susan T. Dumais, en Daniel J. Liebling. Characterizing Microblogs with Topic Models. In William W. Cohen en Samuel Gosling, editors, ICWSM. The AAAI Press, 2010. [14] Freddy Chong Tat Chua en Sitaram Asur. Automatic Summarization of Events From Social Media. 2013. [15] Jagan Sankaranarayanan, Hanan Samet, Benjamin E. Teitler, Michael D. Lieberman, en Jon Sperling. TwitterStand: News in Tweets. In Proceedings of the 17th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems, GIS ’09, pages 42–51, New York, NY, USA, 2009. ACM. ISBN 978-1-60558-649-6. [16] Brendan O’Connor, Michel Krieger, en David Ahn. TweetMotif: Exploratory Search and Topic Summarization for Twitter. In Proceedings of the 4th International AAAI Conference on Weblogs and Social Media (ICWSM), 2010. [17] Carlos Martin, David Corney, en Ayse G¨oker. Finding Newsworthy Topics on Twitter. October 2013. [18] Duan YaJuan, Chen Zhimin Wei Furu, Thou Ming, en Heung-Yeung Shum. Twitter Topic Summarization by Ranking Tweets Using Social Influence and Content Quality. In Proceedings of the 24th International Conference on Computational Linguistics, pages 763–780, Mumbai, India. 95 [19] Saˇsa Petrovi´c, Miles Osborne, en Victor Lavrenko. Streaming first story detection with application to Twitter. In Human Language Technologies: The 2010 Annual Conference of the North American Chapter of the Association for Computational Linguistics, pages 181–189. Association for Computational Linguistics, 2010. [20] Miles Osborne, Saˇsa Petrovi´c, Richard McCreadie, Craig Macdonald, en Iadh Ounis. Bieber no more: First story detection using Twitter and Wikipedia. In Proceedings of the Workshop on Time-aware Information Access. TAIA, volume 12, 2012. [21] Seen. De jacht op Dzhokar Tsarnaev na de Boston Bombings, February 2014. URL http://seen.co/event/ the-hunt-for-dzhokhar-tsarnaev-boston-ma-2013-6934/. [22] Beaux Sharifi, Mark-Anthony Hutton, en Jugal K. Kalita. Automatic Summarization of Twitter Topics. 2010. [23] Beaux Sharifi, Mark-Anthony Hutton, en Jugal K. Kalita. Summarizing Microblogs Automatically. In Human Language Technologies: The 2010 Annual Conference of the North American Chapter of the Association for Computational Linguistics, HLT ’10, pages 685–688, Stroudsburg, PA, USA, 2010. Association for Computational Linguistics. ISBN 1-932432-65-5. [24] Jeffrey Nichols, Jalal Mahmud, en Clemens Drews. Summarizing sporting events using Twitter. In Proceedings of the 2012 ACM international conference on Intelligent User Interfaces, pages 189–198. ACM, 2012. [25] Beaux Sharifi, Mark-Anthony Hutton, en Jugal K. Kalita. Experiments in Microblog Summarization. In Social Computing (SocialCom), 2010 IEEE Second International Conference on, pages 49–56, 2010. [26] David Inouye en Jugal K. Kalita. Comparing Twitter Summarization Algorithms for Multiple Post Summaries. In Privacy, security, risk and trust (passat), 2011 IEEE third international conference on social computing (socialcom), pages 298–306, 2011. [27] Deepayan Chakrabarti en Kunal Punera. Event Summarization Using Tweets. In Proceedings of the 5th International AAAI Conference on Weblogs and Social Media (ICWSM), 2011. [28] Kristina Toutanova en Christopher D. Manning. Enriching the knowledge sources used in a maximum entropy part-of-speech tagger. In Proceedings of the 2000 Joint SIGDAT conference on Empirical methods in natural language processing and very large corpora: held in conjunction with the 38th Annual Meeting of the Association for Computational Linguistics-Volume 13, pages 63–70. Association for Computational Linguistics, 2000. 96 [29] Kristina Toutanova, Dan Klein, Christopher D. Manning, en Yoram Singer. Featurerich part-of-speech tagging with a cyclic dependency network. In Proceedings of the 2003 Conference of the North American Chapter of the Association for Computational Linguistics on Human Language Technology-Volume 1, pages 173–180. Association for Computational Linguistics, 2003. [30] Leon Derczynski, Alan Ritter, Sam Clark, en Kalina Bontcheva. Twitter Part-ofSpeech Tagging for All: Overcoming Sparse and Noisy Data. In Proceedings of the International Conference on Recent Advances in Natural Language Processing. Association for Computational Linguistics, 2013. [31] Kevin Gimpel, Nathan Schneider, Brendan O’Connor, Dipanjan Das, Daniel Mills, Jacob Eisenstein, Michael Heilman, Dani Yogatama, Jeffrey Flanigan, en Noah A. Smith. Part-of-speech tagging for Twitter: Annotation, features, and experiments. In Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies: short papers-Volume 2, pages 42–47. Association for Computational Linguistics, 2011. [32] Olutobi Owoputi, Brendan OConnor, Chris Dyer, Kevin Gimpel, Nathan Schneider, en Noah A. Smith. Improved part-of-speech tagging for online conversational text with word clusters. In Proceedings of NAACL-HLT, pages 380–390, 2013. [33] Alan Ritter, Sam Clark, Mausam, en Oren Etzioni. Named Entity Recognition in Tweets: An Experimental Study. In EMNLP, 2011. [34] Alan Ritter, Mausam, Oren Etzioni, en Sam Clark. Open Domain Event Extraction from Twitter. In KDD, 2012. [35] OpenNLP, April 2014. URL http://opennlp.apache.org/index.html. [36] Joel Judd en Jugal Kalita. Better Twitter Summaries? In Proceedings of NAACLHLT, pages 445–449, 2013. [37] Irene Langkilde-Geary. An empirical verification of coverage and correctness for a general-purpose sentence generator. In Proceedings of the 12th International Natural Language Generation Workshop, pages 17–24, 2002. [38] Md. Jahangir Alam, Naushad UzZaman, en Mumit Khan. N-gram based statistical grammar checker for Bangla and English. 2006. [39] Google Translate TTS, November 2013. URL https://code.google.com/p/ java-google-translate-text-to-speech/. [40] Mary TTS web client, May 2014. URL http://mary.dfki.de:59125/. 97 [41] FreeTTS, November 2013. URL http://freetts.sourceforge.net/docs/index. php. [42] Language Detection Library for Java, April 2014. URL https://code.google.com/ p/language-detection/. [43] DBPedia Spotlight, April 2014. URL http://spotlight.dbpedia.org. [44] DBPedia, April 2014. URL http://dbpedia.org. [45] Caprica Software. The vlcj project, April 2014. capricasoftware.co.uk/projects/vlcj/index.html. 98 URL http://www.
© Copyright 2024 ExpyDoc