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 .
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ó.
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 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:
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 .
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 .
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.
Az alábbiakban felsoroljuk a PAQ algoritmus legjelentősebb változtatásait. Ezenkívül a kisebb többszörös fejlesztések kimaradnak.
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 .
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 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.
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.
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 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:
Archiválók és tömörítők | |
---|---|
nyitott és ingyenes | |
Ingyenes | |
Kereskedelmi | |
Parancs sor |
Archív formátumok | |
---|---|
Csak archiválás | |
Csak tömörítés | |
Archiválás és tömörítés | |
Szoftver csomagolás és forgalmazás |