• 沒有找到結果。

基於詞彙式大字符集、二階預測模型之文本資料壓縮

N/A
N/A
Protected

Academic year: 2021

Share "基於詞彙式大字符集、二階預測模型之文本資料壓縮"

Copied!
12
0
0

加載中.... (立即查看全文)

全文

(1)基於詞彙式大字符集、二階預測模型之文本資料壓縮 Text Compression Based on Word-Based Large Alphabet and Order-Two Prediction Model 古鴻炎 Hung-Yan Gu. 溫智旻 and. Chih-Ming Wen. 國立台灣科技大學資訊工程系 e-mail: [email protected]. http://www.csie. ntust.edu.tw. 摘要. 每次要處理的符號單位的大小,將取出的“ 符號單 位” (token)送到模式組件去估算機率。 對英文文章剖析的相關研究,如文獻[13]中 將大字符集的觀念應用到一些常用的壓縮演算法 上面,將英文文章的組成分類成字母、數字字串 (alphanumeric string)與標點符號字串(punctuation string)兩類,因此一篇文章看成是不等長度之兩類 字串所串成,並且把每個字串當作一個 token,此 外在他們的研究中,也嘗試將英文詞彙分詞性來增 加預測的準確性。後來 Moffat、Neal、Witten 在 1995 年提出的論文中[8],對算術編碼作一些配合 大字符集處理的修改,他們的剖析處理與文獻[13] 裡的相同,並限制每個字串的最大長度為 16 個字 元。另外在 2005 年由 Gu 提出的論文中[10],對英 文文章採用類似中文文章的剖析方法,依照一些判 斷規則,一次取一個或兩個 byte 作為 token。 在中文文章剖析方面,論文[9]中有提到許多 過去中文壓縮相關的研究,而他們自己的研究,對 中文文章一次取兩個 byte 為 token,實驗結果顯示 壓縮效果比取一個 byte 為 token 還好。在論文[14] 中,將大字符集觀念應用在詞典式編碼上,以中文 字元為 token,利用樣式匹配(pattern matching)的方 式將數個連續的中文字元取成一個中文詞彙放在 詞典中。此外論文[10, 15]中對中文文章的剖析, 則是將連續兩個 byte 滿足 BIG5 碼定義範圍的條件 下[16],以該兩個 byte 為 token。 模式(modeling): 模式步驟主要是建立模型來估計 各個字符集符號的出現機率,然後再將這個機率分 布送給編碼模組作參考。在模式步驟所用的模型若 是不同,則各個符號被估算出的機率也會不同。資 料壓縮處理所使用的機率預測模型,可依預測的方 式,分成靜態(static)模型、半調適(semi-adaptive) 模型、及調適(adaptive)模型[6]。在靜態模型與半 調適模型裡,機率分布一直維持不變,且半調適模 型為了得到文本檔案中所有符號的機率分布,必須 作 two-pass 的壓縮處理。為了作 one-pass 的壓縮 處理,及動態掌握文章特性的變化,以下我們只討 論、研究調適式的模型。 與模式相關的研究大致上可分為兩類:詞典 式 模 型 (dictionary-based models) 與 預 測 式 模 型 (predictive models)。詞典式模型是將一個檔案前面. 本論文研究基於詞彙式大字符集之文本資料 壓縮方法,將中、英文檔案以詞彙為單位剖析出 token,再對 token 以二階混合式預測模型或部分匹 配預測模型來估算出現機率,接著以算術編碼對該 機率編碼。由於字符集很大,影響預測模型的處理 速度,因此我們也研究一些可以加快處理的方法。 將上述想法實作為實際可壓縮、解壓縮的程 式後,作壓縮率的測試實驗,再和 PPMd、bzip2、 及 GZIP 程式作比較。對於中文檔案,我們的平均 壓縮率,比 PPMd 好 1.12%,比 bzip2 好 5.48%, 比 GZIP 好 17.02%。對於英文檔案,平均壓縮率 則比 PPMd 好 0.29%,比 bzip2 好 2.04%,比 GZIP 好 12.08%。所以,文本資料壓縮率的改進,相當 不容易,而本研究或多或少都得到了一些改進。 關鍵詞: 資料壓縮,大字符集,算術編碼. 1. 前言 在此資訊愈來愈發達的時代,電腦及網路幾 乎已經成為每個家庭必備的工具。而資料壓縮最主 要的功用,就是可以節省電腦的儲存空間,也可以 在有限頻寬的網路環境下,減少檔案傳輸所花的時 間。. 如今已有許多書籍內容都被轉換成可以 用電腦來儲存及處理的格式。如:圖書館中的 書本資料,研究論文放在網上供人瀏覽、查 詢,技術文件、軟體使用說明隨產品附在光碟 片中供使用者閱讀等。由於這些文本(text)資 料愈來愈普遍,為了讓電腦中的文本資料,以 更有效率的方式作儲存與傳輸,研究文本資料 的壓縮技術是必要的。 1.1 相關研究 在文本(text)資料壓縮的研究領域,我們以三 個處理步驟來討論過去被提出的方法。處理步驟 為:剖析、模式(modeling)、編碼(coding)。 剖析(parsing): 剖析步驟主要是決定輸入資料裡. 1.

(2) 壓縮過的文句,建立一個詞典模型,之後如果遇到 詞典中的符號,則以它在詞典中的索引表示。與詞 典式模型相關的研究,如在 1977、1978 年由 Ziv 和 Lempel 發表的 LZ77、LZ78 壓縮法[3, 4],以及 1984 年由 Welch 對 LZ78 改進之 LZW 壓縮法[5], 及其它的改進作法。 預測式模型是利用壓縮過的符號來預測目前 可能遇到的符號的出現機率。但如果在最近幾個符 號出現的條件下(即估算條件機率),目前要壓縮之 符 號 沒 出 現 過 , 就 會 遇 到 所 謂 的 零 頻 (zero frequency)問題,也就是目前符號的機率為零。解 決的方法是利用一個特殊符號「逃脫符號(escape symbol)」來表示機率為零的情況,而逃脫符號的 出現機率設定,在過去的文獻中可以找到相關研究 [6, 7, 8, 9, 10]。預測式模型最具代表性的是由 Cleary 及 Witten 在 1984 年提出之“ 部分匹配預測 模型” (prediction by partial match, PPM)[11],基於 此方法再配上算術編碼,可以達到非常好的壓縮效 果,因此後來不少研究者對於部分匹配預測模型的 逃脫機率估算方面,再作改進及發展出一些壓縮效 果更好的演算法,如:PPMC、PPMD、PPMZ、 PPMII 等[12]。本論文在模式步驟也採用了部分匹 配的預測模型的方法。 編碼(coding):編碼步驟就是將一個符號依照其出 現機率決定要編的碼長及碼,出現機率大的符號使 用較短的碼來編該符號,如此便可減少整個文本資 料編碼後的檔案長度。 基於這個觀念,在 1952 年由 Huffman 提出的 Huffman 編碼[1],他將每個符號依出現機率用整 數個位元來編碼,該編碼方法的優點是編碼速度 快,應用廣泛,例如 Win-RAR、JPEG 等都使用了 Huffman 編碼。在 1976 年,Rissanen 提出算術編 碼[2],它和 Huffman 編碼最大的差別就是,觀念 上它能將一個符號以分數個位元的碼長作編碼。本 論文在編碼的部分,也是基於算術編碼來實作的。. 編碼,其原因應是,所需要的記憶體非常大,且壓 縮處理所花的時間也較長。因此我們便思考,若使 用詞彙為 token 的大字符集來作英文的高階預測編 碼,是否能達到更低的壓縮率?而它的相關問題 是,使用龐大的資料結構的情況下,如何妥善管理 記憶體、減少壓縮時間?也是需要去研究有效率的 作法。 在剖析步驟,我們採用基於詞彙式 (word-based)的方法,也就是以詞彙為 token,並將 可能出現的詞彙分為三類:中文詞彙、英文詞彙、 符號詞彙,因此可能從一篇文章中剖析出來的不同 詞彙非常多,也就是這些可能詞彙所建立的詞符 集,它的大小理論上是無限的,而實際上是有限但 非常大。在模式步驟,本論文主要是使用最高階為 二階的部分匹配預測模型觀念來實作,應用此模型 來估算文章中所剖析出來的詞彙的機率,但由於詞 符集的大小非常大,因此為了加速詞彙搜尋、詞彙 機率計算、模型更新,我們用到樹(tree)及雜湊表 (hash table)的資料結構來建構模型。在編碼步驟, 本文採用最逼近熵值的算術編碼方法,來將目前詞 彙依模型預測出的機率編成二進位碼。由於所找到 的算術編碼軟體是針對小字符集(256 個字符)來設 計的,因此本文修改算術編碼軟體,將計算上的數 值範圍加大,以支援大字符集的算術編碼處理。 本文所製作的壓縮程式之流程,與一般文本 資料壓縮的流程大致相同,如圖 1 所示,其中每個 步驟的詳細處理方法,將在以下各節中說明。所製 作 的 壓 縮 程 式 執 行 檔 , 可 以 從 http://guhy.csie. ntust.edu.tw/~adream/下載,提供測試之用。 中、英文 文本檔 案 大字符 集,剖 析語詞. 1.2 研究方法. 模型, 計算語 詞機率. 以算術編 碼,對機 率作編碼. 程式結束 是 EOF? 否. 為了比較壓縮效果的好壞,需要量測壓縮率 以作為一個判斷標準,在此壓縮率的定義如下:. 壓縮後大小 壓縮率  100% 壓縮前大小. 壓縮 後檔 案. 圖 1 詞彙式文本資料壓縮之流程. (1). 2. 大字符集之剖析、資料結構、算術編碼. 所以壓縮率愈小代表壓縮效果愈好。 由之前提到的文本資料壓縮方面的研究文 獻,我們發現在剖析的部分,使用大字符集的觀念 所得到的壓縮率通常都會比使用小字符集來得 小。使用大字符集的研究,通常是從中文文章中, 每次取兩個 byte 為 token,從英文文章每次取一個 英文單詞(word)為 token。但是過去的研究,在取 出一個英文詞彙後,只對該詞彙作零階的預測編 碼,亦即只考慮各個詞彙在處理過文章中的出現機 率,而沒有利用到詞彙之間的相關性。過去所以沒 看到有人研究使用大字符集來作英文的高階預測. 2.1 基於大字符集之剖析 本研究以詞彙為 token,一次剖析出一個詞彙 來作壓縮處理,我們將詞彙分成四類:中文詞彙、 英文詞彙、常用符號詞彙、罕用符號詞彙。若取出 的詞彙在詞符集(word alphabet)中沒出現過,則必 須先對這個新詞彙的各個組成 byte 作編碼,編碼 作法是,依該詞彙所屬類別按照規則將該詞的各組 成 byte 以重新表示值(re-representation value)表 示,而重新表示值的計算,則依據所有可能的 byte 值所成的字符集大小來訂定,以避免不必要的字符. 2.

(3) i 48, if 48 B 57   (4) R B i ,  i 55, if 65 B 90 i 61, otherwise  公式(4)將英文詞彙中每一個英文字元的 byte 值 B 轉換成該字元的重新表示值 R。 常用符號詞彙剖析: 常用符號詞彙是由連續的常 用符號字元所組成,而總長度不能超過 20。我們 將滿足表 3 中 byte 值範圍的字元及滿足表 4 中 byte 值組合的連續兩個 bytes 剖析成一個常用符號字 元。 表 3 常用半形符號字元之 ASCII 範圍. 集空間浪費。 中文單字剖析: 中文單字之剖析,我們依據 BIG5 碼的編碼規則,將連續兩個 byte 值取出來判斷是 否為中文字,將符合表 1 中所列範圍的連續兩個 byte 剖析成一個中文單字。在此我們將全形的英文 字元視為中文單字。 表 1 剖析中文單字詞彙之 byte 值範圍 第一個 byte 第二個 byte. byte 值範圍 162 163~198, 201~248 175~254 64~126, 161~254. 249 64~126, 161~220. 而每個中文單字的兩個重新表示值計算公式. 字元. 控制碼. 標點符號. ASCII 碼. 0~31. 32~47, 58~64, 91~96, 123~126. 為: k 162, if 162 B1 198  (2)  k 164, otherwise  j 64, if 64 B2 126 (3) R2 B2 j ,  j  98 , otherwise  公式(2)為第一個 byte B1 的重新表示值 R1 的計算公 式,公式(3)為第二個 byte B2 的重新表示值 R2 的計 算公式。 中文二字詞剖析: 本文將中文文章中常出現的中 文二字詞剖析成一個中文詞彙,剖析的步驟如下: 先假設連續出現的兩個中文單字詞是一個二字 詞,而到詞符集中搜尋該二字詞是否已經存在詞符 集中,若是存在,則一次將這兩個連續中文字剖析 成一個中文二字詞,否則只取出第一個中文單字作 為 token。我們並不是在作剖析時,附帶建立新的 中文二字詞,至於將中文二字詞加入詞符集的作 法,本文研究了兩種作法:靜態詞典方式,動態判 斷方式。 靜態詞典方式是,在程式初始化時,直接將 20,638 個常用中文二字詞加入詞符集中,並將各個 中文二字詞的出現次數設為 1。 動態判斷方式是,在將一個剖析出的詞彙編 碼完畢時,檢查目前的詞彙 Wi 及前一個出現的詞 彙 Wi-1 是否都是中文單字詞,若是的話,假設 Wi-1 的出現次數為 c1,而(Wi-1, Wi)兩個單字詞一起出現 的次數為 c2,當條件(c2 ≥5 且 c2/c1 ≥0.5)成立時, 就將這兩個單字詞組合成一個中文二字詞,加入詞 符集中,並將該二字詞的出現次數設為 c2。 英文詞彙剖析: 英文詞彙的剖析是,一次判斷一個 輸入的 byte,若該 byte 的 ASCII 值屬於表 2 中所 列的範圍,則表示該 byte 是一個英文字元,我們 將連續出現的英文字元剖析成一個英文詞彙,但最 大長度不能大於 20,在此我們將阿拉伯數字也視 為英文字元的一部分。. 表 4 常用全形符號字元之 byte 值範圍. R1 B1 k ,. 第一個 byte 第二個 byte. 各個常用符號字元的重新表示值計算公式如 下: R B i ,. ‘ 0’~ ‘ 9’. ‘ A’~ ‘ Z’. ‘ a’~ ‘ z’. Byte 值. 48~57. 65~90. 97~122. if 0 B 47 i 0,  i 10, if 58 B 126  i 44 , otherwise . (5). 公式(5)將常用符號詞彙中每一個字元的 byte 值 B 轉換成該字元的重新表示值 R。 罕用符號詞彙剖析: 罕用符號詞彙就是由連續的 罕用符號字元所組成,罕用符號詞彙的最大長度不 能超過 4。表 5 列出罕用符號字元之 byte 值的範圍。 表 5 罕用符號字元之 byte 值範圍 byte 值. 罕用符號字元 127~255. 各個罕用符號字元也以重新表示值表示,轉 換公式如公式(6)所示。 (6) R B 127 每次剖析出一個新的詞彙,組成 bytes 經過 重新表示後,會先編碼出一個詞彙層級的逃脫 token,接著再對組成字元作編碼,然後將此新詞 彙插入詞符集中,詳細步驟之後會再介紹。. 2.2 雜湊表(hash table) 在詞符集方面,我們使用雜湊表來加速搜尋 及更新詞彙的計數資料,雜湊表主要的用途是可以 將一個詞彙轉換成一個索引值(index),若將一個詞 彙的資訊存在這個索引值所指的位置上,之後若要 搜尋某一個詞彙的資訊時,就不需作循序式 (sequential)的搜尋,因而可加快搜尋速度。 雜湊函數(hash function): 雜湊函數的作用就是要 將一個詞彙轉成一個索引值,雜湊函數的設定對雜 湊表搜尋速度有很大的影響。在此我們定義兩個雜 湊函數 f1 及 f2,公式如下:. 表 2 剖析英文字元之 byte 值範圍 字元. byte 值範圍 161~162 64~126, 161~174. 各個英文字元的重新表示值計算公式如下:. 3.

(4) index1 (index1 613 wi ) % size. f 1 ( w) :. 一個剖析出的詞彙會屬於不同的種類及具有不同 的長度,因此需要將一個新詞彙的種類及長度以一 個“ 種類長度字元” 表示, 其重新表示值如表 7 所 示。 表 7 種類長度字元之重新表示值. (7). i 1, 2, ... , length index1 (index1 length) % size f 2 ( w) : index 2 (index 2 127 wi ) % size. (8). i 1, 2, ... , length. 詞彙種類 詞彙長度 重新表示值. index2 (index 2 1) % ( size 1) 1 其中 size 為雜湊表的大小,w 為所要轉換的字串, wi 為字串中第 i 個字元,length 為 w 的長度。index1 與 index2 為經由兩個雜湊函數所求出的索引值,它 們的初值設為 0,然後將字串中每一個字元 wi 分 別代入公式(7)及公式(8)的第一列後,得到介於 0 到 size-1 之間的索引值。之後,index1 再作公式(7) 第 3 列的運算,index2 也多作公式(8)第 3 列的運 算,以讓 index2 的範圍變為 1 至 size-1。本文利用 double hashing 的方法來求索引值。 double hashing: 當利用雜湊函數將目前所要加入 的詞彙轉換成索引值時,若發現該索引值的位置上 已經有另一個詞彙,這時就發生“ 衝突” (collision) 的問題,必須再計算下一個索引值來存放目前這一 個詞彙,解決衝突的方法有許多種,其中 double hashing 的效果不錯,因此我們採用這個方法來計 算詞彙的索引值。 Double hashing 的方法需要用到兩個雜湊函 數,我們利用之前定義的兩個雜湊函數來實作。公 式如下: (9) new _ indexi (index1 i index 2 ) % size. 0 階字符集. 字元 個數 最大 階數. 157. 62. 131. 129. 46. 1. 1. 0. 4. 4. 3. 2 階字符集. 圖 2 各階預測模型的字符集結構 圖 2 中,假設前兩個出現字元為 x、y,若要 計算目前字元的 2 階模型機率,則必須先取得在 x、y 出現情形下的 2 階搜尋樹,取得的步驟為: 先從 0 階字符集的樹中找出 x 節點,接著由 x 節點 中指向 1 階的指標得到在 x 出現情形下的 1 階搜尋 樹,並且在此 1 階的樹中找出 y 節點,便可由此 y 節點中指向 2 階的指標,得到我們所要找的搜尋 樹,即圖 2 中右邊虛線方框部分。. 2.4 各階詞符集的結構 本文將所有剖析出的不同詞彙儲存在 0 階模 型詞符集中,用以計算各個詞彙的 0 階預測機率。 當要把詞彙加入 0 階模型詞符集時,先以雜湊函數 算出索引值,再將此索引值插入詞符集的二元搜尋 樹中,並將該詞彙資訊存在索引值所指的雜湊表格 子(entry)上,此外每個雜湊表格子也儲存一個指向 高階模型詞符集之指標及該高階詞符集的一些資 訊(如:“ 出現詞彙個數” 、“ 詞符集大小” 、“ 出現一 次的詞彙個數” 等),如圖 3 所示的,就是各階模型 的詞符集結構。 圖 3 中,假設前兩個出現的詞彙的索引值為 x、y,為了要取得在 x、y 出現情形下的 2 階模型 搜尋樹,首先我們由雜湊表中 x 位置指向 1 階的 樹,接著在此 1 階的搜尋樹中以二元搜尋的方式. 常用符 罕用符 種類長 號字元 號字元 度字元. 86. 1 階字符集. y. 本文共使用 6 種字符集,如表 6 所示。每一 個字符集代表某一類詞彙所使用到的字元集合。 表 6 六種字符集 英文 字元. 常用符號 罕用符號 1~20 1~4 22~41 42~45. x. 2.3 各階字符集的結構. 漢字第 漢字第 一 byte 二 byte. 英文 1~20 2~21. 我們對於上述 6 種字符集裡的字元,希望所 有字元都能在 0 階模型中求得機率,因此在 0 階模 型中將這 6 種字符集的所有字元皆初始化為出現 1 次。為了增加搜尋速度,我們在 0 階模型中,將每 種字符集的樹建成一個平衡樹(balanced tree),而高 階模型字符集是從 0 階模型字符集中每個樹節點 上的指標指出,其結構如圖 2 所示。. 其中 index1 為雜湊函數 f1 所求出的索引值,index2 為雜湊函數 f2 求出之索引值,new_indexi 表示以 double hashing 方法算出之第 i 次的索引值,i 的值 從 1 至 size。若要保證公式(9)計算出來的索引值皆 不同,即能夠對整個雜湊表的所有位置都訪問一 次,其條件是,index2 要與 size 互質,因此我們將 雜湊表的大小 size 取為質數。 負載係數(load factor): 負載係數的值界於 0 到 1 之間,當負載係數為 0.1,表示目前雜湊表中已經 被用掉十分之一的空間,若負載係數超過一個門檻 值時,就要從表中刪除一些資料或是增加雜湊表的 大小以降低負載係數來加快搜尋,在此我們將負載 係數之門檻值設為 0.72[17]。. 種類. 中文 1~2 0~1. 表 6 中,“ 種類長度字元” 字符集為所有可能 的“ 種類” 、“ 長度” 字元重新表示值所成集合。由於. 4.

(5) 0 階詞符集. 1 階詞符集. 在 Nelson 的原始算術編碼程式中,是以 16 位元的整數來表示數值,即初始整數區間為 0 至 65,535,若所有符號的區間總和超過 65,535 的四分 之一時,算術編碼的過程就會會出問題,因此我們 將其改為 32 位元的整數來表示及作運算,如此詞 符集中各詞彙的出現次數總和之數值才可被正確 表示與處理。 為了求得一個符號的整數值累積區間,及所 有符號的總和區間範圍,在 Nelson 的程式中[18], 直接以線性累加的方式來求,也以線性更新的方式 來更新所有符號的累積次數,因為其字符集大小只 有 256,所以最多每次只要作 256 次的累加及更新 處理。但是若處理的是大字符集,用線性累加的方 式會非常耗費時間。因此,在論文[8]中提到的針 對大字符集求符號的累積次數及更新符號累積次 數的方法,是以 Fenwick 在 1994 年提出之資料結 構來實作[19],此外教科書[21]裡也介紹了一種作 法,它們對每個符號所花的時間為 Θ(log N),N 為 字符集的大小。因此本文採取以“ 支援累積之二元 搜尋樹” 來求各符號的整數值累積區間。 支援累積之二元搜尋樹: 二元搜尋樹的好處就是 能夠快速的在樹中找出某個符號,而支援累積之二 元搜尋樹(accumulation-supported binary search tree) 不但能快速的找出樹中某個符號,並能在找到該符 號的同時算出該符號之累積次數,其方法是在每個 樹節點中加入一個欄位,用來存放該節點之左子樹 所有符號出現次數之總和。 多了這個欄位的資訊,我們便可以快速的求 出某個符號的出現次數累積區間、模型中所有符號 的出現次數總和、及某個累積次數值在模型中所對 應的符號。為了維持此欄位數值的正確性,我們必 須在插入樹節點、刪除節點、及所有節點出現次數 減半時,檢查、更新這個欄位的值。. 2 階詞符集. 雜湊表 x. 0 1 2 3 x. y. 圖 3 高階詞符集之結構 找出 y 節點,便可由此 y 節點得到指向 2 階搜尋樹 的指標,如圖 3 中右邊虛線方框部分。 最近最少使用串列(LRU list): 為了管理各階詞符 集 所 佔 用 的 空 間 , 我 們 使 用 “最 近 最 少 使 用 串 列” (LRU list)資料結構。一開始先將樹節點的空間 以 LRU 串列串在一起,當需要用到樹節點時,便 由 LRU 串列的開頭取空間來使用,而刪除某個樹 節點時,也放回 LRU 串列的開頭部分,而在每次 更新完某個樹節點後,則將該樹節點放到 LRU 串 列的尾端。如此一來,便能統一管理所有二元搜尋 樹的樹節點,且樹節點所佔的空間不需持續增加。 在本研究中,我們用到兩個 LRU 串列:LRU1 及 LRU2。其中 LRU1 將所有 0 階的樹節點全部串 在一起管理,而 LRU2 將所有 1 階、2 階的樹節點 串在一起管理。在此我們設定 LRU1 長度為 87,719 個節點,因為雜湊表的大小初始化為 87,719,當雜 湊表的負載係數超過 0.72 時,我們將那些在串列 前半段的節點刪除,也就是將 0 階詞符集中最近較 不常用的詞彙從表中刪除,而且我們要到高階的詞 符集中檢查是否有這些被刪除的詞彙,有的話也必 須 跟 著 刪 除 。 至 於 LRU2 的 長 度 , 在 此 設 為 1,200,000 個節點,即 1 階、2 階中所有樹節點的個 數總和為 1,200,000,當空間不夠時就刪除 LRU2 串列中較不常用的樹節點,在此我們一次就刪除 600,000 個樹節點。. 3. 機率預測模型 3.1 基於部分匹配之預測模型 基於部分匹配之預測模型(簡稱 PPM)的觀念 是由 Cleary 及 Witten 提出的[11],本文基於他們的 觀念來研究詞符集中的符號出現機率的估計方 法。PPM 模型主要是利用之前若干個符號來預測 目前符號的出現機率,由於有時會出現零頻的情 況,因此我們也必須考慮、解決零頻的問題。 模型的階數: 模型的階數(order)就是往前參考的 符號個數,若某個模型是以前 1 個符號來預測目前 符號,則稱它為 1 階模型,若一個模型不參考之前 符號,只用目前符號在壓縮過的文章裡的出現次數 來估計機率,則稱它為 0 階模型。當模型的階數愈 高時,所需建立的搜尋樹個數就會愈多,例如符號 的個數為 n,則 0 階模型只需要一個搜尋樹,1 階 模型最多需要 n 個搜尋樹,2 階模型最多需要 n2 個搜尋樹,以此類推。PPM 模型實際上是把多個. 2.5 算術編碼 算術編碼主要的優點是觀念上可將每個符號 用分數個 bits 來表示,不像 Huffman 編碼,其每 個符號必須用整數個 bits 來編碼。關於算術編碼詳 細的步驟及實作方法可參考文獻[2, 6, 18]。 支援大字符集之算術編碼: 本文在算術編碼的部 分,是採用 M. Nelson[18]提供之算術編碼程式碼 來作改進。Nelson 將算術編碼以整數區間的表示 方式來實作,也就是將符號的機率以符號的區間下 限、區間上限及所有符號的機率區間表示,這些區 間值都必須是整數。在解碼時只要有所有符號的機 率區間之資訊,便可由編碼後的資料計算出一個 值,只要求出該值是落在哪一個符號的區間,便可 解出原始符號。. 5.

(6) 不同階數的模型結合起來,因此 PPM 模型的的“ 最 大階數” 指的是,最高階模型往前參考的符號個數。 本文在各種字符集情況分別設定的模型最大 階數值如表 6 所示,設定方式是以實驗結果來決 定,對於大部分的文本資料,皆適合使用如表 6 裡的最大階數設定。其中,英文字元若不使用之前 出現的英文字元來作預測,反而會得到較低的壓縮 率;常用符號之間的關聯性較英文高許多,因此我 們設定常用符號字元往前考慮最多 4 個常用符號 字元來預測目前的;種類長度字元並不往前參考種 類長度字元,因為長度與長度之間的關係較小,而 是種類與種類之間的關係較大,因此種類長度字元 只往前參考種類的部分,最多往前參考 3 個種類; 中文第一個字元是參考前 1 個中文第一字元來預 測,因為中文常用字的第一個字元通常都集中在某 幾個字元,因此不同中文字的第一個字元之間關聯 性較大;中文第二個字元與前一個中文的第二個字 元,關聯性非常低,因此我們用同一個中文字的第 一個字元來預測第二個字元。 逃脫符號: 在 0 階字元模型中,程式初始化時便將 所有可能的符號都加入了,並且都設定出現次數為 1,因此各個符號都可以從 0 階字元模型得到一個 機率。但是在高階字元模型中,由於字符集搜尋樹 初始時為一個空樹,只有在遇到符號時才會被加入 搜尋樹,因此對於一個還未被加入高階字元模型搜 尋樹中的符號,便無法求出它的高階模型機率,這 種情形在詞彙模型裡更是經常遇到。當遇到這種情 形時, PPM 模型中的解決方法是,在每個高階模 型 字 符 集 內 加 入 一 個 稱 為 “逃 脫 符 號 ” (escape symbol)之特殊符號,如此當遇到要估計機率的符 號不在搜尋樹中,便換成對“ 逃脫符號”作編碼, 藉以告知解碼端有一符號不存在於搜尋樹中,並且 要降到下一階的模型來處理。 字符集逃脫機率: 逃脫符號的出現機率的訂定,必 須根據詞(或字)符集中所有符號的出現情形隨時 改變,才能盡量減少逃脫符號對壓縮率造成的影 響。當面對的是字符集時,我們參考算術編碼程式 中用來計算逃脫符號機率的方法[18],公式如下: 逃脫符號出現次數  (字符集大小 出現符號個數) 出現次數總和 字符集大小 最大出現次數. 無法用公式(10)來計算,其中最大的不同點,就是 詞彙符號的數量事先並不知道,而一直可能有新的 詞彙會出現,可能的詞彙個數理論上是無限的。在 此我們參考一些論文所使用的方法來計算逃脫機 率。 第一個考慮的方法為 Moffat 提出之 Method C [20],他將之前的方法 Method A 及 Method B 作 改進。此外,他也針對英文之詞彙式 PPM 模型作 實驗,發現 Method C 不管在小字符集或大字符集 中,都能得到比 Method A 及 Method B 還要低的 壓縮率,Method C 的公式如下: 出現符號個數 (11) 逃脫機率  符號出現次數總和 1 第二個考慮的方法為 Witten 及 Bell 提出之 Method X[7]。在他的論文中提到,Method X 幾乎 對大字符集或小字符集皆有不錯的壓縮率。我們參 考他們的公式並遵循建議,以避免分子等於分母及 分子分母皆為 0 的情形,公式如下: 出現一次的符號個數 1 (12) 逃脫機率  符號出現次數總和 2 第三個考慮的方法為 Moffat、Neal、Witten 提出之針對大字符集結構之逃脫機率計算方法 [8],在文獻中稱為 Method AX,即對論文[7]中所 提的 Method X 作一些修改,其公式如下: 逃脫機率  (13) 出現一次符號數 1 符號出現次數總和 出現一次符號數 1 使用這三個公式之一算出逃脫機率後,再依 公式(14)轉換為逃脫次數,公式如下: 逃脫次數  (14) 逃脫機率 符號出現次數總和  1 逃脫機率 兩段式 PPM 模型: PPM 觀念的實作,在此分為兩 個階段:詞彙階段及字元階段。其中詞彙階段負責 計算詞彙機率,而字元階段則計算一個新的詞彙中 各個字元的機率,而整個處理流程如圖 4 所示。 在圖 4 裡,一個被剖析出的詞彙,我們首先以 2 階的詞彙模型來預測機率,如果 2 階模型裡存在 搜尋樹,並且目前要編碼的詞彙在搜尋樹中,則求 出目前詞彙在 2 階詞彙模型中的機率,接著以算術 編碼依此機率作編碼,最後更新階數高於目前階數 的所有高階模型,然後繼續對下一個剖析出來的詞 彙作處理;如果目前要編碼的詞彙不在搜尋樹中, 則求出此詞符集中的逃脫符號的機率,接著以算術 編碼編此機率,並將模型階數下降一階。 當遇到一個新詞彙時,會在 0 階模型的搜尋 樹中找不到,因此階數會降至-1 階,此時我們先 將新詞彙加到 0、1、2 各階的詞符集中,接著切換 成字元階段,將組成新詞彙的所有字元一一編碼。 首先對此新詞彙的種類及長度編碼,以告知解碼端 接下來所要參考的字符集種類及新詞彙中字元的 個數,接下來才編詞彙的所有字元。編每一個字元 的方式則與編每一個詞彙的方式類似,不同的是,. (10). 公式(10)中考慮到 2 個因素:(a)出現的符號個數愈 多,逃脫符號的出現次數就會愈小,若所有符號都 出現過,就會使逃脫次數變成 0。(b)當“ 出現符號 個數” 很小,且(出現次數總和/最大出現次數)的值 也很小時,表示出現的符號個數很少,但某個符號 出現非常多次,此時該符號的出現機率會非常大, 因此逃脫次數要相對減少。若最後算出的逃脫次數 是介於 0 到 1 之間的小數,則必須將逃脫次數設為 1。只要模型中有符號尚未出現過,就一定要保留 一些出現次數給逃脫符號,否則無法處理符號不在 搜尋樹中的情況。 詞符集逃脫機率: 詞符集與字符集的特性不同,. 6.

(7) 我們在 0 階字符集已加入所有的字元,因此不會有 降到-1 階的情形,所有符號至少都會在 0 階得到 剖 析 步 驟. 詞符集. 由階數找 出搜尋樹. 階數 初始 為2. 搜尋樹 否 為空?. 詞在搜 是 尋樹中?. 是. 否. 否 階數< 0?. 其機率值。當所有字元都編完時,便回到剖析的步 驟去剖析出下一個詞彙來編碼。. 階數減 1. 取得 詞彙 機率. 取得逃脫 符號機率. 是. 算 術 編 碼 步 驟. 更新詞符集 字符集 1.編種類 長度字元. 由字元種 類及階數 找出搜尋 樹. 2.編詞彙 所有字元. 搜尋樹 否 為空? 是. 否. 階數減 1 否. 取得 字元 機率. 字元在 是 搜尋樹中. 取得逃脫 符號機率. 所有字元編完 更新字符集. 是. 圖 4 兩段式 PPM 模型的主要處理流程. 3.2 混合式模型. 符號 s1 s2 s4 s6 s7. 混合式模型與 PPM 模型之間的差異是,混合 式模型把數個不同階數的模型,以不同權重混合在 一起,用混合後的模型計算目前符號的機率,並且 編碼完後會同時更新各階的模型。我們僅在詞彙階 段套用混合式模型,其資料結構大致相同,同樣有 0、1、2 階模型的詞符集搜尋樹。不過,在字元階 段的編碼,則和前一子節(3.1 節)介紹的完全相 同,混合式模型的處理流程如圖 5 所示。 我們將三個模型依權重混合後,必須確保混 合後之模型中每個符號所得到的累積次數區間皆 各自獨立,不會互相重疊,解碼時才不會發生解碼 錯誤的情形。使用混合式模型的相關研究在論文 [10, 21]中皆有提到。 模型範例: 在此我們舉一個混合式模型的範例,來 介紹混合的作法及驗證各符號的累積出現次數區 間不會重疊。為了說明之方便,在此只舉兩個模型 作混合的例子,並將兩個模型之權重都設為 1,關 於三個模型及不同權重之混合方式,則可由此例子 引伸出去。 假設兩個模型中各符號之出現次數如表 8 所 示,模型一中有 5 個符號,模型二中有 4 個符號, 有些符號只出現在其中一個模型,有些則兩個模型 都出現過。兩個模型之混合就是將兩個模型分別求 出之累積區間加在一起, 表 8 兩模型內各符號之出現次數 模型一. 出現次數 3 4 3 5 2. 符號 s3 s4 s5 s6. 出現次數 2 1 3 6. 混合的計算過程如表 9 所示,首先分別得到各個模 型中的符號的累積次數區間,若符號不在模型中, 其累積次數區間必須參考前一個符號的區間右邊 界值。例如表 9 中模型一中的符號 s3,其出現次數 為 0,由於 s2 的累積區間右邊界值為 7,因此 s3 之累積區間為 7 ~ 7,這樣便能保證混合模型中每 個符號的累積出次數皆不會重疊,如表 9 的第三欄 所示。 表 9 混合式模型之累積出現次數計算 模型一 符 累積出 號 現次數 s1 0 ~ 3 s2 3 ~ 7 s3 7 ~ 7 s4 7 ~ 10 s5 10 ~ 10 s6 10 ~ 15 s7 15 ~ 17. 模型二 符 累積出 號 現次數 s1 0 ~ 0 s2 0 ~ 0 s3 0 ~ 2 s4 2 ~ 3 s5 3 ~ 6 s6 6 ~ 12 s7 12 ~ 12. 混合模型 符 累積出 號 現次數 s1 0 ~ 3 s2 3 ~ 7 s3 7 ~ 9 s4 9 ~ 13 s5 13 ~ 16 s6 16 ~ 27 s7 27 ~ 29. 特性證明: 我們欲證明混合模型中的所有符號之 累積出現次數區間皆不重疊,假設在模型一中,第 i 個符號 si 的累積出現次數為 xlowi ~ xhighi,在模. 模型二. 7.

(8) 剖 析 步 驟. 詞符集 計算各階詞 符集所分配 到的權重. 將 0 階、1 階、 2 階三個模型 以算出的權 重混合成一 個模型. 詞在模 是 型中?. 取得 詞彙 機率. 否 取得逃脫 符號機率. 算 術 編 碼 步 驟. 更新詞符集 字符集 1.編種類 長度字元. 由字元種 類及階數 找出搜尋 樹. 2.編詞彙 所有字元. 搜尋樹 否 為空? 是 階數減 1. 否. 字元在 是 搜尋樹中. 取得 字元 機率. 否 取得逃脫 字元機率. 所有字元編完 更新字符集. 是. 圖 5 混合式模型的主要處理流程 型二中,si 的累積出現次數為 ylowi ~ yhighi。在混 合模型中,令 si 的累積出現次數為 zlowi ~ zhighi, 其中 zlowi = xlowi + ylowi,zhighi = xhighi + yhighi。 因為模型一中所有的符號的累積出現次數區 間皆不重疊,因此對所有模型一中的符號 si,皆滿 足(xlowi ≥xhighi-1)且(xhighi ≤xlowi+1)條件。模型二 中所有符號的累積出現次數區間也不重疊,則對所 有模型二中的符號 si ,滿足(ylowi ≥ yhighi-1)且 (yhighi ≤ylowi+1)之條件。 由以上兩個條件相加得到(xlowi + ylowi ≥ xhighi-1 + yhighi-1)且(xhighi + yhighi ≤ xlowi+1 + ylowi+1),即(zlowi ≥zhighi-1)且(zhighi ≤zlowi+1)。由 此可知混合模型中所有符號的累積出現次數區間 皆不重疊。 權重計算: 由於各個模型的重要性不同,因此要賦 予各個模型不同的權重值。作混合時,可先將各個 模型之符號出現次數乘上各自的權重,再將累積出 現次數區間相加。如此,混合後模型的機率分佈, 將會與權重值最大的原始模型最相似,但也保留了 一些權重低的原始模型中機率分佈之特性。 所謂各個模型的權重,是假設各個模型的所 有符號的出現次數總和皆相同的情形下設定的。因 此在確定模型間的權重關係時,必須同時考慮到各 個模型中的所有符號的總和出現次數。在本文中, 我們將 2、1、0 階三個詞彙模型作混合,假設三個 模型中各自的符號出現次數總和依序為 total2 、 total1、total0,而依據模型的重要性所算出各模型 的權重值假設為 w2、w1、w0,接著我們以 0 階模 型作為基準,令其權重值為 1,則改變後的模型權 重值依序為 w2' = w2 / w0,w1' = w1 / w0,w0' = 1,. 再考慮各模型內的符號總和出現次數的因素之 後,最後得到各階模型實際的權重公式如下: total 0 w2 total 0 weight 2 w   2 total 2 w0 total 2 (14) total 0 w1 total 0 weight1 w1    total1 w0 total1 weight 0 1 經由實驗測試,我們發現若(w2'+w1')之值太 大,對壓縮率反而會造成不好的影響,因此我們對 此值作限制,當(w2'+ w1') > 最大值 max_w 時,令 w2" = max_w × w2' / (w2' + w1'),而 w1" = max_w × w1' / (w2' + w1'),設定此最大值的另一個原因是, 用以預防混合後模型所算出的符號總和出現次數 會超過算術編碼所能接受的範圍,因為混合後模型 之符號總和出現次數,(1 + w2' + w1') × total0,可 保證小於(1 + max_w) × total0。此外每次在更新完 0 階之模型後,可據以檢查(1 + max_w) × total0 是 否超過算術編碼之範圍,若超過,則對零階模型裡 的符號,作出現次數減半之處理。 關於 w2、w1、w0 權重值的設定,我們參考論 文[10, 21]裡使用之計算方法,該方法是依據逃脫 機率來計算各階模型的權重,假設第 i 階模型之逃 脫機率為 esci,則權重計算公式如下: w2 1 esc2 (15) w1 esc2 (1 esc1 ) w0 esc2 esc1 (1 esc0 ) 將式(15)代入式(14)後,得到如下之權重計算公式: 1 esc2 total0 weight 2   esc2 esc1 ( 1 esc0 ) total2. 8.

(9) total 0 esc2 ( 1 esc1 ) weight1   esc2 esc1 ( 1 esc0 ) total1. (16). 實驗裡各字符集的最大階數設定如表 6 所 示,另外 0 階詞符集大小為 87,719,1、2 階詞符 集裡可用的樹節點總和為 1,200,000,雜湊表的最 大負載係數設為 0.72。 模型最大階數實驗: 詞符集的階數愈大,代表往前 參考的詞彙愈多,對詞彙的預測愈準確。經由此實 驗中,我們可知道模型的最大階數對壓縮率所造成 的影響,實驗裡我們將模型的最大階數由 0 至 2 增加,所有的逃脫機率計算方法統一使用 Method C,即公式(11),實驗結果如表 12 所示。 表 12 模型最大階數對壓縮率的影響. weight 0 1 接著考慮一個情況,如果剖析出的詞彙是混 合後模型裡不存在的一個新的符號,此時要對逃脫 符號編號,以告知解碼端目前的符號不存在於模型 中,混合後模型的逃脫符號的機率估計值是 esc2 × esc1 × esc0,其對應的出現次數公式為: esc 2 esc1 esc0 (17) 逃脫次數  total 0 esc 2 esc1 (1 esc0 ) 由式(16)、式(17)可知,若使用的逃脫機率估 計方法不同,得到的權重值及逃脫符號的出現次數 也會不同。. 檔案 原始大小 0階 632,685 320,572 達文西 1,679,292 851,772 絕代雙嬌 2,018,872 1,085,100 笑傲江湖 3,198,900 1,751,761 雜誌 3,994,835 2,089,575 現代小說 4,557,249 2,590,775 古典小說 6,163,300 3,263,283 新聞 11,952,838 中文總計 22,245,135. 4. 測試實驗與結果 本文已將先前提到的各種資料結構、預測模 型實作成為程式,然後進行各項實驗。我們選擇用 來作測試的文本資料分別為 7 個中文檔案、5 個英 文檔案,每個檔案的內容及檔案大小如表 10、表 11 所示。 表 10 中文測試檔內容說明 檔案名稱 檔案大小 (bytes) 632,685 達文西 1,679,292 絕代雙嬌 2,018,872 笑傲江湖 3,198,900 雜誌 3,994,835 現代小說 古典小說 新聞. 1,039,390 Women 1,969,393 Anne 2,865,136 Ring 4,477,959 Bible 5,589,522 Harry 英文總計 15,941,400. 內容. 翻譯小說-達文西密碼 古龍武俠小說 金庸武俠小說 華夏文摘 2003 年雜誌內容 哈利波特三集、瓊瑤三篇小 說、射雕英雄傳 4,557,249 紅樓夢、三國演義、水滸傳 6,163,300 中央社新聞,1995 年 9 至 11 月. Ring Bible Harry. 2階. 232,393. 225,243. 601,766. 562,951. 810,809. 761,033. 1,321,057. 1,254,143. 1,557,076. 1,475,107. 2,005,401. 1,897,730. 2,012,526. 1,698,309. (53.7%) 349,821. 8,541,028 (38.4%) 295,428. 7,874,516 (35.4%) 279,334. 658,566. 545,810. 501,070. 922,357. 750,779. 681,617. 1,393,798. 1,072,297. 870,833. 1,793,672 5,118,214 (32.1%). 1,461,119 4,125,433 (25.9%). 1,306,207 3,639,061 (22.8%). 由表 12 之實驗結果可知,若使用較高階的模 型來預測機率,可得到較低的壓縮率,不過隨著階 數增加,其改善程度會減少。由 0 階增加至 1 階時, 中文檔案壓縮率降低了 15.3%,英文檔案則降低了 6.2%;而由 1 階增加至 2 階時,中文檔案壓縮率 降低了 3.0%,英文檔案降低 3.1%。因此我們將模 型最大階數設定為 2 階。 逃脫機率估計方法實驗: 字符集的逃脫符號機率 估計方法如公式(10)所示,而詞符集的逃脫機率, 我們實驗三種估計方法,分別為公式(11)、(12) 與 (13),在此分別稱為 method C、method X、method AX。這三種逃脫機率估計方法,分別得到的壓縮 率如表 13 所示。 表 13 逃脫機率估計方法對壓縮率的影響. 表 11 英文測試檔內容 檔案 名稱 Women Anne. 1階. 檔案大小 內容 (bytes) 1,039,390 Little Women 1,969,393 Anne of Avonlea, Anne of Green Gables, 及 Anne of the Island 2,865,136 The Lord of the Rings, 四集 4,477,959 聖經 5,589,522 Harry Potter, 四集. 檔案 原始大小 Method C Method X Method AX 632,685 225,243 227,291 達文西 223,938 562,951 564,362 絕代雙嬌 1,679,292 559,559 761,033 764,872 笑傲江湖 2,018,872 756,662 3,198,900 1,254,143 1,247,224 1,264,507 雜誌 現代小說 3,994,835 1,475,107 1,470,709 1,486,367 古典小說 4,557,249 1,897,730 1,898,511 1,922,270 6,163,300 1,698,309 1,688,695 1,701,629 新聞 22,245,135 7,874,516 7,845,298 7,931,298 中文總計. 實驗時所使用的測試平台為 P4 1.3G 的個人 電腦,關於壓縮效果的好壞,我們使用公式(1)的 壓縮率計算方式來評估。當本文實作的程式執行 時,最大使用之記憶體量為 71.8 Mbytes,其中(a) 初始的 6 個 0 階字符集與一個 0 階詞符集所用的樹 節點共有 87,719 個,佔 4.4 Mbytes;(b) 1 階、2 階詞符集搜尋樹共有 1,200,000 個樹節點被初始 化,佔 55.2 Mbytes;(c)壓縮時產生的高階字符集 及高階詞符集等,佔 12.3 Mbytes。. Women Anne. 4.1 基於部分匹配模型之實驗. 9. 1,039,390. (35.40%) 279,334. (35.27%) 278,237. (35.65%) 278,370. 1,969,393. 501,070. 499,258. 499,406.

(10) 2,865,136 681,617 Ring 4,477,959 870,833 Bible 5,589,522 1,306,207 Harry 英文總計 15,941,400 3,639,061. (22.83%). 678,655. 678,751. 表 15 最大總和權重對壓縮率的影響. 869,747. 869,860. 1,302,091. 1,302,309. 3,627,988 (22.75%). 3,628,696 (22.76%). 檔案 原始大小 16 32 64 632,685 220,878 220,823 220,803 達文西 1,679,292 551,568 551,648 絕代雙嬌 551,520 2,018,872 744,136 744,247 笑傲江湖 743,990 3,198,900 1,225,016 1,224,959 1,224,878 雜誌 3,994,835 1,453,274 1,454,689 1,455,344 現代小說 4,557,249 1,871,247 1,873,546 1,874,644 古典小說 6,163,300 1,689,706 1,687,934 1,687,644 新聞 7,755,631 7,757,655 7,758,930 中文總計 22,245,135. 由表 13 可以看出,除了“ 古典小說” 以外,所 有的測試檔,利用 method X 方法來估計詞符集之 逃脫符號的機率,都可以得到最低的壓縮率。對於 中文檔案來說,method X 的壓縮率比 method C 好 0.13%;對英文檔案來說,method X 僅比 method AX 好 0.01%。. (34.86%). 1,039,390 277,091 Women 1,969,393 499,772 Anne 2,865,136 681,419 Ring 4,477,959 881,720 Bible 5,589,522 1,309,273 Harry 3,649,275 英文總計 15,941,400. 4.2 混合式模型之實驗 權重決定方法實驗: 我們設定各階模型的權重的 計算公式如公式(16)所示,而混合後的模型之逃脫 符號出現次數計算如公式(17)所示,並利用三種逃 脫機率估計的公式,即公式(11)、(12)、與(13),來 求各階模型混合時的權重,在此我們分別稱為 method C 權重、method X 權重、method AX 權重。 另外在公式(14)中提到 1 階與 2 階的權重總和的最 大值,目前先將它設為 512,如此得到的實驗結果 如表 14 所示。 表 14 模型權重計算方法對壓縮率的影響. (22.89%). (34.88%) 277,180. (35.42%) 279,907. (36.13%) 283,574. 499,745. 504,647. 510,356. 680,763. 687,074. 694,039. 876,786. 887,165. 891,255. 1,307,935 3,642,409 (22.85%). 1,319,825 3,678,618 (23.08%). 1,332,339 3,711,563 (23.28%). (34.88%) 276,902. 499,203 680,244. 680,092. 499,211. 878,372. 877,127. 1,307,066. 1,306,789. 3,641,761 (22.84%). 3,640,121 (22.83%). 由表 15 可以知道,對大部分的測試檔來說, 當把權重和的最大值設定為一個較小的值,並不會 使壓縮率上升太多,而且權重和最大值愈小,0 階 模型所能接受的出現次數總和值就可以愈大。對中 文檔案來說,在權重和值最大為 16 或更小時,能 得到較好的壓縮率,但效果並不顯著;對英文檔案 來說,設權重和最大值為 64 時,壓縮率較好,因 此我們設定權重和最大值為 32,如此對中、英文 檔案皆能得到不錯的效果,且 0 階詞符集所能接受 的出現次數總和最大值為 1,073,741,823 / 32,即 33,554,431,足夠用以處理大字符集的情形。. 檔案 原始大小 Method C Method X Method AX 632,685 223,332 229,136 達文西 220,734 1,679,292 560,365 570,435 絕代雙嬌 551,781 2,018,872 755,327 771,829 笑傲江湖 744,280 3,198,900 1,224,731 1,240,359 1,272,701 雜誌 3,994,835 1,455,538 1,479,446 1,509,807 現代小說 4,557,249 1,874,956 1,905,530 1,946,705 古典小說 6,163,300 1,687,087 1,715,170 1,737,650 新聞 7,759,107 7,879,529 8,038,263 中文總計 22,245,135 1,039,390 Women 1,969,393 Anne 2,865,136 Ring 4,477,959 Bible 5,589,522 Harry 英文總計 15,941,400. (34.87%) 276,876. 4.3 不同詞典之實驗 中文檔案實驗: 在 2.1 節中,我們提到剖析中文詞 彙時,一次可將兩個中文字剖析為一個 token,而 將中文二字詞加入 0 階詞符集中的方法可分為動 態判斷及靜態詞典兩種。我們使用此兩種方法來將 中文二字詞加到詞符集中,使用混合式模型來作壓 縮率實驗,實驗結果如表 16 所示。 表 16 詞符集加入中文二字詞之方式 檔案 未處理 動態判斷 靜態詞典 動態+靜態 221,650 225,210 226,035 達文西 220,823 552,139 555,324 556,303 絕代雙嬌 551,568 745,613 749,088 750,517 笑傲江湖 744,136 1,224,959 1,223,279 1,222,297 1,223,062 雜誌 現代小說 1,454,689 1,454,691 1,458,434 1,460,258 古典小說 1,873,546 1,874,830 1,878,154 1,879,768 1,687,934 1,677,023 1,663,975 1,660,851 新聞 7,757,655 7,749,225 7,752,482 7,756,794 中文總計. 由實驗結果可看出,對所有的測試檔,使用 method C 計算出的權重可以得到最好的壓縮率, 對中文檔案來說,method C 比 method X 好 0.54%; 對英文檔案來說,method C 比 method X 好 0.23%。 因此我們採用 method C 來計算混合式模型中各階 模型的權重。 高階模型權重最大值實驗: 之前曾經提到,我們必 須對公式(14)中第 1、2 階模型的權重總和作限制, 以預防混合後模型的符號出現次數總和會超過算 術編碼所能接受的範圍。在此我們以 method C 來 計算權重,探討減少此值對壓縮率之影響,實驗結 果如表 15 所示。. (34.87%). (34.84%). (34.85%). (34.87%). 由表 16 中壓縮率數值顯示,中文文章中,只 有“ 雜誌” 及“ 新聞” 兩個檔案在加入中文二字詞後 壓縮率有改善,但改善不大,其他的檔案則是不加 入中文二字詞於詞符集中壓縮率較好。 英文檔案實驗: 對於英文檔案的壓縮,我們在程式. 10.

(11) 初始化時,將靜態詞典的 20,297 個常用的英文詞 彙加入 0 階的詞符集中,並且將它們的出現次數設 為 1。在此分別探討其對部分匹配預測模型、混合 式模型的影響,實驗結果如表 17、18 所示。 表 17 PPM 模型加入靜態英文詞彙之壓縮率 檔案 Women Anne Ring Bible Harry 英文總計. 原始大小. 未處理. Women Anne Ring Bible Harry 英文總計. 靜態式詞典. 1,039,390. 278,237. 275,333. 1,969,393. 499,258. 495,122. 2,865,136. 678,655. 676,667. 4,477,959. 869,747. 870,682. 5,589,522. 1,302,091. 1,296,888. 3,627,988 (22.75%). 3,614,692 (22.67%). 15,941,400. 2,768,991 新聞 中文總計 11,543,417. 1,814,804. 1,687,934. (51.89%). 8,976,958 (40.35%). 8,006,967 (35.99%). 7,757,655 (34.87%). 403,661. 291,641. 267,491. 276,876. 757,285. 547,121. 496,839. 499,203. 1,042,596. 752,453. 692,930. 680,244. 1,324,867. 929,562. 891,492. 878,372. 2,037,549. 1,445,463. 1,338,536. 1,307,066. 5,565,958 (34.92%). 3,966,240 (24.88%). 3,687,288 (23.13%). 3,641,761 (22.84%). 實驗結果顯示,我們的壓縮程式在中文檔案 方面,壓縮率都比其他的壓縮程式好,詳細數值 是,我們的程式比 PPMd 好 1.12%,比 bzip2 程式 好 5.48%,比 GZIP 程式好 17.02%。在英文檔案方 面,本文程式所得到的壓縮率,比 GZIP 及 bzip2 都還小,但是與 PPMd 比較時,在英文檔案較小 時,壓縮率會比 PPMd 差,當檔案較大時可得到比 PPMd 低的壓縮率,整體來說,本文的壓縮程式, 比 PPMd 好 0.29%,比 bzip2 好 2.04%,比 GZIP 好 12.08%。 在速度方面,各個壓縮程式的壓縮、解壓縮 速度之量測值,如表 20 所示。量測的方式是,將 所有中文測試檔合併為一個大的檔案,英文測試檔 也是先作合併,然後以這兩個較大的檔案來作速度 測試之實驗。 表 20 各壓縮程式的壓縮、解壓縮速度(Kbytes/s). 表 18 混合模型加入靜態英文詞彙之壓縮率 檔案 原始大小 未處理 靜態詞典 1,039,390 276,876 Women 268,950 1,969,393 499,203 Anne 488,472 2,865,136 680,244 Ring 670,499 4,477,959 878,372 Bible 869,413 5,589,522 1,307,066 Harry 1,292,107 3,641,761 3,589,441 英文總計 15,941,400 (22.84%). 2,037,684. (22.52%). 由表 17、18 之實驗結果可知,在 0 階詞符集 中加入靜態英文詞彙,對於兩種預測模型都能減少 壓縮率。未加入靜態英文詞時,部分匹配預測模型 的壓縮率比混合式模型好 0.09%,但加入靜態英文 詞後,混合式模型反而比部分匹配預測模型的壓縮 率好 0.15%;由此可知,0 階詞符集中詞彙個數較 多時,使用混合式模型能得到較好的壓縮率。. 檔案 中文 壓縮 解壓縮 英文 壓縮 解壓縮. 4.4 不同壓縮程式之比較 由之前的實驗結果得知,本文研究的所有方 法中,使用混合式模型,對中文及英文檔案皆能得 到不錯的壓縮率。因此我們拿混合式模型所實作之 程式來和他人的壓縮程式作比較,這裡所謂的他人 程式包括 GZIP[22]、bzip2[23]、及 PPMd[12]等壓 縮程式,其中 GZIP 是應用 LZ77 的技術所作的壓 縮 程 式 ; bzip2 是 基 於 Burrows-Wheeler Transform(BWT)技術所作的壓縮程式;而 PPMd [12]對原始的 PPM 演算法作改進,其壓縮率比原 來的 PPM 好,我們取其最新版本的程式來作測 試。PPMd 程式的剖析處理,是直接以 byte 為 token,且其預設的最大階數為 4 階。本文的混合 式模型壓縮程式與其它三個壓縮程式的壓縮率實 驗數值,如表 19 所示。 表 19 不同壓縮程式之壓縮率. GZIP 2397 4370 2478 5189. bzip2 1810 4344 1893 4864. PPMd 1782 1642 5654 4814. 混合模型 170.26 132.37 297.28 217.56. 由表 20 可以看出,我們的程式比別的壓縮程 式慢,主要的原因是我們的程式在建構、維持高階 模型時花了較多時間,並且我們的程式並未作程式 效率的最佳化調整。. 5. 結論 本論文研究了基於大字符集之詞彙式文本資 料壓縮方法,此方法將中、英文資料以詞彙為單位 剖析出 token,並在模式步驟中,以高階的詞符集 及高階的字符集估算各個 token 的出現機率,接著 在編碼步驟將求出的機率以算術編碼轉換為二進 位碼,然後輸出到檔案中。我們已將上述流程製作 成可實際壓縮、解壓縮的程式,並對此程式作壓縮 率的實驗,實驗結果顯示,本論文實作的壓縮程 式,對中、英文測試檔壓縮所得到的壓縮率,比同 樣使用預測式編碼的壓縮程式 PPMd、及以 BWT 為基礎的 bzip2 程式、及以 LZ77 為基礎的 GZIP 程式都還好。對中文檔案來說,我們的程式得到的 壓縮率,比 PPMd 程式好 1.12%,比 bzip2 程式好 5.48%,比 GZIP 程式好 17.02%。對英文檔案來說,. 檔案 GZIP Bzip2 PPMd 混合式模型 318,647 246,612 227,622 達文西 220,823 810,977 631,636 554,127 絕代雙嬌 551,568 875,294 755,819 笑傲江湖 1,107,023 744,136 1,861,904 1,449,100 1,302,453 雜誌 1,224,959 現代小說 2,099,860 1,650,032 1,458,279 1,454,689 古典小說 2,576,015 2,086,600 1,893,863 1,873,546. 11.

(12) 我們的程式比 PPMd 好 0.29%,比 bzip2 程式好 2.04%,比 GZIP 好 12.08%。因此本論文研究之壓 縮方法,對中文或英文文章,皆能得到不錯的壓縮 效果。 在剖析方面,和前人的研究不同的地方是, 我們同時考慮了三種詞彙(中文、英文、符號)的剖 析,且每種詞彙的長度皆不等長,因此剖析出的詞 符集特別龐大。在中文詞彙方面,我們嘗試剖析出 中文一字詞及中文二字詞,若加入中文二字詞的剖 析,對某些中文檔案有利,但其改進不大。而在英 文詞彙方面,我們嘗試剖析長度不超過 20 的英文 詞彙之方式。在模式(modeling)方面,本論文嘗試 以部分匹配之預測模型及混合式模型兩種作法來 估算詞彙的機率。和前人研究的不同點是,本論文 實作較龐大、高階的模型結構,主要是想研究此作 法對壓縮率及壓縮時間的影響。實驗結果顯示,以 混合式模型來預測詞彙機率,對中、英文檔案都能 得到不錯的壓縮率。 為了能夠支援大字符集情況的壓縮處理,在 詞符集及字符集部分,我們以支援累積之二元搜尋 樹的資料結構來建構,並儲存各詞彙、字元之出現 次數。在編碼方面,本論文採用算術編碼,但由於 本論文是使用大字符集之預測模型,因此我們必須 對算術編碼程式作一些修改,以支援大字符集符號 之編碼處理。 未來可改進的方向,在剖析方面,可以考慮 更多種語言的特性,這樣對其他語言的文本資料, 應能像本論文對中、英文文本資料之壓縮一樣,得 到比一般壓縮程式還要好的壓縮率。而在支援累積 之二元搜尋樹的資料結構方面,如果可以在二元樹 中作加入、刪除資料時,隨時維持所有二元樹為平 衡樹,如此在壓縮、解壓縮的速度方面,應能有更 好的效率。另外在混合式模型之實作中,也可以研 究是否有更合適的權重計算方法及逃脫機率計算 方法。. [8] [9] [10]. [11]. [12]. [13]. [14]. [15]. [16] [17]. [18] [19] [20]. 參考文獻 [1] [2] [3] [4] [5] [6] [7]. Huffman, D. A., “ AMethod for the Construction of Minimum Redundan-cy Code s ” , Proc. Inst. Electr. Radio Eng., 40( 9), pp. 1098-1101 (1952). Rissanen, J. J., “ Ge ne r a l i z e dKr a f tI ne qua l i t ya nd Ar i t hme t i c Codi ng ” , IBM J. Res. Dev., 20, pp. 198-203 (1976). Ziv, J. and A. Lempel, “ Auni v e r s a lAlg- orithm for Sequential Data Com- pr e s s i on” , IEEE trans., Information Theory, 23(3), pp. 337- 343 (1977). Ziv, J. and A. Lempel, “ Compr e s s i onofi nd i v i dua l sequences via variable-r a t ec odi ng ” , IEEE trans., Information Theory, 24(5), pp. 530-536 (1978). Welch, T. A.,“ At e c hni quef orhi g h- performance da t ac ompr e s s i on” ,I EEEComput e r ,17(6), pp. 8-19 (1984). Sayood, K., Introduction to Data Compression, 2’ nd ed., Morgan Kauf- mann (2000). Witten, I. H. and T. C. Bell, “ Thez e r o- frequency problem: estimating the probabilities of novel events. [21] [22] [23]. 12. i na da pt i v et e x tc ompr e s s i on” , IEEE trans. Information Theory, 37(4), pp. 1085-1094 (1991). Moffat, A., R. Neal, and I. H. Wi t t e n,”Arithmetic Coding Revisited” , Proc. of Data Compression Conference, DCC'95, pp. 202-211 (1995). Vines, P. and J. Zobel, “ Compression Techniques for Chinese Text” , Software Practice and Experience, 28(12), pp. 1299-1314 (1998). Gu, H. Y., “ A Large-Alphabet-Oriented Scheme for Chinese and English Text Compression” , Software: Practice and Experience, 35(11), pp. 1027-1039 (2005). Cleary, J. G. and I. H.Wi t t e n,“ Da t aCom- pression using Adaptive Coding and Pa r t i a lSt r i ngMa t c hi ng ” , IEEE Trans. Communication, 32(4), pp. 396-402 (1984). Shkarin, D., “ PPM: One Step To Practicality” , Proc. of Data Compression Conference (UT), pp. 202- 211 (2002). Available at: http://compression.graph icon.ru/ds/. Horspool, R. N. and G. V. Cormack, “ Cons t r uc t i ng Word-Based Text Comp- ression Al g or i t hms ” , Proc. of Data Compression Conference, DCC'92, pp. 62-71 (1992). Cheng, K.-S., G. H. Young, and K.-F. Wong, "A Study on Word-Based and Integral-Bit Chinese Text Compression Algorithms", Journal of the American Society for Information Science, 50(3), pp. 218-228 (1999). 劉景民,基於大字符集柏洛菲勒轉換之中文文本 資料壓縮方法,碩士論文,台灣科技大學電機工 程研究所,2004。 Microsoft Windows Codepage 950, http://www. microsoft.com/globaldev/reference/dbcs/950.mspx. Visual C# Developer Center, “ An Ex t e ns i v e Examination of Data Stru- ctures Part 2: The Queue, Stack, and Hashtable ” , http://msdn.microsoft.com/ vcsharp/default.aspx?pull=/library/en-us/ dv_vste chart/html/ datastructures_guide2. asp. Nelson, M., “ Arithmetic Coding + Statistical Modeling = Data Compress- ion” , http://www. dogma.net/markn/ articles/arith/part1.htm. Fenwick, P. M., “ A New Data Structure for Cumulative Probability Tables” , Software: Practice and Experience, 24, pp. 327-336 (1994) Moffat, A., “ Implementing the PPM Data Compression Scheme” , IEEE trans. Communications, 38, pp. 1917-1921 (1990) Belll, T.C., J. G. Cleary, and I. H. Witten, Text Compression, Prentice Hall Inc., Englewood Cliffs, New Jersey (1990) GZIP source code, ftp://prep.ai.mit.edu/pub /gnu/gzip/ Bzip2 home page, http://www.bzip.org.

(13)

參考文獻

相關文件

Chebyshev 多項式由 Chebyshev 於 1854 年提出, 它在數值分析上有重要的地位 [11], 本文的目的是介紹 Chebyshev 多項式及線性二階遞迴序列之行列式。 在第二節中, 我們先介

2.核對該場地懸掛之評鑑合格崗位 數證明文件,如發現場地、崗位 數或崗位配置不符時,應立即反

符合前條所定雇主應於每年中央主管機關公告期間內,檢附下列文件、資

自從 Engle(1982)提出 ARCH 模型以來,已經超過 20 年,實證上也有相當多的文獻 探討關於 ARCH 族模型的應用,Chou(2002)將 GARCH

實物 圖像 文字 數學符號..

 把有着相同符號的圖畫書編 成小單元,歸類施教,引導 學生認識符號的共通點,辨 別其中的細微差異,建構文 學鑑賞能力.

指導語 8:請將以下國語點字標點符號讀出來? (5 個題目). 指導語 9:請將以下英文字母讀出來?

將繩子折成相等的四小段,已知每一小段都是 x 公分,. 已知繩子的全長為