Vorlesungsfolien_5

Transcription

Vorlesungsfolien_5
Sitzung 5: Indexkompression Folien Übersetzt + z.T. Ergänzt von Manning eT al. 1
Indexkompression • “Gesetze” zur Abschätzung des Vokabulars • Eher kurz: – DicIonary Kompression – PosIngs Kompression 2
Montag – IndexkonstrukIon • Sort-­‐based indexing – Naïve in-­‐memory inversion – Blocked Sort-­‐Based Indexing • Merge sort is effecIve for disk-­‐based sorIng (avoid seeks!) • Single-­‐Pass In-­‐Memory Indexing – No global dicIonary • Generate separate dicIonary for each block – Don’t sort posIngs • Accumulate posIngs in posIngs lists as they occur 3
• Distributed indexing using MapReduce Ch. 5
Heute • KollekIonsstaIsIken detailierter (zu RCV1) – Wie groß werden DicIonary und PosIngs? • DicIonary Kompression • PosIngs Kompression 4
Ch. 5
Warum Kompression? • Verbrauchen weniger Plaaenplatz – Geringe Ressourcenersparnis • Können mehr Ressourcen im Hauptspeicher halten – Deutliche Zunahme der Verarbeitungsgeschwindigkeit • Insbesondere auch schnellerer Datentransfer von der Festplaae zum Hauptspeicher – [lesen komprimierter Daten | dekomprimieren] ist schneller als [lesen unkomprimierter Daten] 5
Ch. 5
Warum Komprimieren wir inverIerte Indizes? • DicIonary – Klein genug um im Hauptspeicher gehalten zu werden – Klein genug um auch einige PosIngslisten im Hauptspeicher zu halten • PosIngs File(s) – Reduzieren des benöIgten Festplaaenplatzes – Redzieren der Zeit, die benöIgt wird um die PosIngsliste von der Festplaae zu lesen – Suchmaschinen halten einen bedeutenden Teil der PosIngs im Speicher 6
Sec. 5.1
Reuters RCV1 • symbol sta*s*c • N documents • L avg. # tokens per doc • M terms (= word types) • avg. # bytes per token (incl. spaces/punct.) value 800,000 200 ~400,000 6 • avg. # bytes per token 4.5 (without spaces/punct.) • avg. # bytes per term 7.5 7
• non-­‐posiIonal posIngs 100,000,000 Sec. 5.1
Index Parameter und Größen (details IIR Table 5.1, p.80) size of
word types (terms)
non-positional
postings
positional postings
dictionary
non-positional index
positional index
Size
(K)
Size (K)
∆% cumul
%
∆
%
cumul Size (K)
%
109,971
∆
%
cumul
%
Unfiltered
484
197,879
No numbers
474
-2
-2
100,680
-8
-8
179,158
-9
-9
Case folding
392 -17
-19
96,969
-3
-12
179,158
0
-9
30 stopwords
391
-0
-19
83,390 -14
-24
121,858 -31
-38
150 stopwords
391
-0
-19
67,002 -30
-39
94,517 -47
-52
stemming
322 -17
-33
63,812
-42
94,517
-52
-4
0
Intuition für die ‘0’ Einträge. Warum entsprechen manche
davon großen Änderungen in anderen Spalten?
8
Sec. 5.1
Verlusrreie vs. Nicht-­‐verlusrreie Kompression • Verlusrrei: Die InformaIon wird bewahrt. – Ist das was heute meistens getan wird. • Kompression mit Verlust: Ein Teil der InformaIon wird geopfert • Einige der Vorverarbeitungsschriae kann als Kompression mit Verlust betrachtet werden: Kleinschreibung, Stoppwörter enrernen, Stemming, LemmaIsierung, Zahlen enrernen. • Woche 6: Einträge in PosIngs enrernen die wenig wahrschlich in den top k jedweder Query auuauchen werden. Sec. 5.1
Vokabular vs. KollekIonsgröße • Wie groß ist das Termvokabular? – Wieviele unterschiedliche Wörter gibt es? • Obergrenze? – Nicht wirklich: Schätzung 2007, mindestens 7020 = 1037 verschiedene Wörter bis Länge 20 • In der Praxis, wird das Vokabular mit der Größe der KollekIon wachsen Searchable words on the Web • Hugh E. Williams and JusIn Zobel 2005 hap://www.springerlink.com/content/l5a2j2rvwurnbrfa/fulltext.pdf 10
Sec. 5.1
Vokabular vs. KollekIonsgröße • Heaps’ law: M = kTb • M Größe des Vokabulars, T ist die Zahl der Token in der KollekIon • Typical values: 30 ≤ k ≤ 100 and b ≈ 0.5 • In einem logarithmierten Plot ergibt sich eine Gerade mit etwa ½ Steigung – Empirische Erkenntnis (“Empirisches Gesetz”) 11
Sec. 5.1
Heaps’ Law Fig 5.1 p81
For RCV1, ist die gestrichelte Linie die beste Kleinstquadrateschätzung log10M = 0.49 log10T + 1.64 . M = 101.64T0.49 mit k = 101.64 ≈ 44 and b = 0.49. Gute empirische Schätzung für Reuters RCV1 ! Für die ersten 1,000,020 tokens, nach Heap 38,323 terme; tatsächlich, 38,365 terme 12
Sec. 5.1
Zipfsches Gesetz • Heaps’ Gesetz erlaubt eine grobe Schätzung für die Grösse des Vokabulars in einer KollekIon. • Interessant für den Au€au eines Index sind aber auch die relaIven Frequenzen von Termen. • In der natürlichen Sprachverarbeitung finden sich v. a. hochfrequente und sehr seltene Terme. • Zipfs Gesetz: Der i. häufigste Term hat eine Frequenz im Korpus der propor>onal zu 1/i ist. • cfi = K/i wobei K eine normalisierende Konstante • cfi ist die collecIon frequency: Zahl der Vorkommen von Term ti in der KollekIon. Sec. 5.1
Konsequenzen aus Zipf • Wenn der häufigste Term (the) cf1 mal vorkommt – Kommt der zweithäufigste cf1/2 mal also halb so ou vor – Konstante kürzt sich raus – Der driahäufigste (and) cf1/3 mal … • aus cfi = K/i – log cfi = log K -­‐ log i Lineare Beziehung zwischen cf und i 14
Sec. 5.1
Zipfsches Gesetz für Reuters RCV1 15
Ch. 5
Kompression • Schauen nochmals Kompression für DicIonary und PosIngs an – Einfacher Boolscher Index – Offen posiIonale Indizes, etc. 16
Sec. 5.2
DICTIONARY KOMPRESSION 17
Sec. 5.2
DicIonary Speicherung erste Idee • Array mit Zellen fester Länge – ~400,000 Terme; 28 Bytes/Term = 11.2 MB. Dictionary Suchbaum
20 bytes
4 bytes each
18
Sec. 5.2
Zellen fester Länge verschwenden Speicher • Mehrzahl der 20 Byte sind unbelegt. Wir allozieren 20 Bytes für 1-­‐Buchstaben Terme – Darüberhinaus können lange Terme nicht behandelt werden. supercalifragilis>cexpialidocious or hydrochlorofluorocarbons. • Geschriebens Englisch nach Schütze et al. durchschnialich ~4.5 Zeichen/Wort • Durchschnialiches DicIonary Word Englisch: ~8 Zeichen • Kurze Wörter dominieren auf Tokenebene entsprechen aber nicht dem Durchschnia auf 19
Typesebene. Sec. 5.2
Komprimieren der Termliste: DicIonary-­‐as-­‐a-­‐String Speichern das Dictionary als langen
Zeichenstring:
 Pointer auf das nächste Wort zeigt das Ende des
aktuellen Worts an
 Soll 60% der Lexikongröße einsparen.
 ….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo….
Total string length =
400K x 8B = 3.2MB
Pointers resolve 3.2M
positions: log23.2M =
22bits = 3bytes
Sec. 5.2
Platzverbrauch DicIonary als String • 4 Byte pro Term für die Frequenz ⎫ Jetzt ~ 11
⎬ Bytes/Term,
• 4 Byte für den PosIngs Pointer. ⎭ nicht 20.
• 3 Byte für Termpointer • Durchschn. 8 Byte für den Termstring • 400K Terme x 19 ⇒ 7.6 MB (vgl. zu 11.2MB für staIsche Länge) 21
Sec. 5.2
Blocking • Pointer nur für jeden kten TermString. – Unten: k=4. • Brauchen Termlängen (1 Extra Byte) ….7systile9syzygetic8syzygial6syzygy11szaibelyite8szczecin9szomo….
⎫ Sparen 9 Bytes
⎬ für 3
⎭ Pointer.
Brauchen 4
für Längen.
22
Sec. 5.2
DicIonary search without blocking • Assuming each dicIonary term equally likely in query (not really so in pracIce!), average number of comparisons = (1+2·∙2+4·∙3+4)/8 ~2.6 Exercise: what if the frequencies of query terms were non-­‐uniform
but known, how would you structure the dicIonary search tree? 23
Sec. 5.2
DicIonary search with blocking • Binary search down to 4-­‐term block; – Then linear search through terms in block. • Blocks of 4 (binary tree), avg. = (1+2·∙2+2·∙3+2·∙4+5)/8 = 3 compares 24
Sec. 5.2
Front Coding • Front-­‐Coding: – SorIerte Wörter haben ou lange gemeinsame Präfixe – speichere nur die Unterschiede – (for last k-­‐1 in a block of k) 8automata8automate9automa'c10automa'on →8automat*a1◊e2◊ic3◊ion
Kodiere automat
Zusatzlänge über automat.
Sec. 5.2
RCV1 DicIonary Kompression Summary Technique Size in MB Feste Länge 11.2 DicIonary-­‐as-­‐String mit Pointern 7.6 Blocking k = 4, nur jeder 4. Term mit Pointer 7.1 Blocking + Front Coding 5.9 26
Sec. 5.3
POSTINGS KOMPRESSION 27
Sec. 5.3
PosIngs Kompression • PosIngs File viel größer, wenigstens Faktor 10. • Was man will: jedes PosIng kompakt speichern. • PosIng bei uns docID. • Für Reuters (800,000 Dokumente), 32 Bit pro docID wenn wir 4-­‐byte Integers verwenden • AlternaIv, können wir log2 800,000 ≈ 20 bits pro docID benutzen. • Ziel: deutlich weniger als 20 Bit pro docID. 28
Sec. 5.3
PosIngs: unterschiedliche Fälle • Term arachnocentric kommt u.U. nur einmal in einer Million Dokumente vor log2 1M ~ 20 bits. • Term wie the kommt fast in jedem Dokument vor; 20 Bits/PosIng ist zu teuer. – Idee 0/1 Bitmap Vektor benutzen. 29
Sec. 5.3
PosIngs file entry • Speichern die Liste der Dokumente die einen Term enthalten mit zunehmender docID. – computer: 33,47,154,159,202 … • Konsequenz: genügt die Gaps zu speichern. – computer: 33,14,107,5,43 … • Hoffnung: die meisten Gaps können mit deutlich weniger als 20 bits kodiert werden. • Zwei Verfahren siehe IntroducIo to InformaIon Retrieval 30
Sec. 5.3
RCV1 compression Data structure
Size in MB
dictionary, fixed-width
11.2
dictionary, term pointers into string
7.6
with blocking, k = 4
7.1
with blocking & front coding
5.9
collection (text, xml markup etc)
3,600.0
collection (text)
Term-doc incidence matrix
960.0
40,000.0
postings, uncompressed (32-bit words)
400.0
postings, uncompressed (20 bits)
250.0
postings, variable byte encoded
116.0
postings, γ-encoded
101.0
31
Sec. 5.3
Index Kompression Zusammenfassung • Haben Überblick zu einem Index für Boolesches Retrieval, der speichereffizient ist • Nur 4% der KollekIonsgröße • Nur 10-­‐15% der Größe des Textes der KollekIon • Aber posiIonale InformaIon ignoriert • Ersparnis also kleiner für Indizes in der Praxis, aber Techniken von der Substanz her dieselben 32
Ch. 5
Lesearbeit • IIR 5 Kodierungsverfahren für PosIgsfile nur bei Interesse • F. Scholer, H.E. Williams and J. Zobel. 2002. Compression of Inverted Indexes For Fast Query EvaluaIon. Proc. ACM-­‐SIGIR 2002. – Variable byte codes • Williams and Zobel. Searchable Words on the Web. 2005 33