Actuele IDFA films via Machine Learning

Machine learning lijkt wel een toverwoord. Je hoort het tegenwoordig overal. Is machine learning het zelfde als artificial intelligence? Nee. Machine learning wordt gebruikt om data te classificeren en om voorspellingen te doen. In dit artikel legt Hans-Peter het uit aan de hand van een praktijkvoorbeeld

Machine learning is de kunst van het herkennen van patronen in grote hoeveelheden data, ook wel big data genoemd. Het idee van machine learning is dat je die data gebruikt om een model te maken van de werkelijkheid. Zo’n model geef je vervolgens een input, bijvoorbeeld een plaatje van een dier, en dan genereert het een output, bijvoorbeeld “paard”.

Dit idee willen we toepassen op een concreet probleem: Interessante documentaires zoeken bij het actuele nieuws. Hiervoor gebruiken we de documentaire database van IDFA (het International Documentary Film Festival Amsterdam). Deze database bevat informatie over duizenden (op precies te zijn 13.678) documentairefilms. Lukt het om bij een nieuwsartikel een interessante documentaire aan te bevelen als verdieping? En kunnen we machine learning inzetten om dit proces te automatiseren?

MACHINE LEARNING IN HET KORT

Allereerst een korte introductie over hoe machine learning eigenlijk werkt. Het proces van machine learning gaat over het algemeen in een aantal vaste stappen.

1. Het model
In de machine learning wereld bestaan er al vele modellen die je kunt gebruiken, afhankelijk van de taak die je wilt uitvoeren. Zo zijn er modellen om data te classificeren (wel spam / niet spam), om beslissingen te nemen (linksaf / rechtsaf / remmen) of om plaatjes te herkennen (hond met bal).

Je hoeft je machine learning model dus over het algemeen niet zelf te bouwen maar wel te configureren en te trainen.

2. Verzamelen en bewerken van de data

Meestal gaat het meeste werk zitten in dit onderdeel: het verzamelen en bewerken van de data. Je beschikbare data is zelden in het formaat waarin het model er wat mee kan. Zo moet missende data aangevuld, dubbele data eruit en rare uitschieters verwijderd. Ook moeten velden die niet relevant zijn, weggelaten worden en soms moet velden worden samengevoegd. Daarnaast werken de meeste modellen beter met cijfers dan met tekst dus helpt het om dit om te zetten. Zoals ‘man’ naar 0 en ‘vrouw’ naar 1.

Winnende IDFA films

3. Trainen van het model

Hier komt het ‘learning’ deel om de hoek kijken. Vaak werkt het trainen door middel van het voortdurend geven van een input (bijvoorbeeld een plaatje) met bijbehorend resultaat (‘paard’, ‘koe’, ’hond’). Het model probeert elk plaatje te voorspellen en kijkt vervolgens hoever het ernaast zat. Het past zichzelf daarop aan. Na voldoende iteraties, dat kan 5.000 zijn maar ook 500.000 lukt het niet verder om de resultaten nog beter te krijgen. Dan is het model uitgeleerd. Als het juiste model was gekozen en het de juiste data is gevoerd, dan is het model goed genoeg om in te praktijk te worden getest.

4. Testen van het model

Voor het testen wordt niet dezelfde data gebruikt als voor het trainen van het model, maar een setje data dat expres apart is gehouden. Je wil namelijk testen of het model goede antwoorden kan geven op alle inputs en niet alleen voor de specifieke inputs die zijn gebruikt voor het trainen. Als dat laatste wel het geval is, is er sprake van overfitting: het model reageert prima op de gebruikte trainingsdata maar weet zich niet staande te houden in het wild.

5. Matching

Het model is klaar en kan gebruikt worden in de praktijk. Het trainen van eenmodel kost vaak heel veel processortijd maar gelukkig is het toepassen van eengetraind model over het algemeen helemaal niet zo zwaar

TOEGEPAST OP IDFA

Bovenstaande vijf stappen hebben we toegepast op ons probleem om de juiste documentaire film te vinden bij het actuele nieuws.

1. Het model

Als model hebben we TF*IDF/LSI genomen. LSI staat voor Latent Semantic Indexing. Dit model gebruikt een wiskundig model om verborgen relaties te vinden tussen woorden of hele teksten. Dit gebeurt door middel van het definiëren van een aantal onderwerpen (topics) elke tekst aan te geven in hoeverre de diverse topics van belang zijn op deze tekst. Het volgende stukje wordt een beetje technisch, je kunt het prima overslaan om toch de rest van het verhaal te kunnen volgen.

De topics moet je zien als assen in een n-dimensionale ruimte. Elke tekst (in ons geval de filmbeschrijving) krijgt een plek in die n-dimensionale ruimte aan de hand van hoe deze scoort op de verschillende topics/assen. Zie onderstaand voorbeeld waarin dranken automatisch zijn geordend. Je ziet de sappen bij elkaar staan, de koffies bij elkaar staan en de sterke dranken bij elkaar staan.

Dit indelen gaat geheel automatisch doordat het model woorden die in dezelfde context voorkomen dichter bij elkaar worden geplaatst. Hetzelfde doen we met de IDFA filmbeschrijvingen maar dan in een 1000- dimensionale ruimte.

Het vinden van de meest relevante film bij een nieuwsitem is een kwestie van een relevant nieuwsartikel op dezelfde manier een plek geven in deze ruimte en dan kijken welke film daar het dichtste bij in de buurt staat.

Dranken ingedeeld naar de context waarin ze voorkomen

2. Verzamelen en bewerken van de data

De data bestaat uit de 13.678 documentairefilms die IDFA in de database heeft staan. Per film halen we de titel, de omschrijving en de samenvatting op. Dit gaat door een aantal bewerkingen.

Ten eerste halen we alle html-opmaakinformatie eruit zodat er platte tekst over blijft. Ten tweede halen we de tekst door een filter dat de taal herkent; we willen alleen teksten die in het Nederlands geschreven zijn want dat is ook de taal van de nieuwsberichten die we gebruiken.

Als derde gaat de tekst door een tokenizer die de tekst omzet in losse woorden die ieder terug zijn gebracht tot hun stam. Ook samengestelde woorden en namen worden teruggebracht tot één token.

Voorbeelden van wat de tokenizer omzet

Tenslotte worden de meest gebruikte woorden (de, ook, in, want) eruit gefilterd. Deze zijn niet representatief voor de tekst.

Al deze stappen bij elkaar resulteren in een lijst van woorden die samen goed aangeven waar de film over gaat.

3. Trainen van het model

Deze lijsten met woorden per film vormen de input van het LSI model. Het model bepaalt automatisch de meest ideale indeling van de topics en scoort de films daarop. Aan de hand hiervan deelt het de films in in de 1000-dimensionale ruimte. Je kunt dit zien als 1000 onderwerpen waar een film in meer of mindere mate over gaat. Alleen zijn deze onderwerpen niet met de hand gekozen maar worden ze door een wiskundig model ingedeeld zodat ze een zo goed mogelijke indeling van de film vormen.

4. Testen van het model

Waarom 1000 onderwerpen? Dat is een kwestie van testen. Het testen in machine learning bestaat uit het uitproberen van diverse meta parameters om te zien welke combinatie het beste werkt.

We hebben hiervoor een testset gemaakt van nieuwsartikelen en handmatig uitgezochte films die daar het best bij matchen. We vergelijken de resultaten van het model met deze handmatige keuzes en kijken hoe goed het model scoort.

In onderstaande tabel kan je goed zien dat het model het het beste doet met zo’n 1000 topics.

Naast het aantal topics hebben we ook veel andere dingen gevarieerd zoals de manier van het omzetten naar tokens, het wel/niet meenemen van bepaalde velden uit de database (zoals regisseur) en zelfs diverse alternatieven voor het LSI model.

5. Matching

Het model is klaar en kan gebruikt worden in de praktijk. Hiervoor gebruiken we
de nieuwsfeed van de NOS.

Het model zoekt een film over oplichters bij het artikel over een nepmelding bij de Kustwacht.

We pakken het belangrijkste nieuwsartikel van de dag en halen dit door dezelfde bewerkingen als de films. Dat wil zeggen: opmaak eruit, omzetten in (meest relevante) woorden en dan het model laten scoren op de 1000 verschillende topics. Tenslotte uitzoeken welke film daar qua topic scores het dichtste bij zit.

Dit leidt tot interessante, soms verrassende resultaten. Omdat het model echt de betekenis van teksten bij elkaar zoekt zijn we niet afhankelijk van specifieke zoekwoorden maar weet het gerelateerde begrippen (plastic/wegwerpplastic, milieu/ecologie) aan elkaar te matchen.

Bij het artikel over afval op de Balinese stranden wordt een documentaire over ecologische impact van plastic gevonden.

CONCLUSIE

De IDFA filmdatabase is een leuk voorbeeld om de mogelijkheden van machine learning in de praktijk aan te tonen. Toch blijkt dat 13.000 films niet eens heel veel is. Er zijn altijd wel nieuwsberichten waar geen relevante flm bij past.

De techniek is echter heel goed toe te passen in andere domeinen zoals het aanbieden van extra’s aan de hand van een (online) aankoop of het herkennen van sentimenten in commentaren of reviews van gebruikers.

De mogelijkheden zijn enorm. Wij gaan hier bij Oberon zeker mee verder.