2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen...

31
© Prof. Kießling 2016 Kap. 2 - 83 Effizienz des Systems bezeichnet den sparsamer Umgang mit Systemressourcen und die Skalierbarkeit auch über große Kollektionen. Charakteristische Werte für Effizienz sind z.B. Speicherplatzverbrauch CPU-Zeit Anzahl der I/O Operationen Antwortzeit Ziel im IR: „Effizient genug2.4 Effiziente Datenstrukturen

Transcript of 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen...

Page 1: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 83

Effizienz des Systems bezeichnet den sparsamer Umgang mit Systemressourcen und die Skalierbarkeit auch über große Kollektionen.

Charakteristische Werte für Effizienz sind z.B. Speicherplatzverbrauch CPU-Zeit Anzahl der I/O Operationen Antwortzeit

Ziel im IR: „Effizient genug“

2.4 Effiziente Datenstrukturen

Page 2: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 84

Inverted File

• Indexstrukturen ermöglichen einen effizienten Zugriff auf eine Menge von Dokumenten, die bestimmte Terme enthalten.

• Die zugrundeliegende Dateistruktur kann von 10% bis zu mehr als 100 % der Größe der Textinhalte annehmen.

• Indexstrukturen wie der Inverted File nutzen die lexikographische Ordnung der Terme aus.

Page 3: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 85

Grundstruktur eines Inverted File Index

Stemming anhandPorter Stemmer nachvollziehbar

Page 4: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 86

• Der Inverted File bietet eine Index-Datenstruktur (Sekundärindex), die eine Suche nach einer Menge von Dokumenten ermöglicht, die bestimmte Terme enthalten(Term → {Dokument}).

• Zusätzlich kann die Worthäufigkeit sowie die Position eines Terms innerhalb eines Dokuments gespeichert werden.

• Um einen Inverted File Index zu erstellen, muss die gegebene Abbildung von Dokument → {Term}, wie sie etwa ein Crawler liefert, invertiert werden.

Page 5: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 87

Beispiel Boolesches Retrieval

Suche (Homer) → D1, D2, D3

Suche (Bart) → D2, D3, D4

• Homer AND Bart: Schnitt der beiden Listen D2, D3

• Homer OR Bart: Vereinigung der beiden Listen D1, D2, D3, D4

Page 6: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 88

Beispiel Vektorraummodell mit TFxIDF

analog zu 2-47:

D1 : Sunshine, Sunshine, Help, Orbits

D2 : Sunshine, Help, Help, Orbits, Harbour

Suche (Sunshine) → D1 (tf=2), D2 (tf=1) → nSunshine

= 2

Suche (Help) → D1 (tf=1), D2 (tf=2) → nHelp

= 2

Suche (Orbits) → D1 (tf=1), D2 (tf=1) → nOrbits

=2

Suche (Harbour) → D2 (tf=1) → nHarbour

= 1

Page 7: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 89

Beispiel Vektorraummodell mit TFxIDF

Weitere benötigte Größen ablesbar aus Postings Statistik:

● D: Menge der Dokumente in der Kollektion● ac: Durchschnittliche Termanzahl

● cm: Anzahl der Terme in Dokument D

m

→ Somit kann der TDxIDF Wert für Dokument D1 und D2 analog zum vorherigen Beispiel berechnet werden

Page 8: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 90

• Effiziente Datenstrukturen: Präfix B*-Baum Sortierter Array

• Operationen: Suche (T

i): Gibt alle Dokumente D

j zurück, die T

i enthalten, sowie

Zusatzinformationen wie Worthäufigkeit

Einfügen (Ti, D

j): Fügt die Informationen in den Index ein, dass D

j

Term Ti enthält. Ist T

i bereits im Index enthalten, so wird ein weiterer

Verweis auf Dj hinzugefügt

Löschen (Ti, D

j): Löscht Verweis auf D

j für Term T

i aus dem Index

Sowohl Einfügen als auch Löschen führen zu einem Update von Statistikinformationen.

Page 9: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 91

Präfix B*-Bäume

● Ausgangspunkt sind B*-Baume

● Blätter können untereinander verknüpft sein, um sequentielle Verarbeitung zu ermöglichen

● Der Teil des Index, der nur Verzweigungsknoten beinhaltet wird im folgenden als B*-Index, die Blätter als B*-Datei bezeichnet

Page 10: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 92

Inverted File als Präfix B*-Baum

Page 11: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 93

Präfix B*-Bäume

Optimierung: Verwendung kürzester Präfix-Separatoren

● Einfügen des Schlüssels „Homer“ mit Spaltung des Blatts

● Statt Maggie als Schlüssel im B*-Index ist jeder String s gültig, der die folgende Eigenschaft erfüllt: Lisa < s < Maggie

● Wahl des kürzesten Präfix-Seperators s bei der Aufteilung von Blättern

Bart, Lisa, Maggie, Marge

Bart, Homer, Lisa Maggie, Marge

Page 12: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 94

Präfix B*-Bäume

Hintergrund:

● Suchgeschwindigkeit ist abhängig von der Höhe des Baumes● Ziel: Minimale Höhe durch maximale Verzweigung● Problem: Seitengröße der Verzweigungsknoten im B*-Index

● Seite besteht aus Zeigern p (wenige Byte groß) und Schlüsseln s● Durch Minimierung der Schlüsselgröße haben mehr Schlüssel

pro Seite Platz → erhöhter Verzweigungsgrad

p0, s1, p1, …, si,

pi, s

i+1,...,sm, pm

Page 13: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 95

Präfix B*-Bäume: Beispielbaum

Jeder Schlüssel im B*-Index ist ein kürzester Präfix- Separator zur Unterscheidung der Wörter im nächsten Level

f m

aff 2 kaninch 9 katz 1

gr h kat lag br e rut uni

Postings Datei

Page 14: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 96

Präfix B*-Bäume

Weitere Verbesserung: Blätter müssen nicht notwendigerweise in der Mitte gespalten werden

● Einführung eines Spaltungsintervalls, das einen Bereich dL um

den Mittelpunkt einer Seite definiert, in dem eine Teilung erfolgen kann

● Innerhalb des Intervalls wird derjenige Punkt zur Spaltung gewählt, der einen minimalen Präfix-Separator liefert

● Verfahren ist auch für Verzweigungsknoten anwendbar mit Bereich d

B

Page 15: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 97

Präfix B*-Bäume

Abschluss, Achtung, Affe, Affenhaus, Katze, Katzenfutter

Beispiel:

● Eine Teilung des Blattes in der Mitte hätte Präfix-Separator „Affen“ zur Folge

● Eine Verschiebung des Punktes um eine Stelle nach links oder rechts führt zu kürzeren Präfix-Separatoren „Af“ oder „K“

Page 16: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 98

Präfix B*-Bäume

Berechnungsbeispiel entnommen aus Bayer & Unterauer (1977)

● Seitengröße: 1684 Bytes (aktuell z.B 8 KB) ● Seite enthält

● Einträge für die Wurzel● für alle weiteren Knoten

● B*-Baum: Schlüssel 10 Bytes, Zeiger 4 Bytes → k = 60

● Präfix B*-Baum: Präfix-Separator 4 Bytes, Zeiger 4 Bytes→ k = 105

1≤l≤2 k1≤l≤2 k

k≤l≤2 k

Page 17: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 99

Höhe von Präfix B*-Bäumen

Höhe von einfachen Präfix B*-Bäumen:

● Minimale Anzahl von Einträgen im B*-Index: Imin

= 2(k+1)h-1 -1

● Maximale Anzahl von Einträgen im B*-Index: Imax

= (2k+1)h -1

● Vergleich B*-Baum und Präfix B*-Baum:

B*-Baum (k=60) Präfix B*-Baum (k=105)

h Imin

Iav

Imax

Imin

Iav

Imax

1 1 90 120 1 157 210

2 121 8280 146640 211 24963 44520

3 7441 753570 1771560 22471 3944311 9393930

Page 18: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 100

Sortierter Array

Ein sortierter Array hält die lexikographische Ordnung der Terme als sortierte Liste in einem Array. Zusätzlich enthält jeder Eintrag die Anzahl der Dokumente in der ein Term vorkommt, sowie einen Verweis auf die Postings Datei.

Die Suche nach Stichwörtern erfolgt mit Hilfe der Binären Suche.

Das Hinzufügen neuer Stichwörter, also die Erweiterung des Vokabulars, ist mit hohen Kosten verbunden, da der Array neu sortiert werden muss.

Ein Vorteil ist dagegen die leichte Implementierung der Datenstruktur bei angemessener Performance.

Page 19: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 101

Inverted File als sortierter Array

Page 20: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 102

Schritte der Indexerstellung

● Extraktion des Textes zur Erstellung einer Zuordnung Dokument → {Term}

● Invertierung der Liste, um eine neue Zuordnung der Form Term → {Dokument} zu erhalten

● Sortierung der invertierten Liste

● Optionale Schritte: Termgewichtung, Kompression, Reorganisation

Page 21: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 103

• Extraktionsschritt: Erstellung von Tokens unter Berücksichtigung sprachspezifischer Regeln Anwendung linguistischer Verfahren Löschung von Stoppwörtern

• Definierte Beschränkungen: Vordefiniertes Vokabular Stoppwörter nicht indiziert Regeln zu indizierbaren Wörtern (z.B. Lehr- und Satzzeichen) Liste indizierbarer Zeichenfolgen (z.B. Exklusion von Ziffernfolgen)

Schritte der Indexerstellung

Page 22: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 104

Schritte der Indexerstellung

Page 23: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 105

Schritte der Indexerstellung

Page 24: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 106

Sortierung und Suchkosten

● Für große Datenmengen kann diese Operation viel Zeit kosten. Sortierverfahren wie Heapsort oder Mergesort garantieren dabei Worst-Case Kosten in O (n log

n).

● Beispiel für Suchkosten:● Die deutsche Sprache hat ca. 5,3 Millionen Wörter.● Das Vokabular wird durch Stoppwörter / Stemming reduziert.● Sei nun ein Array mit 2.000.000 Einträgen (Vokabular) gegeben.

● Zur Suche eines Terms werden bei der binären Suche maximal log2 (n+1)

Vergleiche benötigt.● Bei gegebenem Array entspricht das 21 Vergleichen.

Page 25: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 107

Lucene ist eine Java-Bibliothek, welche die Funktionalität einer Volltext-Suchmaschine implementiert.

Der Code ist Opensource und ist ein Projekt der Apache Software Foundation. Die aktuelle Lucene-Version für Java ist 6.0.0. Zusätzlich existieren eine Reihe von Portierungen in andere Sprachen (C++, C#, Python, …) bzw. Spracheinbindungen.

Dank ihrer hohen Performanz und leichten Skalierbarkeit können die Lucene-Komponenten in vielfältigen Anwendungen eingesetzt werden:

z.B. benutzt Wikipedia Lucene zur Volltextsuche. Opensource Web Crawler „Nutch“ basiert auf Komponenten von

Lucene.

2.5 Lucene

Page 26: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 108

Lucene basiert auf dem Vektorraummodell mit einer eigenen Ähnlichkeits-funktion, die unter anderem auch auf Inverted Document Frequency (IDF) und Term Frequency (TF) basiert, um ein Ranking der Dokumente zu erstellen.

Zusätzlich werden auch Methoden für Boolesche Anfragen (Bestimmung der Ergebnismenge mit Booleschem

Modell mit anschließendem Ranking) Unscharfe Anfragen mit Hilfe der Levenshtein-Distanz

zur Verfügung gestellt.

Geographische Suche ist durch Angabe einer Geo-Kodierung in den Metadaten möglich.

Page 27: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 109

Analyzer:Zerlegung eines Eingabetextes (document.Document) in seine elementaren Bestandteile (Token) und Nutzung seiner Metadaten (document.field, wie z.B. Dokumentpfad, Änderungsdatum, …), für die ein Index (index.IndexWriter) erstellt wird.

Vereinheitlichung von Groß- und Kleinschreibung Entfernen von Füllwörtern und Sonderzeichen

Stemmer:Reduktion von grammatikalisch veränderten Wortformen auf ihren Wortstamm, wodurch der Index verkleinert wird.

Page 28: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 110

Suchanfragen:

Eine Instanz IndexSearcher stellt mittels der Methode search und einem über-gebenen Query-Objekt eine Suchanfrage. Der Parser versteht für eine Anfrage folgende Syntax:

Wildcards (z.B. “te?t“, “te*t“) Nachbarschaftssuche (z.B. “Kießling Lehrstuhl~10“) Existenzielle Suche (z.B. “jakarta+ apache“), Zusicherung von jakarta Gewichtete Suche (z.B. “jakarta^4 apache“)

Spezielle Suchanfragen: Boolesche Suche (AND, OR, NOT), wobei OR Default ist. Unscharfe Suche (z.B. “roam~“ roams, foam )

Anfrage auf Metadaten: Intervall-Suche auf Field (z.B. Datum: “[20020101 TO 20030101]“)

Page 29: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 111

Ergebnisrepräsentierung:

Ein Objekt vom Typ TopDocs ist ein Container für die Rückgabe der gefundenen Dokumente. Die einzelnen Ergebnisse liegen darin als Objekte vom Typ ScoreDoc in einem Array vor.

Ein ScoreDoc enthält neben dem Identifikator des Dokuments auch den Query-spezifischen Score, den Lucene berechnet. Die Scores sind positivwertig und absteigend sortiert.

Beispiel für Ausgabe, Suche nach „love“ in einem Korpus mit 30.000 englischen Dokumenten:

Doc-Id Scoring

134880 5.756727

157652 5.756727

148442 4.985471

Page 30: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 112

Vorteile: Lucene unterstützt aktuelle Java Versionen. Lucene wird auch industriell eingesetzt. Neue Versionen erweitern den Kern (z.B. phonetische Ähnlichkeit wie

Soundex, Beider-Morse, … ). Lucene hat einen aktiven Entwicklerkreis, der den Kern um Packages

erweitern wie z.B.– Query Expansion (LucQE)– Synonyme von WordNet

Nachteile: Änderung im Korpus => erneute Indexerstellung Qualität und Pflege der Packages

Page 31: 2.4 Effiziente Datenstrukturen · Beispiel Vektorraummodell mit TFxIDF Weitere benötigte Größen ablesbar aus Postings Statistik: D: Menge der Dokumente in der Kollektion ac: Durchschnittliche

© Prof. Kießling 2016 Kap. 2 - 113

Skript „Information Retrieval und Multimedia-Datenbanken“

von Prof. Dr. W.-T. Balke im SS06

Information Retrieval – Data Structures & Algorithms von William B. Frakes und Ricardo Baeza-Yates (Herausgeber), Prentice Hall, 1992, ISBN 0-13-463837-9

Prefix B-trees von Rudolf Bayer und Karl Unterauer, ACM Transactions on Database Systems, Volume 2, Issue 1, 1977

2.6 Literatur