PAQ

A PAQ ingyenes szövegalapú archiválók  sorozata , amely a fejlesztők közös erőfeszítésével számos adattömörítési teszt értékelésében az első helyre emelkedett (igaz , processzoridő és memória árán ). Ebben a sorozatban a legtöbb teszten a legjobb eredményt a PAQ8JD archiváló érte el, amelyet Matt Mahoney (Matt Mahoney), Alexander Ratushnyak, Sergey Osnach, Przemysław Skibiński és Bill Pettis közös erőfeszítésével hoztak létre, és 2006. december 30-án adták ki . Néhány tesztben azonban elmarad a WinRK -tól (Malcolm Taylor készítette 2005 januárjában ) PWCM módban. A PWCM ( angol. PAQ súlyozott kontextuskeverés , „PAQ súlyozott kontextuskeverés”) a PAQ algoritmus harmadik fél által védett megvalósítása. A PAQ algoritmus speciálisan hangolt változatai díjat nyertek a Hutter Prize- ben és a Calgary Corpus Challenge -ben .  

Algoritmus

Az algoritmus a kontextus modellezés ötletén alapul . A szövegkörnyezet egy hozzáférhető nyelven szólva egy karakter megjelenésének története, vagyis az aktuális karaktert megelőző karakterekről szóló információ egy tömöríthető adatfolyamban. Ebben az esetben a tömörítési folyamat két szakaszra oszlik: modellezésre és kódolásra . A PAQ kontextuskeverő algoritmust használ . A kontextuskeverés ( Context mixing ) a PPM algoritmushoz szorosan kapcsolódó technika , de a különbség az, hogy a következő karakter valószínűségét nagyszámú modell súlyozott kombinációja alapján számítják ki, különböző kontextusoktól függően, nem feltétlenül egymást követő . A PAQ családban a következő modelleket főként statisztikák gyűjtésére és a következő szimbólum valószínűségének előrejelzésére használják:

A PAQ összes verziója egy-egy bitet előrejelez és tömörít , de különböznek az előrejelzések kombinálásának és utólagos feldolgozásának megvalósítási részleteiben. Miután a következő bit előfordulásának valószínűségét prediktív módon meghatároztuk, a bitet egy aritmetikai kódoló tömöríti . A modell-előrejelzések kombinálásának három módja van a PAQ verziótól függően.

A PAQ1SSE és a későbbi verziók másodlagos szimbólumbecslés ( SSE  ) predikciós utófeldolgozást alkalmaztak , azaz a kombinált előrejelzést és egy kis kontextust használták a következő előrejelzés kiválasztásához a táblázatból. A szimbólum kódolása után a táblázatban szereplő adatokat módosítottuk az előrejelzési hiba csökkentése érdekében. A másodlagos karakterbecslés kombinálható egy folyamatba különböző kontextusokkal, vagy párhuzamosan, a modellek kimeneteivel átlagolható.

Aritmetikai kódolás

Az s karakterláncot egy bájt karakterláncba tömörítjük, amely x -et reprezentál 256 big endianban a [0;1) intervallumban úgy, hogy P(r < s) ≤ x < P(r ≤ s), ahol P(r < s) a annak valószínűsége, hogy egy s -vel azonos hosszúságú véletlenszerű r karakterlánc lexikográfiailag kisebb, mint s . Mindig lehet olyan x karakterláncot találni, amelynek hossza legalább egy bájttal meghaladja a Shannon -határt : -log 2 P(r = s) bit. Az s hosszúságot az archívum fejlécében tároljuk.

Az aritmetikai kódoló a PAQ-ban úgy valósul meg, hogy minden előrejelzési lépéshez egy felső és alsó x korlátot tárol, kezdetben [0;1]. Minden előrejelzés után az aktuális intervallumot arányosan felosztjuk azzal a valószínűséggel, hogy a következő bit 0 és a következő bit 1 lesz, az s előző bitjei alapján . A következő bitet úgy kódoljuk, hogy új résként a megfelelő alrést választjuk ki.

Az x számot kitömörítjük az s karakterláncba azonos bit-előrejelzések sorozatával (mivel az s korábbi bitjei ismertek). Az intervallum fel van osztva, mint a tömörítésnél. Az x -et tartalmazó rész egy új intervallummá válik, és a megfelelő bit hozzáadódik s -hez .

A PAQ-ban az intervallum felső és alsó határát három rész jelöli. A 256-os bázis legjelentősebb bitjei azonosak, így x magas bájtjaiként írhatók fel . A következő 4 bájt a memóriában tárolódik, így a magas bájt eltérő. Feltételezzük, hogy a legkisebb jelentőségű bitek mindegyike nulla az alsó korlátnál, és minden egyes a felső korlátnál. A kódolás úgy fejeződik be, hogy az alsó korlátból még egy bájtot írunk.

A modellek adaptív súlyozása

A PAQ6 előtti PAQ verziókban minden modell sok különböző kontextust képezett le egy számlálópárra:  - a nulla bitek száma és  - az egy bitek száma. A bitek későbbi történetének jelentőségének növelése érdekében a számlálót felére csökkentették, amikor az ellenkező bit előfordult. Például a kontextushoz és az 1. bithez társított modell aktuális állapota figyelhető meg a bemeneten - a számláló frissül a (7,4) állapotra.

A bitet az aritmetikai kódoló a P(1) vagy P(0)=1-P(1) valószínűség szerint tömöríti. A valószínűségek kiszámítása nullák és egyesek számlálóinak súlyozott összegzésével történik:

hol van az i-edik modell súlya. A PAQ3 előtt a súlyokat rögzítették és randomizálták (az n rendű kontextusok súlya n² volt). A PAQ4-ből kiindulva a súlyokat adaptívan választottuk meg az előrejelzési hiba csökkentése irányában ugyanazon kontextuskészletekben. Ha az y bitet kódolni kell , akkor a súlyok hozzárendelése a következőképpen történik:

Neurális hálózatok keveréshez

A PAQ7-től kezdve minden modell kimenete egy előrejelzés (egy pár számláló helyett). Az előrejelzések átlagolása a logisztikai tartományban a következő képlet segítségével történik:

ahol P(1) annak a valószínűsége, hogy a következő bit egy lesz, és P i (1) az i - edik modell által becsült valószínűség és

Minden egyes előrejelzés után a modell frissül a súlyok beállításával a tömörítési költségek csökkentése érdekében.

ahol η a tanulási tényező (általában 0,002 és 0,01 között), y  az előrejelzett bit, és (y - P(1)) az előrejelzési hiba. A súlyfrissítési algoritmus abban különbözik a neurális hálózatokban elterjedt backpropagation képzési módszertől , hogy a P(0)P(1) szorzatot nem veszik figyelembe, mivel a neurális hálózat célja a kódolási költségek minimalizálása, nem az átlag . négyzetes hiba .

A PAQ legtöbb verziója kevés kontextust használ, amikor egy neurális hálózathoz súlykészletet választ. Egyes verziók két- és háromlépcsős előrejelzőket használnak, amelyek két vagy három neurális hálózatból állnak, mindegyik előző kimenete a következő hálózatok bemenete, amelyek teljesítménye kisebb, majd a másodlagos . szimbólumbecslés következik . Ezen túlmenően minden bemeneti előrejelzéshez több olyan bemenet is létezhet, amelyek a tömörítés(P(1)) mellett a P i (1) nemlineáris függvényei .

Kontextus modellezés

Mindegyik modell felosztja a bejövő bitfolyamokat kontextusok készletére, és minden kontextust leképez egy 8 bites bittörténeti állapotra. A PAQ6 előtti verziókban az állapotot egy számlálópár képviselte (n 0 , n 1 ) . A PAQ7-ben és későbbiekben az állapot bizonyos feltételek mellett az utolsó bitet vagy a teljes sorozatot is tartalmazta. Az állapotértékek valószínűségben jelennek meg egy 256 karakteres táblázat segítségével. A táblázat előrejelzése után a táblázatban szereplő értéket kissé lapítottuk (általában 0,4%-ig), hogy csökkentsük az előrejelzési hibát .

Minden PAQ8 verzióban a bitelőzmények állapota a következő információkat tartalmazza:

Hogy az állapotok száma 256-on maradjon, a következő korlátozásokat helyezték el a számlálókon: (41, 0), (40, 1), (12, 2), (5, 3), (4, 4), (3) , 5), (2, 12), (1, 40), (0, 41). Ha a számláló túllépi a határértéket, a következő állapotot választjuk hasonló n 0 / n 1 aránnyal . Így ha az aktuális állapot (n 0 = 4, n 1 = 4, utolsó bit = 0) és bemenetként 1 érkezik, akkor az új állapot nem (n 0 = 4, n 1 = 5, utolsó bit = 1), de (n 0 = 3, n 1 = 4, utolsó bit = 1).

A legtöbb kontextusmodell hash táblaként van megvalósítva . Néhány kis kontextus indexelt tömbként valósul meg .

Szöveg előfeldolgozás

A PAQ egyes verziói, nevezetesen a PAsQDAa, PAQAR (mindkettő a PAQ6 leszármazottja) és a PAQ8HP1-től PAQ8HP8-ig (a PAQ8 leszármazottai és a Hutter-díj nyertesei [1] ) úgy dolgozzák fel a szöveget, hogy ránéznek, és szavakat cserélnek ki a külső szövegben található szövegből. szótár, egy- és hárombájtos kódok. Ezenkívül a nagybetűs szavakat speciális karakterekkel és a szó kisbetűsre történő fordításával kódolják. A PAQ8HP-sorozatban a szókincs a szintaktikailag és szemantikailag hasonló szavak csoportosításával történik. Ez lehetővé teszi azokat a modelleket, amelyek csak a szótárkódok legfelső bitjeit használják kontextusként.

Történelem

Az alábbiakban felsoroljuk a PAQ algoritmus legjelentősebb változtatásait. Ezenkívül a kisebb többszörös fejlesztések kimaradnak.

Hutter-díj

A PAQ8HP1 - PAQ8HP8 archiváló sorozatot Alexander Ratushnyak írta 2006. augusztus 21. és 2007. január 18. között, mint a Hutter-díj versenyzője . A Hutter Prize egy 100 MB-os angol szöveg 100 MB-os tömörítése xml formátumban és UTF-8 kódolással ( Wikipédia dump snippet ). A PAQ8HP sorozat a PAQ8H-ból fejlődött ki. A programok között szerepeltek szótárak a szöveg előfeldolgozásához és a modellek speciális hangolása a teszteléshez. A nem szöveges modelleket eltávolítottuk a programokból. A szótárat szintaktikailag és szemantikailag rokon, közös utótagú szavakból csoportosították. A szintaktikai csoportosítás lehetővé tette a szöveges adatok tömörítését, mivel a hasonló írásmódú szavak gyakran együtt jelentek meg, és szókincsük kódjait könnyen modellezték a magas bitek alapján. A szemantikai csoportosítás megkönnyítette a szótár tömörítését. A teszt figyelembe vette a program méretét a tömörített szótárral együtt.

2006. október 27- én Jace Bowery [2] hirdette ki a Hutter-díjat . A díjat 2006. október 30-án, a PAQ8HP5 megjelenése után vették át 3416 euró értékben .

2009. május 23- án Alexander Ratushniak lett a Hutter-díj harmadik nyertese a PAQ8HP12 módosítással .

Vizsgálati eredmények

Maximális tömörítés

A Maximum Compression tesztet Werner Bergmans tartja karban. Két tesztesetet használ – egy nyilvános és egy privát. A nyilvános készlet körülbelül 55 megabájtból áll, 10 különböző típusú fájlban: különböző formátumú szövegek, futtatható fájlok és képek. A programokat maximális tömörítési módban tesztelik a RAM és a processzoridő használata miatt a sebesség rovására. A teszt két szempontot vesz figyelembe: az egyes fájlok tömörítési elszámolási rendszerét és a tömörített adatok teljes méretét. 2007. február 10- én 169 kompresszor vett részt a tesztben. Az első kritérium szerint a PAQ8JD a második helyen végzett a WinRK 3.0.3 után. A tömörített adatok teljes méretét tekintve a PAQ8JD volt az első.

A második adatkészlet privát . 316 355 757 bájtból áll, 510 különböző típusú fájlban. A programokat három szempont szerint rangsorolják: teljes méret, tömörítési idő és egy képlet, amely figyelembe veszi a méretet és a tömörítési időt. 200 próbaüzem volt, amelyek tartalmaztak néhány régebbi verziót is; néhány program különböző opciókkal futott ugyanahhoz a kompresszorhoz. A teljes méretet tekintve a WinRK 3.0.3 ismert elsőként, majd a PAQ8JC és a PAQ8JD . A PAQ a tömörítési idő lista végén található. A PAQ8JD 47 558 másodpercig futott (196.) – viszonylag lassan a leggyorsabb programhoz (4 másodperc) képest, de nem rossz a leglassabbhoz (70 444 másodperc) képest.

A tömörítés diagramja (diagramja)

A Stephen Bush- tömörítési diagram a programokat 16, 3 271 105 873 bájt összmérettel rendelkező, még nem publikált adatkészlet tömörített adatmérete alapján rangsorolja. 2007. február 20- án a PAQ8JC volt az első a tömörítési program 201-es tesztjében. A PAQ8JD-t nem tesztelték.

Black Fox Test

A Black Fox teszt 69 tömörítő 111 verzióját rangsorolta 12 nem publikált fájlon, összesen 30 309 194 bájt mérettel 2007. február 4- én . A PAQ8JD először jelent meg.

Nagy szöveg teszt

A Matt Mahoney által készített Large Text Compression Benchmark ( LTCB ) egy nyilvánosan elérhető, 10 9 bájtos angol Wikipédia szövegfájl tömörített mérete alapján rangsorolja a programokat . Más tesztektől eltérően a tömörített fájl méretében tartalmazza a kibontó méretét és a tömörítéshez szükséges fájlokat zip -archívumként. 2007. február 9- én a PAQ8HP8 volt az első a 62 program közül.

A PAQ nagyon igényes a memória és a CPU erőforrások tekintetében. A következő táblázat összehasonlítja a 2,2 GHz-es Athlon-64 gépen a tömörítési és kicsomagolási időket, valamint a memóriafogyasztást megabájtban a tesztben szereplő néhány népszerű program esetében.

Rang Program Tömörített fájlméret Tömörítési idő memória
egy PAQ8HP8 133 423 109 64 639 másodperc 1849 MB
tizennyolc PPMd 183 976 014 880 másodperc 256 MB
44 bzip2 254 007 875 379 másodperc 8 MB
49 infozip 322 649 703 104 másodperc 0,1 MB

A PAQ leszármazottai

A PAQ egy ingyenes szoftver , amelyet a GNU General Public License feltételei szerint terjesztenek . Ez lehetővé teszi más szerzők számára a PAQ elágazását és módosításokat, például a grafikus felhasználói felületet , vagy a tömörítési arány rovására javítja a tömörítési sebességet. A leghíresebb PAQ klónok:

Lásd még

Jegyzetek

  1. PAQ1: A modell leírása archiválva : 2016. október 27., the Wayback Machine , 2002, Matt Mahoney, v1.02
  2. Oleksandr Ratushniak nyerte az első Hutter-díjat . Archiválva : 2007. szeptember 8. a Wayback Machine -nél 

Irodalom

Linkek