qwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwer tyuiopasdfghjklzxcvbnmqwerty WHICH MOVIE? Van text-mining naar een quiz uiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiop asdfghjklzxcvbnmqwertyuiopas dfghjklzxcvbnmqwertyuiopasdf ghjklzxcvbnmqwertyuiopasdfgh jklzxcvbnmqwertyuiopasdfghjkl zxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcv bnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmrtyui Tim van Bremen Jan-Martin Sijs Docent: Ork de Rooij
Inhoud Introductie ............................................................................................................................................. 2 Voorziene problemen ......................................................................................................................... 2 Onderzoeksvraag.................................................................................................................................... 2 Subvragen....................................................................................................................................... 2 Methode ................................................................................................................................................ 3 Constructie van quiz ........................................................................................................................... 3 Data-verzamelen ............................................................................................................................ 3 Informatie-verzamelen ................................................................................................................... 4 Vragengenerator ............................................................................................................................ 4 ....................................................................................................................................................... 4 Scoringsmodule .............................................................................................................................. 4 Classifier ......................................................................................................................................... 5 User-testing .................................................................................................................................... 5 Resultaten .............................................................................................................................................. 6 Classifier ......................................................................................................................................... 6 User-testing .................................................................................................................................... 6 Conclusie ................................................................................................................................................ 6 Discussie ................................................................................................................................................. 6 Classifiers............................................................................................................................................ 6 Opties ................................................................................................................................................. 7 Algemene limitaties ............................................................................................................................ 7 Future work ............................................................................................................................................ 7
1
Introductie Er is zeer veel informatie over films beschikbaar op het internet. De meeste van deze informatie komt van de bekende filmsite Internet Movie Database (IMDb). Er zijn echter ook andere sites te vinden met data over films. Zo is er MoviePooper.com, een website die het einde van meer dan 4000 films beschreven door gebruikers heeft opgeslagen. Deze data kan natuurlijk voor verschillende doeleinden gebruikt worden, zoals het ‘verklappen’ van het einde van de film nadat iemand tweet dat hij op het punt staat die film te gaan kijken. Uiteindelijk zijn we op het idee gekomen om een quizvraag-generator te maken, met als input de data uit MoviePooper.com en als output een leuke quiz met multiple choice vragen. Deze quiz zou dan weer nuttig kunnen zijn als een ‘tijdvuller’ wanneer er op een dvd een laadscherm is. Het zou natuurlijk ook een stand-alone spel kunnen zijn, maar in een speciaal quiz spel (zoals Buzz op de Sony Playstation 3) zou de quiz het best tot zijn recht komen.
Voorziene problemen Door inconsistente en ‘slechte’ HTML is het echter moeilijk om ervoor te zorgen dat elke vraag 1) goed leesbaar is 2) beantwoordbaar is en 3) leuk is om te beantwoorden. Met text-miningtechnieken in Python is het mogelijk om de inhoud van de website te downloaden en te verwerken zodat er per film een filmtitel en stuk tekst uitgehaald kan worden met de beschrijving van het einde van de desbetreffende film. Omdat de extractie van deze informatie automatisch gebeurt, worden sommige filmtitels of fragmenten (einde van de film) niet juist gemined. Dit kan ervoor zorgen dat de quiz vragen bevat die niet beantwoordbaar, slecht leesbaar of niet leuk zijn. Om dit te voorkomen is het nuttig de quizvragen te classificeren en de ‘slechte’ filmtitels plus fragmenten te filteren zodat de quiz alleen goede vragen bevat. Met deze punten in het achterhoofd zijn de volgende onderzoeks- en subvragen geformuleerd.
Onderzoeksvraag OV: Is het mogelijk om een 'Over welke film gaat dit tekstfragment?'-quiz te maken met behulp van data uit MoviePooper.com? Subvragen SV1: Kan met behulp van de Naive Bayes Classifier of de Decision Tree Classifier de quiz worden verbeterd? SV2: Hoe ervaren gebruikers de quiz?
2
Methode Om tot een antwoord op de onderzoeksvraag (Is het mogelijk om zo een quiz te maken?) te komen zijn we het simpelweg maar gaan proberen in Python. Dit is het langste en meest uitdagende proces van dit onderzoek geweest, maar desalniettemin het leukste. Ten eerste is de quiz gebouwd. Dit proces is beschreven in ‘Constructie van quiz’. Daarna is onderzocht of een classifier kan helpen met het filteren van foute fragmenten, zoals beschreven in ‘classifier’. Na het voltooien van de quiz is deze aan een aantal users voorgelegd, zoals beschreven in ‘User testing’. De resultaten hiervan tezamen met de resultaten van de classifier worden besproken in ‘Resultaten’.
Constructie van quiz Om tot de uiteindelijke quiz te komen moesten er een aantal stappen worden doorlopen. De gewenste informatie moest geëxtraheerd worden uit de dataset en daaruit moesten de vragen, correcte antwoorden en alternatieve antwoorden gegenereerd worden. De gebruiker moest bovendien een antwoord in kunnen voeren en dit antwoord moest vergeleken worden met het correcte antwoord om vervolgens te kunnen beoordelen of het antwoord correct is. Daarnaast moest er een eindscore berekend worden om een indicatie te geven van de prestatie van de gebruiker op de test. Deze processen en de aanpak hiervan zijn hieronder uitgewerkt. Data-verzamelen De dataset bestond uit de inhoud van de website http://www.moviepooper.com. De website maakt gebruik van drie frames, waarvan twee statische frames: bovenaan de website één voor de titel en een hoofdmenu en aan de linkerkant één met de lijst van alle films (pas zichtbaar wanneer men in het hoofdmenu op ‘List all’ klikt) Na het klikken op een film in de lijst verandert het derde en grootste frame in een pagina met informatie over de betreffende film. Dit is de pagina waar de voor de quiz gewenste informatie Figuur 1. Moviepooper.com te vinden is. Echter bevind deze pagina zich in een frameset, terwijl het eenvoudiger is om enkel de pagina in het frame stand-alone te verwerken. Dit kan eenvoudig door de links uit de lijst met alle films in een nieuw venster te openen (voorbeeld: http://www.moviepooper.com/3/1000.html). Om de data geschikt te maken voor verwerking hebben we de link van elke film in de lijst gemined en de broncode hiervan opgeslagen in een tekstbestand. Het resultaat was een map met een 4069 tekstbestanden met broncode: voor elke film één tekstbestand. Bijbehorende python-file: verkrijgdingen.py
3
Informatie-verzamelen Om de quiz te kunnen maken hadden we van elke film twee elementen nodig: 1) de titel en 2) de laatste paragraaf van de beschrijving. Voor beide elementen zijn python-functies geschreven. De functie filter_titel_fragment output voor elke film als input een tabel met de titel en de laatste paragraaf. Vragengenerator Om gebruikt te worden in de vragengenerator wordt de functie filter_titel_fragment toegepast op een vast aantal - doch willekeurig geselecteerde - bestanden (250) uit de lijst van 4069 bestanden. Dit gebeurt in de functie maak_lijst_titels_fragmenten. Er is nu dus een lijst van 250 titels en bijbehorende fragmenten gegenereerd. Dit aantal kan worden aangepast, maar er is gekozen voor 250 in verband met de laadtijd van het programma. Deze lijst wordt in de quiz functie als input gebruikt om vijf verschillende vragen te genereren (dit aantal is uiteraard aan te passen). Elke vraag begint met de laatste paragraaf van een film en heeft vijf verschillende filmtitels als antwoordmogelijkheden. De vijf fragmenten en 30 antwoordmogelijkheden van de vijf vragen komen dus voort uit een lijst van 250 fragmenten en 250 filmtitels. Samen met een controle op duplicaten zorgt dit ervoor dat de fragmenten en antwoordmogelijkheden voor elke vraag verschillend zijn en in een willekeurige volgorde worden gepresenteerd. De speler moet natuurlijk ook de mogelijkheid hebben om een antwoord kunnen geven. Dit gebeurt door middel van het toetsenbord. De vijf Figuur 2 Screenshot quiz antwoordmogelijkheden zijn elk verbonden met één van de letters A, B, C, D en E. De deelnemer kan een van deze letters indrukken en op enter drukken om het antwoord in te voeren.
Figuur 3 Screenshot score Scoringsmodule Om een indicatie te geven van de prestatie van de deelnemer is een scoringsmodule ontworpen. Er is gekozen voor een scoringssysteem dat niet alleen het aantal juiste antwoorden meerekent, maar ook de gemiddelde tijd die de gebruiker per vraag nodig heeft. Op deze manier is geprobeerd te voorkomen dat deelnemers een hoge score kunnen halen wanneer ze het juiste antwoord op internet op gaan zoeken. Iemand met veel kennis van films zal immers sneller de vragen juist kunnen beantwoorden dan iemand die elke vraag op moet zoeken. Met dit systeem is getracht de quiz leuker en eerlijker te houden, zodat een persoon met veel filmkennis een hogere score kan behalen dan iemand zonder filmkennis. De uiteindelijke formule die is gebruikt in de quiz is hieronder weergegeven:
4
Formule 1. Berekening eindscore. N = aantal vragen en Tgem = gemiddelde tijd per vraag.
Classifier De titels en fragmenten afkomstig uit de python-functies waren door verschillende aspecten niet geheel foutloos. Er is gekeken of een classifier in staat zou zijn om correcte titels en fragmenten te onderscheiden van incorrecte titels en fragmenten. Om de classifier te trainen zijn 100 titels en fragmenten handmatig beoordeeld. Dit gebeurde via een speciaal hiervoor geschreven python-functie. Deze python-functie is terug te vinden in het bestand labeldata.py. Met de functies in dit python-script is het mogelijk om in een relatief korte tijd relatief veel filmtitels en fragmenten te labelen als goed of slecht.
Figuur 4 Screenshot proces handmatig beoordelen
De train set bestond uit 75 films, de testset uit 25. Er zijn vervolgens twee classifiers op de data losgelaten: de naive Bayes classifier (uit NLTK) en de decision tree classifier (ook uit NLTK). De resultaten hiervan zijn te vinden in de resultatensectie van dit verslag.
Figuur 5 Screenshot proces handmatig beoordelen
User-testing De quiz is aan een aantal mensen voorgelegd om een beeld te krijgen van de gebruiksvriendelijkheid van het systeem, de moeilijkheidsgraad van de vragen, etc. Het antwoorden gebeurde op een schaal van 1 tot 5. De volgende vragen zijn gesteld:
Hoe moeilijk vond u de quiz? (1= zeer eenvoudig, 5=zeer moeilijk) Hoe leuk was de quiz? (1=helemaal niet leuk, 5=zeer leuk) Hoe begrijpelijk waren de vragen? (1=volledig onduidelijk, 5=volledig duidelijk)
Daarnaast was er een open vraag: “Heeft u nog opmerkingen?”. De resultaten van deze korte usertest worden besproken in de resultatensectie.
5
Resultaten Classifier De classifiers presteerden als volgt: Hieruit blijkt dat de classifiers 96 en 92 procent accuraat zijn. Op de test-set van 25 films labelen de classifiers respectievelijk 2 en 3 films verkeerd. User-testing Uit de user-testing bleek dat de de quiz-vragen niet moeilijk werden bevonden, maar ook niet eenvoudig (M=2,5, sd=0,5). De quiz werd leuk gevonden, met een gemiddeld antwoord van 3,75 (sd= 0,375) op een schaal van 1 tot 5. Daarnaast werden de vragen begrijpelijk bevonden (M=4,25, sd=0,75). De opmerkingen betroffen de interface (saai), het gebrek aan Nederlandse films en toekomstmuziek als integratie met Facebook. Ook lijkt de quiz minder leuk voor mensen met weinig filmkennis dan voor mensen met veel filmkennis, al gaf een proefpersoon zonder veel verstand van films het een leuk ‘logisch redeneren spel’ te vinden.
Figuur 6 Resultaten classifiers
Conclusie Er kan geconcludeerd worden dat het mogelijk is om een 'Over welke film gaat dit tekstfragment?'quiz te maken met behulp van data uit MoviePooper.com. Uit de user-tests blijkt dat het het daarnaast zelfs als leuk bestempeld wordt. De sub-vraag met betrekking tot de classifier kan positief worden beantwoord: een classifier kan helpen om de goede titels en fragmenten eruit te filteren. Het werkt nog niet perfect, maar het zou al een stap kunnen zijn in de juiste richting. De sub-vraag met betrekking tot de gebruikerservaring kan ook worden beantwoord. De gebruikers van de quiz vonden het over het algemeen leuk om te spelen, vonden de vragen begrijpelijk en niet te moeilijk. Dit is ook wat we wilden bereiken. Uit de open vraag bleek echter dat de quiz zeer zeker voor verbetering vatbaar is. Hier wordt dieper op ingegaan in de discussie.
Discussie Classifiers De classifiers die gebruikt zijn om de slechte vragen van de goede vragen te onderscheiden zouden eigenlijk geïmplementeerd moeten worden in de quiz. Op deze manier zouden er meer goede vragen kunnen worden gebruikt waardoor de quiz beter en leuker wordt. Daarnaast zouden de classifiers zelf ook verbeterd moeten worden: beide classifiers hebben namelijk wel zeer vaak de goede vragen correct, maar halen er weinig slechte uit. Dit is natuurlijk nog niet ideaal.
6
Het probleem wat de classifiers zouden moeten oplossen, namelijk de fouten die de functie maak_lijst_fragmenten_titels uit quiz.py maakt bij het minen van de data eruit halen, zou eigenlijk volledig voorkomen moeten worden. Het zou een stuk beter zijn om bijvoorbeeld een heel andere dataset te pakken, zoals IMDb. IMDb heeft bij vele films ook een stukje tekst over de inhoud van de film waar het einde vaak in staat beschreven. Omdat IMDb een meer consitente HTML-opmaak heeft, is het voor ons makkelijker daar altijd ‘goede’ data vandaan te halen.
Opties Uit de korte gebruikerstests die zijn uitgevoerd bleek dat de vragen zelf leuk waren en dat de quiz uitdagend genoeg was. Er waren echter wel enkele opmerkingen over de gebrekkige interface. Een terminal-schermpje leest natuurlijk niet zo lekker als een ‘flashy’ website. Wij zijn het hier zelf ook mee eens: om dit een succesvol spel te maken, moet de interface ook mooi zijn en lekker werken. Oorspronkelijk waren we dit ook van plan te doen, maar het bleek toch lastiger dan verwacht om een python script te laten draaien via PhP op de UvA-student server. Ook lijkt het een leuk idee om meer opties toe te voegen aan de quiz, zoals een optie om ook Nederlandse films mee te nemen, alleen vragen over films te tonen met een door de gebruiker ingestelde acteur erin en een optie waarmee de gebruiker de moeilijkheidsgraad kan instellen.
Algemene limitaties Door een korte tijdspanne en een gebrek aan ervaring met de implementatie van python op een website hebben we niet alles kunnen doen wat we wilden. De user testing had eigenlijk uitgevoerd moeten worden met een veel grotere groep participanten; nu kunnen er natuurlijk geen uitspraken worden gedaan over de gehele doelgroep voor deze quiz. De quiz had eigenlijk online moeten zijn gekomen op een website, maar hier was helaas geen gelegenheid meer voor.
Future work Naast de in de discussie genoemde verbeterpunten om de quiz te verbeteren zijn er ook andere business-mogelijkheden voor die eventueel verbeterde verbeterde quiz te benoemen. Zo kunnen aanbieders van televisie (Ziggo, UPC, e.d.) de applicatie implementeren in hun settop-boxen, zodat hun klanten via hun televisie de quiz kunnen spelen. Dit is eveneens mogelijk voor fabrikanten van zogenaamde smart-TV’s, deze ‘slimme’ televisies hebben de mogelijkheid om apps te draaien. Onze quiz zou zo een app kunnen vormen.
7