Ryhmä 5: PPM-pakkaaja

Perusidea

Pakkausalgoritmi perustuu Prediction by Partial Matching -menetelmään ja aritmeettiseen koodaukseen. Perusideana on ennustaa seuraavaa merkkiä edellisten merkkien perusteella. Ennustuksen tuottama todennäköisyysjakauma välitetään aritmeettisella koodaajalle, joka suorittaa pakkauksen koodaamalla merkin saamansa jakauman perusteella.

Todennäköisyyksien ennustaminen perustuu pakkattavaa merkkiä edeltävien kirjainten muodostamiin konteksteihin. Jokaisesta löydetystä kirjainyhdistelmästä (kontekstista) ja niitä seuranneista merkeistä pidetään kirjaa ja osumien lukumäärät vastaavat kunkin merkin todennäköisyyttä esiintyä kyseisen kontekstin jälkeen. Mikäli kirjainta ei ole aikaisemmin tavattu kyseisen kontekstin yhteydessä, koodataan erillinen ESCAPE-merkki purkajaa varten ja yritetään yhtä merkkiä lyhyemmällä kontekstilla. Jos millään kontekstilla ei löydy aikaisempaa osumaa, käytetään tasaista jakaumaa.

Pakatun tiedoston purku etenee pakkaamisen tapaan. Jokaisesta löydetystä kontekstista ja sitä seuranneesta merkistä pidetään kirjaa purkamisen edetessä, jotta aritmeettinen koodaus voidaan purkaa käyttämällä täsmälleen samoja jakaumia kuin pakattaessakin.

Algoritmi oppii kaiken tarvitsemansa pakkauksen/purkamisen edetessä, joten pakkaajan ei tarvitse tallentaa pakattuun tiedostoon lainkaan statistiikkaa pakatusta tiedostosta tai mitään muutakaan informaatiota purkamista varten.

Empiirisesti löydettyjä toteutuskohtaisia heuristiikkoja

Osumien laskenta

Osumien laskennassa hyödynnetään kokeellisesti löydettyä heuristiikkaa. Kun uusi konteksti löytyy, merkitään sitä seuranneelle merkille kaksi osumaa. Samoin toimitaan, jos kontekstia seuraava merkki on jo aiemmin esiintynyt saman kontekstin yhteydessä. Sen sijaan, mikäli törmätään uuteen merkkiin aiemmin löydetyn kontekstin yhteydessä, kirjataankin kyseiselle merkille vain yksi osuma, minkä lisäksi ESCAPE-merkille kirjataan yksi osuma, jotta ESCAPE-merkinkin todennäköisyyttä saadaan arvioitua. Menetelmä pakkaa paremmin, kuin yhden osuman merkitseminen kaikissa tapauksissa. Tämä johtunee siitä, että ESCAPE-merkin todennäköisyys ei kasva liian isoksi, eivätkä harvoin (=kerran) esiintyvät merkit saa liian isoa painoa.

Hallittu unohtaminen

Kun kontekstissa tavattujen merkkien (mukaan lukien ESCAPE) frekvenssien yhteissumma ylittää 1000, puolitetaan kaikki kontekstiin liittyvät frekvenssit. Tämä painottaa viimeisiä osumia, mikä tekee algoritmista toisaalta ahneemman paikallisesti ja toisaalta saa sen unohtamaan aiemmin opitut paikalliset häiriöt. Esimerkiksi jossakin artikkelissa moneen kertaan esiintyvä harvinainen nimi voi aiheuttamat vääristymän todennäköisyysjakaumissa, mikä ilman "hallittua unohtamista" huonontaisi pakkaussuhdetta.

Esikäsittely

Pakattava aineisto ei sisällä kaikkia mahdollisia merkkejä (http://cs.fit.edu/~mmahoney/compression/textdata.html). Havaintoa käytetään hyväksi korvaamalla sivun otsikot aineistossa vapailla merkeillä ennen pakkaamista. Jos artikkelista löytyy kyseisen sivun otsikko alkaen isolla kirjaimella, korvataan se merkillä 0xFE. Vastaavasti pienellä alkava otsikko korvataan merkillä 0xFD. Loput vapaana olevista merkeistä käytetään aineistossa usein esiintyvien kahden ja kolmen merkin pituisten merkkijonojen korvaamiseen.

Yrityksiä, jotka eivät tuottaneet tulosta

XML:n osan ja luonnollisen kielen pakkaaminen erikseen

Erillisten kontekstien käyttö pakattavan tiedoston XML-osaan ja luonnollisesta kielestä koostuvaan osaan ei - vastoin odotuksia - parantanut pakkaustulosta.

LOE (Local Order Estimation)

Tämä olisi parantanut pakkaustulosta jonkin verran, mutta sitä ei ehditty saada mukaan lopulliseen versioon. Ideana on käyttää lyhyempää kontekstia, jos ESCAPEn todennäköisyys pidemmällä kontekstilla on erityisen suuri. Tarkempaa tietoa LOE:sta löytyy Charles Bloomin PPMZ pakkausohjelmaa käsittelevästä paperista (http://www.cbloom.com/papers/ppmz.zip).

SEE (Secondary Escape Estimation)

Tätä ei saatu toimimaan järkevällä tavalla. Ilmeisesti tavallinen PPM yliarvioi ESCAPEn todennäköisyyden tietyissä konteksteissa. Jos eri kontekstien yhteiset piirteet osattaisiin tunnistaa, voitaisiin ESCAPEn todennäköisyys arvioida paremmin, koska käytettävissä olisi enemmän tilastotietoa. Tarkempaa tietoa SEE:stä löytyy Charles Bloomin PPMZ pakkausohjelmaa käsittelevästä paperista.

Merkkijonojen hahmojen pakkaaminen

Yritykset pakata erikseen merkkijonojen hahmoja ja hahmoissa esiintyviä merkkejä eivät tuottaneet parannusta pakkaustulokseen.

Muistin tyhjennys

Muistin säästämiseksi kontekstimuisti tyhjennettiin säännöllisin väliajoin. Osa jo käsiteltyä dataa säästettiin ja tyhjennetty kontekstimuisti alustettiin säästetyllä datalla, jotta algoritmin ei tarvitsisi aloittaa täysin tyhjällä kontekstimuistilla. Säästön ansiosta algoritmia voitiin suorittaa pidemmillä konteksteilla. Pidemmistä konteksteista ei kuitenkaan hyödytty, koska jakaumien ennustuskyky kärsi rajoitetusta pakkaushistoriasta.

Tekijät

Esa Elovaara
Otto Räsänen
Jaakko Sorri