索引壓縮


索引壓縮

  信息檢索系統中的兩個主要數據結構:詞典及倒排索引。下面將介紹對這兩個數據結構的各種壓縮技術,這些技術對於構建高效的 IR 系統非常關鍵。 進行壓縮的一個優點顯而易見:它能夠節省磁盤空間。要達到 1∶4 的壓縮比是非常容易的,也就是說可以降低 75%的索引存儲開銷。

  索引壓縮還有兩個隱含的優點。第一是能增加高速緩存(caching)技術的利用率。在搜索 系統中,詞典中某些條目及其索引往往比其他條目及其索引的使用更頻繁。例如,如果將一個頻 繁使用的查詢詞項 t 的倒排記錄表放到高速緩存中,那么對僅由 t 構成的查詢進行應答所需要的 計算完全可以在內存中完成。如果采用壓縮技術,那么高速緩存中就可以放更多的信息。當查詢詞項 t 的信息放在高速緩存時,處理查詢 t 便不再需要進行磁盤操作,而只需將其倒排記錄表在內存中解壓縮即可。因此,我們能充分減少 IR 系統的應答時間。由於內存比磁盤更貴,所以, 相對於磁盤空間的減少,采用高速緩存技術帶來的速度提升是采用壓縮技術的更主要的原因。 

  第二個隱含的優點是,壓縮能夠加快數據從磁盤到內存的傳輸速度。高效的解壓縮算法在現代硬件上運行相當快,這樣將壓縮的數據塊傳輸到內存並解壓所需要的總時間往往會比將未壓縮的數據塊傳輸到內存要快。舉例來說,即使會增加在內存進行解壓縮的開銷,我們也可以 通過加載一個小很多的壓縮倒排記錄表來減少 I/O 時間。因此,在大部分情況下,使用壓縮倒排記錄表的檢索系統會比沒用壓縮的系統的運行速度要快。 

  如果壓縮的主要目的是為了節省磁盤空間,那么壓縮算法的速度就不用特別考慮。但是, 如果要提高高速緩存利用率和磁盤到內存的傳輸率,則解壓縮的速度必須要快。本章介紹的壓縮算法都非常高效,都可以達到上面提到的索引壓縮的全部 3 個目標。 

將詞典看成單一字符串的壓縮方法

  采用定長方法來存儲詞項存在着明顯的空間浪費。 一種解決上述缺陷的方法是,將所有的詞項存成一個長字符串,並給每個詞項增加一個定位指針,它在指向下一詞項的指針同時也標識着 當前詞項的結束。 (就是目前構架中的var_data)

  實際上,按照詞典順序排序的連續詞項之間往往具有公共前綴。因此,可以采用一種稱為前端編碼(front coding)的技術。 公共前綴被識別出來之后,后續的詞項中便可以使用一個特殊的字符來表示這段前綴。

  

倒排記錄表的壓縮

  想象一下在文檔 集中遍歷文檔來尋找某個高頻詞項(如 computer)的過程:我們會找到一篇包含 computer 的文 檔,然后可能會跳過幾篇不包含它的文檔,之后又會找到另一篇包含 computer 的文檔。這個過 程可以不斷循環下去(參見表 5-3)。這里面最關鍵的思路就是(一些詞項對應的)倒排記錄表 中文檔 ID 之間的間距(gap)不大,因此可以考慮用比 20 比特短很多的位數來表示它。實際上, 對於一些高頻詞(如 the 和 and)來說,絕大部分間距都是 1。當然,對於只在文檔集中出現一 兩次的罕見詞(如表 5-3 中的 arachnocentric),其間距的數量級和文檔 ID 的數目是一樣的,因 此仍然需要 20 比特。為了對這種間距分布的情況進行空間壓縮,需要使用一種變長編碼方法, 它可以對短間距采用更短的位數來表示。 

  

可變字節碼

  VB(Variable byte, 可變字節)編碼利用整數個字節來對間距編碼。字節的后 7 位是間距的有效編碼區,而第 1 位是延續位(continuation bit)。如果該位為 1,則表明本字節是某個間距編 碼的最后一個字節,否則不是。要對一個可變字節編碼進行解碼,可以讀入一段字節序列,其中前面的字節的延續位都為 0,而最后一個字節的延續位為 1。根據上述標識可以把每個字節的 7 位部分抽取出來並連接在一起形成編碼。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM