Information Retrieval and Web Search

Slides:



Advertisements
Similar presentations
Information Retrieval in Practice
Advertisements

PrasadL07IndexCompression1 Index Compression Adapted from Lectures by Prabhakar Raghavan (Yahoo, Stanford) and Christopher Manning.
CpSc 881: Information Retrieval. 2 Why compression? (in general) Use less disk space (saves money) Keep more stuff in memory (increases speed) Increase.
CS276 Information Retrieval and Web Search Lecture 5 – Index compression.
Introduction to Information Retrieval Introduction to Information Retrieval Information Retrieval and Web Search Lecture 5: Index Compression.
Hinrich Schütze and Christina Lioma Lecture 5: Index Compression
Index Compression David Kauchak cs160 Fall 2009 adapted from:
Introduction to Information Retrieval Introduction to Information Retrieval CS276: Information Retrieval and Web Search Pandu Nayak and Prabhakar Raghavan.
Information Retrieval and Web Search
Indexing UCSB 290N. Mainly based on slides from the text books of Croft/Metzler/Strohman and Manning/Raghavan/Schutze All slides ©Addison Wesley, 2008.
CS276A Information Retrieval Lecture 3. Recap: lecture 2 Stemming, tokenization etc. Faster postings merges Phrase queries.
CS336: Intelligent Information Retrieval
Information Retrieval IR 4. Plan This time: Index construction.
Index Compression Lecture 4. Recap: lecture 3 Stemming, tokenization etc. Faster postings merges Phrase queries.
Web Search – Summer Term 2006 II. Information Retrieval (Basics) (c) Wolfgang Hürst, Albert-Ludwigs-University.
Introduction to Information Retrieval Introduction to Information Retrieval Hinrich Schütze and Christina Lioma Lecture 5: Index Compression 1.
Information Retrieval Space occupancy evaluation.
Indexing Debapriyo Majumdar Information Retrieval – Spring 2015 Indian Statistical Institute Kolkata.
Lecture 6: Index Compression
CS347 Lecture 2 April 9, 2001 ©Prabhakar Raghavan.
Introduction to Information Retrieval (Manning, Raghavan, Schutze) Chapter 1 Boolean retrieval.
Dictionaries and Tolerant retrieval
Recap Preprocessing to form the term vocabulary Documents Tokenization token and term Normalization Case-folding Lemmatization Stemming Thesauri Stop words.
ADFOCS 2004 Prabhakar Raghavan Lecture 2. Corpus size for estimates Consider n = 1M documents, each with about 1K terms. Avg 6 bytes/term incl spaces/punctuation.
CS728 Web Indexes Lecture 15. Building an Index for the Web Wish to answer simple boolean queries – given query term, return address of web pages that.
1 ITCS 6265 Information Retrieval and Web Mining Lecture 5 – Index compression.
Index Compression David Kauchak cs458 Fall 2012 adapted from:
Introduction to Information Retrieval Introduction to Information Retrieval Information Retrieval and Web Search Lecture 5: Index Compression.
Information Retrieval Techniques MS(CS) Lecture 6 AIR UNIVERSITY MULTAN CAMPUS Most of the slides adapted from IIR book.
1. L01: Corpuses, Terms and Search Basic terminology The need for unstructured text search Boolean Retrieval Model Algorithms for compressing data Algorithms.
Evidence from Content INST 734 Module 2 Doug Oard.
Information Retrieval Techniques MS(CS) Lecture 7 AIR UNIVERSITY MULTAN CAMPUS Most of the slides adapted from IIR book.
Introduction to Information Retrieval Introduction to Information Retrieval Introducing Information Retrieval and Web Search.
Search Engines WS 2009 / 2010 Prof. Dr. Hannah Bast Chair of Algorithms and Data Structures Department of Computer Science University of Freiburg Lecture.
Introduction to Information Retrieval Introduction to Information Retrieval Lecture 8: Index Compression.
Introduction to COMP9319: Web Data Compression and Search Search, index construction and compression Slides modified from Hinrich Schütze and Christina.
1. 2 Today’s Agenda Search engines: What are the main challenges in building a search engine? Structure of the data index Naïve solutions and their problems.
CS315 Introduction to Information Retrieval Boolean Search 1.
CS276A Text Information Retrieval, Mining, and Exploitation Lecture 2 1 Oct 2002.
University of Maryland Baltimore County
Why indexing? For efficient searching of a document
COMP9319: Web Data Compression and Search
Take-away Administrativa
Large Scale Search: Inverted Index, etc.
CPSC 231 Organizing Files for Performance (D.H.)
Text Indexing and Search
Indexing UCSB 293S, 2017 Mainly based on slides from the text books of Croft/Metzler/Strohman and Manning/Raghavan/Schutze All slides ©Addison Wesley,
Lecture 1: Introduction and the Boolean Model Information Retrieval
Indexing & querying text
Modified from Stanford CS276 slides Lecture 4: Index Construction
Index Compression Adapted from Lectures by Prabhakar Raghavan (Google)
Implementation Issues & IR Systems
AP CSP: Bytes, File Sizes, and Text Compression
Boolean Retrieval.
Index Compression Adapted from Lectures by
Index Construction: sorting
Lecture 7: Index Construction
Information Retrieval and Web Search Lecture 1: Boolean retrieval
Lectures 4: Skip Pointers, Phrase Queries, Positional Indexing
Lecture 5: Index Compression Hankz Hankui Zhuo
3-3. Index compression Most slides were adapted from Stanford CS 276 course and University of Munich IR course.
Indexing 4/11/2019.
Adapted from Lectures by
CS276: Information Retrieval and Web Search
INFORMATION RETRIEVAL TECHNIQUES BY DR. ADNAN ABID
CSE 326: Data Structures Lecture #14
INFORMATION RETRIEVAL TECHNIQUES BY DR. ADNAN ABID
Index Structures Chapter 13 of GUW September 16, 2019
INFORMATION RETRIEVAL TECHNIQUES BY DR. ADNAN ABID
Presentation transcript:

Information Retrieval and Web Search Lecture 5 – Index compression

Plan Last Chapter This Chapter Index construction Index compression Doing sorting with limited main memory Parallel and distributed indexing This Chapter Index compression Space estimation Dictionary compression Postings compression

Corpus size for estimates Consider N = 1M documents, each with about L=1K terms. Avg 6 bytes/term incl. spaces/punctuation 6GB of data. Say there are m = 500K distinct terms among these.

Recall: Don’t build the matrix A 500K x 1M matrix has half-a-trillion 0’s and 1’s. But it has no more than one billion 1’s. matrix is extremely sparse. So we devised the inverted index Devised query processing for it Where do we pay in storage?

Where do we pay in storage? Terms Pointers

Index size Stemming/case folding/no numbers cuts Stop words number of terms by ~35% number of non-positional postings by 10-20% Stop words Rule of 30: ~30 words account for ~30% of all term occurrences in written text [ = # positional postings] Eliminating 150 commonest terms from index will reduce non-positional postings ~30% without considering compression With compression, you save ~10%

Storage analysis First, we will consider space for postings Basic Boolean index only No analysis for positional indexes, etc. We will devise compression schemes Then we will do the same for the dictionary

Postings: two conflicting forces A term like Calpurnia occurs in maybe one doc out of a million – we would like to store this posting using log2 1M ~ 20 bits. A term like the occurs in virtually every doc, so 20 bits/posting is too expensive. Prefer 0/1 bitmap vector in this case

Postings file entry We store the list of docs containing a term in increasing order of docID. Brutus: 33,47,154,159,202 … Consequence: it suffices to store gaps. 33,14,107,5,43 … Hope: most gaps can be encoded with far fewer than 20 bits.

Variable length encoding Aim: For Calpurnia, we will use ~20 bits/gap entry. For the, we will use ~1 bit/gap entry. If the average gap for a term is G, we want to use ~log2G bits/gap entry. Key challenge: encode every integer (gap) with ~ as few bits as needed for that integer. Variable length codes achieve this by using short codes for small numbers

(Elias) g codes for gap encoding Represent a gap G as the pair <length,offset> length is log2G in unary and uses log2G +1 bits to specify the length of the binary encoding of the offset offset = G − 2log2G in binary encoded in log2G bits. Recall that the unary encoding of x is a sequence of x 1’s followed by a 0.

g codes for gap encoding e.g., 9 is represented as <1110,001>. 2 is represented as <10,1>. Exercise: what is the g code for 1? Exercise: does zero have a g code? Encoding G takes 2 log2G +1 bits. g codes are always of odd length.

Exercise Given the following sequence of g-coded gaps, reconstruct the postings sequence: 1110001110101011111101101111011 From these g-decode and reconstruct gaps, then full postings.

What we’ve just done Encoded each gap as tightly as possible, to within a factor of 2. For better tuning – and a simple analysis – we need a handle on the distribution of gap values.

Zipf’s law The kth most frequent term has frequency proportional to 1/k. We use this for a crude analysis of the space used by our postings file pointers. Not yet ready for analysis of dictionary space.

Zipf’s law log-log plot

Rough analysis based on Zipf The i th most frequent term has frequency proportional to 1/i Let this frequency be c/i. Then The k th Harmonic number is Thus c = 1/Hm , which is ~ 1/ln m = 1/ln(500k) ~ 1/13. So the i th most frequent term has frequency roughly 1/13i.

Postings analysis contd. Expected number of occurrences of the i th most frequent term in a doc of length L is: Lc/i ≈ L/13i ≈ 76/i for L=1000. Let J = Lc ~ 76. Then the J most frequent terms are likely to occur in every document. Now imagine the term-document incidence matrix with rows sorted in decreasing order of term frequency:

Rows by decreasing frequency N docs J most frequent terms. N gaps of ‘1’ each. J next most frequent terms. N/2 gaps of ‘2’ each. m terms J next most frequent terms. N/3 gaps of ‘3’ each. etc.

J-row blocks In the i th of these J-row blocks, we have J rows each with N/i gaps of i each. Encoding a gap of i takes us 2log2 i +1 bits. So such a row uses space ~ (2N log2 i )/i bits. For the entire block, (2N J log2 i )/i bits, which in our case is ~ 1.5 x 108 (log2 i )/i bits. Sum this over i from 1 up to m/J = 500K/76 ≈ 6500. (Since there are m/J blocks.)

Exercise Work out the above sum and show it adds up to about 53 x 150 Mbits, which is about 1GByte. So we’ve taken 6GB of text and produced from it a 1GB index that can handle Boolean queries! Neat! Make sure you understand all the approximations in our probabilistic calculation.

Caveats This is not the entire space for our index: does not account for dictionary storage – next up; as we get further, we’ll store even more stuff in the index. Analysis assumes Zipf’s law model applies to occurrence of terms in docs. All gaps for a term are taken to be the same! Does not talk about query processing.

More practical caveat: alignment g codes are neat in theory, but, in reality, machines have word boundaries – 8, 16, 32 bits Compressing and manipulating at individual bit-granularity is overkill in practice Slows down query processing architecture In practice, simpler byte/word-aligned compression is better See Scholer et al., Anh and Moffat references For most current hardware, bytes are the minimal unit that can be very efficiently manipulated Suggests use of variable byte code

Byte-aligned compression Used by many commercial/research systems Good low-tech blend of variable-length coding and sensitivity to alignment issues Fix a word-width of, here, w = 8 bits. Dedicate 1 bit (high bit) to be a continuation bit c. If the gap G fits within (w − 1) = 7 bits, binary-encode it in the 7 available bits and set c = 0. Else set c = 1, encode low-order (w − 1) bits, and then use one or more additional words to encode G/2w−1 using the same algorithm

Exercise How would you adapt the space analysis for g-coded indexes to the variable byte scheme using continuation bits?

Exercise (harder) How would you adapt the analysis for the case of positional indexes? Intermediate step: forget compression. Adapt the analysis to estimate the number of positional postings entries.

Word-aligned binary codes More complex schemes – indeed, ones that respect 32-bit word alignment – are possible Byte alignment is especially inefficient for very small gaps (such as for commonest words) Say we now use 32 bit word with 2 control bits Sketch of an approach: If the next 30 gaps are 1 or 2 encode them in binary within a single word If next gap > 215, encode just it in a word For intermediate gaps, use intermediate strategies Use 2 control bits to encode coding strategy

Dictionary and postings files Usually in memory Gap-encoded, on disk

Inverted index storage We have estimated postings storage Next up: Dictionary storage Dictionary is in main memory, postings on disk This is common, and allows building a search engine with high throughput But for very high throughput, one might use distributed indexing and keep everything in memory And in a lower throughput situation, you can store most of the dictionary on disk with a small, in‑memory index Tradeoffs between compression and query processing speed Cascaded family of techniques

How big is the lexicon V? Grows (but more slowly) with corpus size Empirically okay model: Heap’s Law m = kTb where b ≈ 0.5, k ≈ 30–100; T = # tokens For instance TREC disks 1 and 2 (2 GB; 750,000 newswire articles): ≈ 500,000 terms m is decreased by case-folding, stemming Indexing all numbers could make it extremely large (so usually don’t) Spelling errors contribute a fair bit of size Exercise: Can one derive this from Zipf’s Law?

Dictionary storage - first cut Array of fixed-width entries 500,000 terms; 28 bytes/term = 14MB. Allows for fast binary search into dictionary 20 bytes 4 bytes each

Exercises Is binary search really a good idea? What are the alternatives?

Fixed-width terms are wasteful Most of the bytes in the Term column are wasted – we allot 20 bytes for 1 letter terms. And we still can’t handle supercalifragilisticexpialidocious. Written English averages ~4.5 characters/word. Exercise: Why is/isn’t this the number to use for estimating the dictionary size? Ave. dictionary word in English: ~8 characters Short words dominate token counts but not type average.

Compressing the term list: Dictionary-as-a-String Store dictionary as a (long) string of characters: Pointer to next word shows end of current word Hope to save up to 60% of dictionary space. ….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo…. Total string length = 500K x 8B = 4MB Pointers resolve 4M positions: log24M = 22bits = 3bytes Binary search these pointers

Total space for compressed list 4 bytes per term for Freq. 4 bytes per term for pointer to Postings. 3 bytes per term pointer Avg. 8 bytes per term in term string 500K terms  9.5MB  Now avg. 11  bytes/term,  not 20.

Blocking Store pointers to every kth term string. Example below: k=4. Need to store term lengths (1 extra byte) ….7systile9syzygetic8syzygial6syzygy11szaibelyite8szczecin9szomo….  Save 9 bytes  on 3  pointers. Lose 4 bytes on term lengths.

Net Shaved another ~0.5MB; can save more with larger k. Where we used 3 bytes/pointer without blocking 3 x 4 = 12 bytes for k=4 pointers, now we use 3+4=7 bytes for 4 pointers. Shaved another ~0.5MB; can save more with larger k. Why not go with larger k?

Exercise Estimate the space usage (and savings compared to 9.5MB) with blocking, for block sizes of k = 4, 8 and 16.

Impact on search Binary search down to 4-term block; Then linear search through terms in block. 8 documents: binary tree ave. = 2.6 compares Blocks of 4 (binary tree), ave. = 3 compares = (1+2∙2+4∙3+4)/8 =(1+2∙2+2∙3+2∙4+5)/8 1 2 3 1 2 3 4 4 5 6 5 6 7 8 7 8

Exercise Estimate the impact on search performance (and slowdown compared to k=1) with blocking, for block sizes of k = 4, 8 and 16.

Total space By increasing k, we could cut the pointer space in the dictionary, at the expense of search time; space 9.5MB  ~8MB Net – postings take up most of the space Generally kept on disk Dictionary compressed in memory

Extreme compression (see MG) Front-coding: Sorted words commonly have long common prefix – store differences only (for last k-1 in a block of k) 8automata8automate9automatic10automation 8{automat}a1e2ic3ion Encodes automat Extra length beyond automat. Begins to resemble general string compression.

Extreme compression Using (perfect) hashing to store terms “within” their pointers not great for vocabularies that change. Large dictionary: partition into pages use B-tree on first terms of pages pay a disk seek to grab each page if we’re paying 1 disk seek anyway to get the postings, “only” another seek/query term.

Compression: Two alternatives Lossless compression: all information is preserved, but we try to encode it compactly What IR people mostly do Lossy compression: discard some information Using a stopword list can be viewed this way Techniques such as Latent Semantic Indexing (later) can be viewed as lossy compression One could prune from postings entries that are unlikely to turn up in the top k list for query on word Especially applicable to web search with huge numbers of documents but short queries (e.g., Carmel et al. SIGIR 2002)

Top k lists Don’t store all postings entries for each term Only the “best ones” Which ones are the best ones? More on this subject later, when we get into ranking

Resources IIR 5 MG 3.3, 3.4. F. Scholer, H.E. Williams and J. Zobel. 2002. Compression of Inverted Indexes For Fast Query Evaluation. Proc. ACM-SIGIR 2002. V. N. Anh and A. Moffat. 2005. Inverted Index Compression Using Word-Aligned Binary Codes. Information Retrieval 8: 151–166.