Experimente im verteilten Information Retrieval

Werbung
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
Herunterladen