Tijdens en naar aanleiding van het Code Camping event van Hack de Overheid van 26 november zijn er meerdere programmeurs, hackers en coders met Open Cultuur Datasets aan de slag gegaan. Jaap Blom ontwikkelde een Open Beelden data mash-up die gemaakt is met o.a. datasets van Open Beelden videoâs (Beeld en Geluid), het Rijkmuseum en het Amsterdam Museum. In deze blog het resultaat en een toelichting van de maker.
Het uitgangspunt van deze demo-applicatie was het hergebruik van en koppelen van datasets aan de collectie van Open Beelden die meer dan 1.700 vrij te (her)gebruiken videoâs van met name Polygoonjournaals bevat, welke gepubliceerd zijn onder Creative Commons licenties. Aan de basis van de werking van de demo liggen de spraaktranscripten van deze videoâs, die zijn geleverd door de spraakherkenningssoftware van X-MI.
Het idee voor de demonstratie ligt in het contextualiseren van bekeken videoâs om de kijker zodoende te voorzien van nuttige, leuke en onverwachte achtergrondinformatie over hetgeen er gesproken wordt in het filmpje.
Om een voorbeeld te geven: wanneer Philip Bloemendal in het filmpje getiteld âGrote delen van Nederland compleet ingesneeuwdâ spreekt over: â(âŠ) maar ook op tal van plaatsen in Drenthe (âŠ)â zal er naast de video in verschillende blokjes informatie verschijnen over Drenthe. Elk blokje vertegenwoordigt informatie verkregen uit een open databron. Voor het eerste prototype waren deze bronnen o.a.: Google Maps en Wikipedia. Ter illustratie: in het geval van het herkende concept âDrentheâ wordt er bij Google Maps ingezoomd op de provincie Drenthe; in het Wikipedia blokje wordt er een artikel over Drenthe getoond.
In het kader van het Code Camping event van Hack de Overheid heb ik twee nieuwe datasets toegevoegd: de collecties van het Rijksmuseum en van het Amsterdam Museum.
Hoe het allemaal werkt
Aan de basis van de werking van de demo liggen dus de Open Beelden videoâs en het bijbehorende spraaktranscript, dat wordt gebruik om aan elk gesproken woord uit het filmpje de exacte tijdscode te koppelen.1
Stap 1
Omdat niet elk woord in een zin interessant is en uitleg behoeft, is de eerste stap het eruit filteren van het spraaktranscript op stopwoorden, zoals de lidwoorden, preposities en bijwoorden.
Stap 2
In de tweede stap wordt er op de overgebleven woorden een script losgelaten dat deze tracht te sorteren op âbelangrijkheidâ. In deze berekening wordt gebruik gemaakt van een combinatie van woordscores en de frequentie dat een woord voorkomt in de tekst. Woorden die een hoge score hebben en vaak voorkomen zullen hierdoor het hoogste eindigen in de sortering.
Stap 3
Na deze sortering worden in volgorde van belangrijkheid de woorden gebruikt als zoekvraag voor zowel de GTAA thesaurus (o.a. gebruikt door Beeld en Geluid), als ook voor de Freebase webservice. Deze laatste service van Google biedt een grote collectie onderling gerelateerde concepten met beschrijvingen uit een grote verscheidenheid aan domeinen. Freebase kan gezien worden als een uitgebreide thesaurus met informatie uit een groot aantal verschillende (vak)gebieden.
Wanneer de GTAA of Freebase een concept oplevert, wordt deze in een kandidatenlijst opgenomen. Op deze kandidatenlijst wordt vervolgens een zeer rudimentaire slag gemaakt om de meest onzinnige concepten er uit te filteren (b.v. wanneer het concept uit meerdere woorden bestaat, wordt het niet meegenomen).
Stap 4
In stap 4 wordt elk GTAA en Freebase concept uit de kandidatenlijst gebruikt voor een zoekvraag naar elk van de gebruikte open databronnen, te noemen:
- Google Maps (alleen als het concept herkend is als locatie)
- Wikipedia
- Amsterdam Museum
- Rijksmuseum
Als er resultaten gevonden worden, zullen deze gekoppeld worden aan de tijdcode van het gesproken woord uit het spraaktranscript waarmee de uiteindelijke informatie gevonden is.2 3
Stap 5
Als laatste stap communiceer ik de tijdsgecodeerde contextdata terug naar de browser middels een JSON object, wat ik vervolgens gebruik om met Popcorn.js events te genereren. Deze events zijn gekoppeld aan een HTML5 video player en zorgen ervoor dat er tijdens het spelen de juiste (context)informatie getoond word in de verschillende blokjes.
Omdat het verwerken van deze 5 stappen per filmpje gemiddeld zoân 15-20 seconden duurt, sla ik de resultaten in .json files op. Bij het openen van de demo worden deze files dus ingelezen in plaats van het âliveâ ophalen van de data (zoals beschreven in de verschillende stappen)
Er is nog een hoop te doen
De demo toont aan wat mogelijk door conceptdetectie (of ook:Â Named Entity Recognition) in te koppelen aan open databronnen, maar kan in een aantal aspecten nog sterk verbeterd worden:
Verbetering conceptdetectie
De conceptdetectie zoals die is toegepast kan nog sterk verbeterd worden. Zo wordt er in deze demo geen rekening gehouden met concepten die bestaan meer dan Ă©Ă©n woord, b.v. âAmsterdam Museumâ zou in dit geval twee concepten, âmuseumâ en âAmsterdamâ, opleveren i.p.v. Ă©Ă©n concept: âAmsterdam Museumâ.
Verder zou er specialistische Named Entity Recognition (NER) web services, zoals DBpedia Spotlight (vooral goede resultaten voor het Engels) onderzocht moeten worden om de resultaten te verbeteren. Voor de Nederlandse taal blijft het echter nog even zoeken naar een goeie open source NER service.
Selectie relevante bronnen voor de gebruiker
Wat betreft de relevantie voor de getoonde informatie naar de gebruiker toe kan er beter nagedacht worden over de selectie van de contextbronnen. Waarom bijvoorbeeld iemand die een filmpje over âNederlands oudste stoomgemaalâ bekijkt, iets wil weten van een museumstuk âHensbeker van het gezelschap De negendenâ (gevonden op basis van het woord âGorinchemâ) is iets om over na te denken.
De demo geeft in ieder geval aan hoe spraaktranscripten van videoâs kunnen worden gecombineerd met open databronnen en hoe deze op hierdoor wederzijds gecontextualiseerd worden. In het kader van het Nederland opent Data project wordt deze demo verder uitgewerkt. De voortgang hiervan zal op ook op Open Cultuur Data worden vermeld!
Jaap Blom | Software engineer |Â Afdeling R&D, Nederlands Instituut voor Beeld en Geluid
Je kunt de demo hier vinden. 4
Voetnoten
- Spraakherkenningssoftware is niet perfect, wat betekent dat niet elk woord in een spraaktranscript 100% zal overeenkomen met het woord dat daadwerkelijk in de video wordt uitgesproken. â©
- Voor de collectie van het Rijksmuseum heb ik eerst de hele collectie geharvest uit hun OAI-PMH data provider en geĂŻndexeerd met SOLR. Via Lucene queries is vervolgens de collectie met vrije tekst te doorzoeken. Tijdens het maken van de index liep ik tegen veelal dezelfde slordigheden in de metadatavelden aan als Hay Kranen, die het Virtuele Rijksmuseum maakte. â©
- De collectie van het Amsterdam Museum is op drie verschillende manieren ontsloten: via Adlib, OAI-PMH en via een SPARQL endpoint. Voor deze demo heb ik voor de laatste optie gekozen, omdat het niet zoals OAI-PMH eerst gerharvest moet worden, maar direct via de service doorzocht kan worden. Het was sowieso weer goed wat te spelen met het Semantic Web d.m.v. SPARQL queries. â©
- Je kunt de demo het beste bekijken in Google Chrome, Firefox en Safari. Hij werkt niet optimaal in Internet Explorer. â©