索引壓縮
信息檢索中有兩個主要數據結構:詞典和倒排記錄表,索引壓縮主要是壓縮這兩個數據結構。索引壓縮的優點:
- 節省磁盤空間
- 增加高速緩存技術的利用率
- 加快數據從磁盤到內存的傳輸速度
對解壓縮算法的要求:必須快
30定律
出現頻率最高的30個詞在書面文本中占了30%的出現比例。
無損壓縮與有損壓縮
無損壓縮是指壓縮之后所有的信息都被保留。有損壓縮則會丟掉一些信息,但會得到更高的壓縮率。
Heaps定律
一個對詞項數據進行估計的方法是采用Heaps 定律:
? 其中T是文檔集合的詞條個數,30 <= k <= 100, b 約等于 0.5。Heaps定律認為:文檔集合大小和詞匯量之間可能存在的最簡單的關系是他們在對數空間中存在現象關系,并且這種線性關系往往和實際情況相吻合。
Heaps定律提出了兩個假設:
- 隨著文檔數目的增加,詞匯量會持續增長而不會穩定到一個最大值
- 大規模文檔集的詞匯量會非常大
Zipf定律
一個常用的估計詞項在文檔中分布的模型是Zipf定律:在給定的語料中,對于任意一個term,其頻度(freq)的排名(rank)和freq的乘積大致是一個常數。如果t1 是文檔集合中出現最多的詞項,t2是文檔集合中出現第二多的詞項,以此類推,排名第i多的詞項的文檔集合頻率cfi 與 1/ i成正比
詞典壓縮
詞典壓縮的主要目的是將詞典放入內存,或者說至少要把大部分詞典放入內存,這樣才能獲得很高的查詢吞吐率。主要有兩種壓縮方式
- 將詞典看成單一字符串的壓縮方法:整個詞典采用定長數組來存儲且所有詞項按照字典順序排序
- 按塊存儲:將長字符串中的詞項進行分組變成大小為k的塊(即k個詞項一組),然后每個塊只保留第一個詞項的指針,同時用一個額外字節將每個詞項的長度存儲在每個詞項的首部。
倒排記錄表的壓縮
主要思想是對文檔ID的間距而不是文檔ID進行編碼。主要有以下方式:
- 可變字節碼(VB):每個字節的低7位是二進制數,高位是一個決定位。編碼的最后一個字節高位位置為1,位置為0。處理器一般是以字節為處理單位,所以Variable ByteCode速度快,但是處理大數據壓縮比不高
- γ編碼:一個和最優編碼長度差距在常數倍之內的方法是γ 編碼。γ 編碼將間距G表示成長度(length)和偏移(offset)兩個部分進行變長編碼。G的偏移實際上是G的二進制編碼,但是前端的1 被去掉①。比如,對13(二進制為1101)進行編碼,其偏移為101。G的長度指的是偏移的長度,并采用一元編碼。對于剛才的例子,偏移的長度是3 位,因此其長度部分的編碼是1110。因此,13 的整個γ 編碼是1110101,即長度部分1110 和偏移部分101 的連接。表5-5 中的右列中給出了一些其他數的γ 編碼的例子。
對γ 編碼解碼時,首先讀入一元編碼直至遇到0 結束,比如在對1110101 解碼時,會一開始讀入前4 位1110。然后便知道后面的偏移部分的長度是3,因此,再正確讀入后續的3 位編碼101,補上原來去掉的前端的1,最后可以得到 101→1101 = 13。