Experimente im verteilten Information Retrieval – Einführung in den praktischen Teil – Henrik Nottelmann Seminar “Experimentelle Evaluierung im IR” 20. Dezember 2005 Henrik Nottelmann 1/32 Gliederung 1. Motivation 2. Arbeitsumgebung 3. Experiment 1 4. Experiment 2 5. Zusammenfassung Henrik Nottelmann 2/32 Gliederung 1. Motivation 2. Arbeitsumgebung 3. Experiment 1 4. Experiment 2 5. Zusammenfassung Henrik Nottelmann 3/32 Ziel Ziel: TeilnehmerInnen und Teilnehmer sollen praktische Erfahrungen sammeln im Evaluieren von IR-Anwendungen Probleme: potentiell unter anderem • Korrektheit des Codes sicherstellen • Unerwartete Unterbrechungen (z.B. Hardwaredefekt) • Größere Anzahl von sequentiellen Experimenten • Varianten eines Verfahrens beherrschen • Ergebnisse zu Variante zuordnen Henrik Nottelmann 4/32 Motivation Anwendungsgebiet: Verteiltes Information Retrieval Theoretische Grundlagen: siehe Vortrag zu DTF und CORI v.a. Resource Selection Vorhandene Software: siehe Vortrag zu PDatalog und PIRE • PIRE als Retrievalengine • PDatalog als untere Schicht • Vorhandener Code für Resource Selection “Warnung”: es ist weniger wild als es gleich klingt Henrik Nottelmann 5/32 Rahmen Zeitlicher Rahmen: ab jetzt bis Mitte/Ende Februar ⇒ Termin für Abschlußblockseminar noch festzulegen Coderahmen: wird gestellt ⇒ kleinere Anpassungen sind erforderlich Testkollektion: wird gestellt (von TREC) ⇒ Dokumente, Topics/Anfragen, Relevanzurteile direkt nutzbar Experimente: 2 Runden • Kleine Testkollektion, Indexierung und max. 9 Retrievaldurchläufe • Große Kollektion, keine Indexierung, 4 Retrievaldurchläufe Henrik Nottelmann 6/32 Gliederung 1. Motivation 2. Arbeitsumgebung 3. Experiment 1 4. Experiment 2 5. Zusammenfassung Henrik Nottelmann 7/32 Umgebung (1) – Allgemeines Computer: unter Debian/Gnu Linux, alle gemeinsame Homedirs http://www.is.informatik.uni-duisburg.de/courses/material/ Pool: Arbeitsplatzrechner für Entwicklung und Überwachung (oder private Rechner) 3 Server: nicht direkt zugänglich, für eigentliche Experimente, Zugriff via ssh/rsync ⇒ {royanne, charlotte, thibault}.is.informatik.uni-duisburg.de Accounts: exp1 . . . exp13, auf allen Rechnern nutzbar, gleiche Paßwörter (Achtung, separate Verwaltung der Paßwörter) Henrik Nottelmann 8/32 Umgebung (2) – Datenbank MySQL-Datenbank: benötigt für PDatalog (für PIRE/Resource Selection) ⇒ normalerweise kein direkter Zugriff nötig Rechner: aufgeteilt nach Gruppen royanne: Gruppen A/B (Datenbank und User exp_a, exp_b) charlotte: Gruppen C/D (Datenbank und User exp_c, exp_d) royanne: Gruppen E/F (Datenbank und User exp_e, exp_f) ⇒ Daten wichtig für Initialisierung! mysql -uexp_a -p... -hroyanne.is.informatik.uni-duisburg.de exp_a > select * from wt10g_text_plain_expectation limit 10; Henrik Nottelmann 9/32 Umgebung (3) – Software Eclipse: Entwicklungsumgebung für Java, bereits installiert eclipse & Software: http://www.is.informatik.uni-duisburg.de/courses/ exp_ws05/sw.zip ⇒ importieren in Eclipse de.unidu.is.examples: Beispiele (dazu gleich mehr) de.unidu.is.pdatalog: PDatalog++ de.unidu.is.retrieval: Datenstrukturen und PIRE de.unidu.is.rs: Resource Selection Henrik Nottelmann 10/32 Gliederung 1. Motivation 2. Arbeitsumgebung 3. Experiment 1 4. Experiment 2 5. Zusammenfassung Henrik Nottelmann 11/32 Experiment 1 (1) Kollektionen: Teilmenge von TREC-123 ⇒ 24 Kollektionen ap88_1a, ap88_1b, ap88_1c, ap88_2a, . . . , ap88_8c (rund 3.000 Dokumente pro Kollektion) Ablageort: auf Servern in /data/exp_ws05 Kleine Probekollektion (171 Dokumente) im Eclipse-Projekt: data/testcoll Topics: im Eclipse-Projekt: conf/trec123.topics (051, 052 . . . 150) Relevanzurteile: im Eclipse-Projekt: conf/trec123.qrel Henrik Nottelmann 12/32 Experiment 1 (2) Aufgaben: ganzer Zyklus • Vorbereitung einmalig: – Indexierung der 24 Kollektionen – Resource Descriptions erstellen • Für 100 Topics: – Kosten berechnen – Resource Selection – Retrieval ⇒ Kollektion ist klein, daher kurze Laufzeiten, gut zur Eingewöhnung Henrik Nottelmann 13/32 Experiment 1 (3) Indexierung 1: de.unidu.is.examples.IndexCollection DB db = new MySQLDB("royanne","exp_a",exp_a","..."); final PIRE ir = new PIRE(db,"testcoll"); String ATT = "text"; List ops = new LinkedList(); ops.add(TextExpDT.STEMEN_BM25); ops.add(TextExpDT.STEMEN_TFIDF); ir.registerAttribute(ATT,TextExpDT.NAME,ops); ir.initIndex(); • Datenbank, PIRE-Initialisierung • erledigt durch: de.unidu.is.examples.ExpUtils.createPIRE1(String) ⇒ DB-Parameter in ExpUtils.getDB() anpassen! Henrik Nottelmann 14/32 Experiment 1 (4) Indexierung 2: de.unidu.is.examples.IndexCollection ir.initIndex(); IOUtilities.doForAllFiles(new File("data/testcoll"), new IOUtilities.FileHandler() { public void handle(File file) { // Dokument laden String content = IOUtilities.load(new InputStreamReader( new GZIPInputStream(new FileInputStream(file)))); // Dokument-ID und Text extrahieren // und zum Index hinzufügen ... } }); ir.computeIndex(); Henrik Nottelmann 15/32 Experiment 1 (5) Resource Descriptions: de.unidu.is.examples.ComputeRD PIRE ir = ...; DL dl = new GenericDL("..."); DTFPDatalogConfig config = new DTFPDatalogDefaultConfig("trec123_", ir.getSchema(),db); DTFPDatalogRDStorage storage = new DTFPDatalogRDStorage(config); // Erwartungswerte berechnen und abspeichern ir.computeMoments(); storage.store(dl,ir); // Parameter erst löschen, dann neu definieren storage.deleteParameters(dl,"parameter(’c1’,_)."); storage.storeParameters(dl,"parameter(’c1’,1)."); storage.deleteParameters(dl,"parameter(’P0’,_)."); storage.storeParameters(dl,"parameter(’P0’,1)."); Henrik Nottelmann 16/32 Experiment 1 (6) Kosten berechnen: de.unidu.is.examples.ComputeCosts DTFPDatalogRDStorage storage = ...; DTFCostEstimator costEstimator = new DTFRPCostEstimator(storage); // Alle DLs spezifizieren List dls = new LinkedList(); dls.add(new GenericDL("testcoll")); ... // Kosten berechnen WSumQuery query = Queries.getWSumQuery("051", "text", "stemen_tfidf"); Map costs = costEstimator.estimateCosts(dls, query); // abspeichern CostsOutputStream cos = new CostsTextOutputStream(new File("."),"051"); cos.writeMap(costs); cos.close(); Henrik Nottelmann 17/32 Experiment 1 (7) Resource Selection: de.unidu.is.examples.ComputeRS DTFPDatalogRDStorage storage = ...; List dls = ...; WSumQuery query = ...; // Kosten laden CostsInputStream cis = new CostsTextInputStream(new File("."),"051"); Map costs = cis.readMap(); cis.close(); // Resource Selection RS rs = new DTFRS(); // oder: new MaxNumDLDTFRS(10); PropertyMap cp = new HashPropertyMap(); cp.setDouble("rs.costs.relevance", 1); ResourceSelection sel = rs.computeSelection(dls, costs, query.getNumDocs(), cp); System.out.println(sel); Henrik Nottelmann 18/32 Experiment 1 (8) Retrieval: de.unidu.is.examples.PerformRetrieval PIRE ir = ...; WSumQuery query = ...; // Retrieval List result = ir.getResult(query); System.out.println(result); // Ergebnis abspeichern TRECResult.writeResult(new File("result"), qID, result); Henrik Nottelmann 19/32 Experiment 1 (9) Evaluierung: ganz einfach (natürlich Dateinamen/Pfade anpassen) trec_eval trec123.qrel result > out Ergebnis landet in out interessant: P@10, MAP, Gesamt-Precision, Gesamt-Recall Weitere Verwendung: manuell oder automatisch • LaTeX-Tabellen • Plots mit GnuPlot Erklärung auf Wunsch Henrik Nottelmann 20/32 Experiment 1 (10) Hinweise für Parameter: zur Steuerung der Varianten • über String[] args in main-Methode, oder • Konfigurationsdatei (die in args übergeben) PropertyMap conf = new FilePropertyMap(...); String value = conf.getString(...); Dateiformat: key1=value1 key2=value2 ... Henrik Nottelmann 21/32 Experiment 1 (11) Deployment: im DBpool für Server, z.B. royanne cd workspace/exp_ws05 ant dist Programm ist auf dem Server direkt verfügbar (gleiches Homedir) direkt ins Homedir kopieren (wenn man auf separater Kopie arbeiten will): rsync -a dist ~ Henrik Nottelmann 22/32 Experiment 1 (12) Aufruf: auf dem Server/testweise im DBpool cd dist java -cp exp.jar de.unidu.is.examples... Bash-Scripte: typischerweise *.sh, z.B. start.sh #!/bin/sh java -cp exp.jar de.unidu.is.examples... java -cp exp.jar de.unidu.is.examples... ... Rechte setzen: chmod a+x start.sh Henrik Nottelmann 23/32 Experiment 1 (13) Im Hintergrund auf dem Server laufen lassen: z.B. auf royanne ssh royanne cd dist nohup start.sh & startet start.sh im Hintergrund, Ausgaben landen in nohup.out Beenden: alle eigenen Java-Programme z.B. auf royanne ssh royanne killall start.sh killall java psg java sollte dann keine eigenen Java-Programme anzeigen Henrik Nottelmann 24/32 Experiment 1 (14) Aufgaben: werden gleich verteilt • DTF vs. DTF 5 vs. DTF 10 vs. CORI 5 vs. CORI 10 CORI muß implementiert werden: – de.unidu.is.rs.ranking.RankingRS vorhanden – df vorhanden, cf aus RD berechenbar, cl aus dl berechenbar • BM 25 (DTF, CORI) vs. TF.IDF (nur für DTF, zu implementieren) log N+0.5 df (t) tf (d,t) · w(d,t) := maxt∈d tf (d,t) log N + 0.5 de.unidu.is.retrieval.pire.dt.TextExpDT.computeIndex(...) • Parameter c (maximal 2 Werte) • Parameter P0 (maximal 2 Werte) Henrik Nottelmann 25/32 Gliederung 1. Motivation 2. Arbeitsumgebung 3. Experiment 1 4. Experiment 2 5. Zusammenfassung Henrik Nottelmann 26/32 Experiment 2 (1) Kollektionen: Teilmenge von WT10g ⇒ 2.500 Kollektionen 0, 1, . . . , 2499 (unterschiedliche Größe) Ablageort: bereits indexiert in Datenbank (Attribut text, Operator plain) wt10g_0 . . . wt10g_2499 für Retrieval aber: ExpUtils.createPIRE2("42") wt10g_ für Resource Description Topics: im Eclipse-Projekt: conf/wt10g.topics (nur die IDs aus wt10g.topics.1000) Relevanzurteile: im Eclipse-Projekt: conf/wt10g.qrel Henrik Nottelmann 27/32 Experiment 2 (2) Aufgaben: nur Retrieval • Für 1.000 Topics: – Kosten berechnen – Resource Selection – Retrieval ⇒ Kollektion ist groß, daher lange Laufzeiten, dafür nur wenige Durchläufe Henrik Nottelmann 28/32 Experiment 2 (3) Aufgaben: werden gleich verteilt • DTF vs. DTF 10 vs. DTF 20 • BM 25 (Operator plain) • Parameter c (maximal 2 Werte) • Parameter P0 (maximal 2 Werte) Henrik Nottelmann 29/32 Gliederung 1. Motivation 2. Arbeitsumgebung 3. Experiment 1 4. Experiment 2 5. Zusammenfassung Henrik Nottelmann 30/32 Zusammenfassung 2. Teil des Seminars: praktische Arbeiten mit 3 Kollektionen • Kollektion zu Testzwecken (nur für Korrektheit) • Kollektion TREC123 - klein, Indexierung und verteiltes Retrieval • Kollektion WT10g - groß, nur verteiltes Retrieval zusätzlich ist etwas Code zu schreiben (als Übung) Umgebung: Pool und 3 Server, Aufteilung nach Gruppen (2 Gruppen/Rechner) ⇒ absprechen! Verteilung: siehe Webseite Gruppenarbeit: zusammen arbeiten, auch wenn Experimente vermutlich unter einem Account laufen Henrik Nottelmann 31/32 Zeitplan Start: ab sofort Weihnachtspause: zwischen 24.12.2005-8.1.2006 kein “Support” Ende: 2. Februarhälfte Letzter Seminarblock: 1 Tag Ende Februar? (VL-Zeit endet 10.2.2006) Vortrag: Vorgehen, Probleme, Lösungen und Ergebnisse der Experiment Bei Problemen: Email (außer 24.12-8.1) bei Bedarf: Gruppensprechstunde im Januar Henrik Nottelmann 32/32