Anwendung von Vektormodell und boolschem Modell in Kombination Julia Kreutzer Seminar Information Retrieval Institut für Computerlinguistik Universität Heidelberg 12.01.2015
Motivation Welche Filme sind empfehlenswert? www.moviepilot.de/movies/ha rry-potter-7-harry-potter-unddie-heiligtümer-des-todes-2 [9.1.15] www.gutefrage.net/frage/gute-zombie-filme [9.1.15]
Motivation Welche Filme sind empfehlenswert? kollaboratives Filtering: Filmbewertung durch Nutzende inhaltsbasiert: Ähnlichkeiten von Filmen allgemeine Problematik im IR: Definition der Relevanz Lösung: diese Definition den Nutzenden überlassen durch Realisierung einer Kombination von Modellen
Überblick 1. Motivation 2. Ziel 3. Umsetzung A. Konzept B. Daten C. Implementierung 4. Demo 5. Weitere Ideen
Ziel Implementierung eines Filmempfehlungssystem, das viele Filme kennt ohne Nutzerbewertungen auskommt die Relevanz der Empfehlungen erläutert individuelle Anfragen erlaubt Anfragen effizient bearbeitet
Umsetzung: Konzept IR Modell: Analyse Filme F Anfrage A F Analyse Repräsentation Matching & Ranking empfohlene Filme E F \{A}
Umsetzung: Konzept Film xy finde ich gut, welche Filme sind ähnlich bezüglich Kriterien a und b? Filme F Anfrage A F Analyse Analyse Repräsentation Matching & Ranking empfohlene Filme E F \{A}
Umsetzung: Konzept Datenbasis: Informationen zu Filmen: ID, Titel, Plot, Schauspieler, Input: Anfrage=FilmID, Gewichtung von Ähnlichkeitskriterien, k Output: k ähnlichste Filme aus der Datenbasis bezüglich der Ähnlichkeitskriterien, Details zur Empfehlung
Umsetzung: Konzept Matching: gewichtete Kombination von mehreren Ähnlichkeitsscores Kriterium Titel Plot Genre(s) Schauspieler Regisseur(e) Ähnlichkeitsmaß Edit Distance Cosinus semantischer Vektoren Jaccard (Menge) Jaccard (Menge) Jaccard (Menge) Beispiel: w = [1, 5, 3, 9, 0] nw = [1/18, 5/18, 1/6, 1/2, 0] totalsimscore = 1/18*titleSim + 5/18*PlotSim + 1/6*GenreSim + 1/2*CastSim
Umsetzung: Daten Filmsammlung: Beschränkung auf Kino- und TV-Filme Informationen zu Filmen: eindeutige ID, User-Ratings, Kritiken, Titel (in verschiedenen Sprachen), Genre, Länge, Regisseur, Drehbuchautor, Schauspieler, Zusammenfassung, Zitate, Produktionsdetails, uvm
Umsetzung: Implementierung Vorgehen bei der Implementierung (python): 1. Erstellung der Filmsammlung 2. Interne Repräsentation der Filme 3. Erstellung eines semantischen Vektorraums für Plots 4. Erstellung einer Ähnlichkeitsmatrix, bzw. Index 5. Anfrage- und Empfehlungsroutinen, Demo
Umsetzung: Implementierung 1. Erstellung der Filmsammlung imdbpy: Python API für IMDb Zugriff auf IMDb-Daten für Filme und deren Attribute auch: Titelsuche, Abspeichern im XML-Format i = IMDb() id = 167260 m = i.get_movie(id)
Umsetzung: Implementierung 2. Interne Repräsentation der Filme Film-Daten zu top 250 Filmen (XML): 13,4 MB Filtern ausgewählter Attribute mit xml.dom: FilmID Titel (englisch) Plot und Plot-Zusammenfassung Genre Schauspieler Regisseur Movie- Instanzen pickle dump: 1,2 MB
Umsetzung: Implementierung 3. Erstellung eines semantischen Vektorraums für Plots Dimensionen: Titel, Plots (NLTK Stoppwörter gefiltert) Aufbau des Vektormodells: gensim (python library) Dictionary für Dimensionen: Wort ID Repräsentation der Filme als Bag of Words = Korpus LogEntModel für Korpus Index für dieses Modell erzeugen und abspeichern
Umsetzung: Implementierung 3. Erstellung eines semantischen Vektorraums für Plots LogEntropy-Gewicht für Term i in Dokument j: localweight i, j =log(frequency i, j +1) P i, j = frequency i, j j frequency i, j globalweight i =1+ j P i, j log(p i, j ) log(numberofdocuments+1) finalweight i, j =localweight i, j globalweight i
Umsetzung: Implementierung 3. Erstellung eines semantischen Vektorraums für Plots movies = loadmovies( top250movies.pkl ) d = loaddict( top250movies.dict ) corpus = movies2corpus(movies) corpusbow = corpus2bow(corpus) model = models.logentropymodel(corpusbow) index = similarities.docsim.similarity("index/", model[corpusbow], len(d), len(movies)) movies index.save("logent_top250movies.index") index
Umsetzung: Implementierung 4. Erstellung einer Ähnlichkeitsmatrix, bzw. Index Option 1: Ähnlichkeit zur Laufzeit berechnen Option 2: Ähnlichkeitsmatrix zuvor berechnen
Umsetzung: Implementierung 4. Erstellung einer Ähnlichkeitsmatrix, bzw. Index Option 2: Ähnlichkeitsmatrix zuvor berechnen 1) für jedes Film-Paar 5 Ähnlichkeiten 5 Matrizen 2) Sparse Matrix: scipy.sparse.coo_matrix 3) gensim.matutils.sparse2corpus MmCorpus 4) Serialisierung des MmCorpus Zugriff in O(1)
Demo Demo 1: top250 Filme, Stand 2.11.14 Demo 2, Erweiterung: top1000 Filme mit >10.000 Bewertungen, Stand 9.1.15
Demo 1
Demo 2
Weitere Ideen Datensatz: vergrößern ad-hoc Online-Abfrage (ohne Ähnlichkeitsmatrix) Funktionalität: Titelsuche einbauen Anfrageoption mit dummy movie verfeinerte Ähnlichkeitsmaße
Referenzen Quellen des Bildmaterials für Folie 2: www.gutefrage.net/frage/gute-katastrophen-endzeitfilme www.moviepilot.de/movies/harry-potter-7-harry-potter-und-dieheiligtümer-des-todes-2 (alle: Stand 9.1.15) Internet Movie Database Filmlisten: http://www.imdb.com/chart/top [2.11.14] http://www.imdb.com/search/title?at=0&num_votes=10000 [9.1.15]
Referenzen Karin Haenelt, Information Retrieval. Einführung. Kursfolien. 19.10.2013 http://kontext.fraunhofer.de/haenelt/kurs/folien/haenelt_ir_intro.pdf gensim: Řehůřek, Radim, and Petr Sojka. "Software framework for topic modelling with large corpora." In Proceedings of the LREC 2010 Workshop on New Challenges for NLP Frameworks, pp 45-50, May 2010. NLTK: Bird, Steven, Edward Loper and Ewan Klein (2009), Natural Language Processing with Python. O'Reilly Media Inc. IMDbPY: http://imdbpy.sourceforge.net/ [11.1.15]