PAQ je řada bezplatných textových archivátorů , které se společným úsilím vývojářů dostaly na první místa v hodnocení mnoha testů komprese dat (i když za cenu procesorového času a paměti). Nejlepšího výsledku v této sérii ve většině testů dosáhl archivátor PAQ8JD, vytvořený společným úsilím Matta Mahoneyho (Matt Mahoney), Alexandra Ratushnyaka, Sergeje Osnacha, Przemysława Skibińského a Billa Pettise a vydaný 30. prosince 2006 . V některých testech však zaostává za WinRK (vytvořeným Malcolmem Taylorem v lednu 2005 ) v režimu PWCM. PWCM(Angličtina PAQ vážené kontextové míchání , „PAQ vážené kontextové míchání“) je vlastní implementace algoritmu PAQ od třetí strany . Speciálně vyladěné verze algoritmu PAQ vyhrály ceny v Hutterově ceně a Calgary Corpus Challenge .
Algoritmus je založen na myšlence kontextového modelování . Kontextem je, řečeno přístupným jazykem, historie vzhledu postavy, tedy informace o postavách, které předcházejí tu aktuální ve stlačitelném proudu. V tomto případě je proces komprese rozdělen do dvou fází: modelování a kódování . PAQ používá algoritmus pro míchání kontextu . Kontextové míchání ( Context mixing ) je technika blízce příbuzná s algoritmem PPM , ale rozdíl je v tom, že pravděpodobnost dalšího znaku se vypočítává na základě vážené kombinace velkého počtu modelů v závislosti na různých kontextech, ne nutně po sobě jdoucí V rodině PAQ se následující modely používají hlavně ke sběru statistik a předpovídání pravděpodobnosti dalšího symbolu:
Všechny verze PAQ předpovídají a komprimují jeden bit po druhém , ale liší se v detailech implementace, jak jsou předpovědi kombinovány a následně zpracovávány. Jakmile byla prediktivně určena pravděpodobnost výskytu dalšího bitu, bit je komprimován aritmetickým kodérem . Existují tři způsoby, jak kombinovat předpovědi modelu v závislosti na verzi PAQ.
PAQ1SSE a novější verze používaly predikci sekundárního odhadu symbolu ( SSE ) post-processing , tj. kombinovaná predikce a malý kontext byly použity k výběru další predikce z tabulky. Po zakódování symbolu byla data v tabulce upravena, aby se snížila chyba predikce. Odhad sekundárních znaků může být kombinován do jednoho procesu s různými kontexty nebo může být prováděn paralelně, průměrování s výstupy modelů.
Řetězec s je zkomprimován do bajtového řetězce představujícího x v 256 big endianu v intervalu [0;1) tak, že P(r < s) ≤ x < P(r ≤ s), kde P(r < s) je pravděpodobnost, že náhodný řetězec r stejné délky jako s je lexikograficky menší než s . Vždy je možné najít řetězec x takový, že jeho délka přesahuje Shannonův limit alespoň o jeden byte : -log 2 P(r = s) bitů. Délka s je uložena v hlavičce archivu.
Aritmetický kodér v PAQ je implementován uložením horní a dolní meze x pro každý krok predikce, zpočátku [0;1]. Po každé predikci se aktuální interval rozdělí proporcionálně k pravděpodobnosti, že další bit bude 0 a další bit bude 1, na základě předchozích bitů s . Další bit je zakódován výběrem odpovídajícího dílčího slotu jako nového slotu.
Číslo x je dekomprimováno do řetězce s s identickou řadou bitových předpovědí (protože předchozí bity s jsou známé). Interval je rozdělen jako při kompresi. Část obsahující x se stane novým intervalem a odpovídající bit se přidá k s .
V PAQ jsou horní a dolní hranice intervalu reprezentovány třemi částmi. Nejvýznamnější bity v základu 256 jsou identické, takže je lze zapsat jako vysoké bajty x . Další 4 bajty jsou uloženy v paměti, takže horní bajt je jiný. Předpokládá se, že všechny nejméně významné bity jsou nuly pro dolní mez a všechny jedničky pro horní mez. Kódování je dokončeno zápisem jednoho dalšího bajtu ze spodní hranice.
Ve verzích PAQ před PAQ6 každý model mapoval mnoho různých kontextů na dvojici čítačů: - počet nulových bitů a - počet jedniných bitů. Pro zvýšení významu pozdější historie bitů bylo počítadlo sníženo na polovinu, když došlo k opačnému bitu. Na vstupu je například sledován aktuální stav modelu spojeného s kontextem a bitem 1 - čítač je aktualizován do stavu (7,4).
Bit je komprimován aritmetickým kodérem podle své pravděpodobnosti buď P(1) nebo P(0)=1-P(1). Pravděpodobnosti se počítají váženým součtem čítačů nul a jedniček:
kde je hmotnost i-tého modelu. Před PAQ3 byly váhy fixovány a randomizovány (kontexty řádu n měly váhu n²). Počínaje PAQ4 byly váhy voleny adaptivně ve směru snižování chyby predikce ve stejných souborech kontextů. Pokud je potřeba zakódovat bit y , pak se váhy přiřadí následovně:
Počínaje PAQ7 je výstupem každého modelu předpověď (místo dvojice čítačů). Předpovědi jsou zprůměrovány přes logistickou doménu pomocí vzorce:
kde P(1) je pravděpodobnost, že další bit bude jedna, a P i (1) je pravděpodobnost odhadnutá i -tým modelem a
Po každé predikci je model aktualizován úpravou vah, aby se snížily náklady na kompresi.
kde η je faktor učení (typicky 0,002 až 0,01), y je predikovaný bit a (y - P(1)) je chyba predikce. Algoritmus aktualizace váhy se liší od trénovací metody backpropagation běžné v neuronových sítích v tom, že se nebere v úvahu součin P(0)P(1), protože cílem neuronové sítě je minimalizovat náklady na kódování, nikoli průměr. čtvercová chyba .
Většina verzí PAQ používá malý kontext při výběru sady vah pro neuronovou síť. Některé verze používají dvou- a tříkrokové prediktory, skládající se ze dvou nebo tří sad neuronových sítí, přičemž výstup každé předchozí je vstupem pro další sadu sítí, jejíž síla je menší, a pak sekundární následuje odhad symbolu . Navíc pro každou vstupní predikci může existovat více vstupů, které jsou nelineárními funkcemi P i (1) navíc ke komprimaci (P(1)) .
Každý model rozděluje příchozí bitové proudy do sady kontextů a mapuje každý kontext na stav bitové historie reprezentovaný 8 bity. Ve verzích před PAQ6 byl stav reprezentován dvojicí čítačů (n 0 , n 1 ) . V PAQ7 a novějších obsahoval stav za určitých podmínek také poslední bit nebo celou sekvenci. Hodnoty stavu jsou zobrazeny v pravděpodobností pomocí tabulky o 256 znacích. Po tabulkové predikci byla hodnota v tabulce mírně zploštělá (obvykle do 0,4 %), aby se snížila chyba predikce .
Ve všech verzích PAQ8 obsahují stavy bitové historie následující informace:
Aby počet stavů zůstal na 256, byla na pulty zavedena následující omezení: (41, 0), (40, 1), (12, 2), (5, 3), (4, 4), (3 , 5), (2, 12), (1, 40), (0, 41). Pokud čítač překročí limit, zvolí se další stav s podobným poměrem n 0 / n 1 . Pokud je tedy aktuální stav (n 0 = 4, n 1 = 4, poslední bit = 0) a jako vstup je přijata 1, pak nový stav není (n 0 = 4, n 1 = 5, poslední bit = 1), ale (n 0 = 3, n 1 = 4, poslední bit = 1).
Většina kontextových modelů je implementována jako hashovací tabulky . Některé malé kontexty jsou implementovány jako indexovaná pole .
Některé verze PAQ, zejména PAsQDAa, PAQAR (obě pocházejí z PAQ6) a PAQ8HP1 až PAQ8HP8 (potomci PAQ8 a vítězové Hutterovy ceny [1] ), zpracovávají text tak, že se na něj podívají a nahrazují slova z textu obsaženého v externím slovník, jedno- a tříbajtové kódy. Slova psaná velkými písmeny jsou navíc kódována speciálním znakem a překladem slova na malá písmena. V řadě PAQ8HP je slovní zásoba organizována seskupením syntakticky a sémanticky podobných slov. To umožňuje modely, které jako kontexty používají pouze horní bity kódů slovníku.
Následuje seznam nejvýznamnějších změn v algoritmu PAQ. Kromě toho jsou vynechána menší vícenásobná vylepšení.
Sérii archivátorů PAQ8HP1 - PAQ8HP8 napsal Alexander Ratushnyak od 21. srpna 2006 do 18. ledna 2007 jako uchazeči o Hutterovu cenu . Hutterova cena je 100 MB komprese 100 MB anglického textu ve formátu xml a kódování UTF-8 ( Wikipedia dump snippet ). Řada PAQ8HP se vyvinula z PAQ8H. Součástí programů byly slovníky pro předzpracování textu a specializované ladění modelů pro testování. Netextové modely byly z programů odstraněny. Slovník byl seskupen ze syntakticky a sémanticky příbuzných slov s běžnými příponami. Syntaktické seskupování umožnilo komprimovat textová data, protože slova s podobným pravopisem se často objevovala společně a kódy jejich slovní zásoby byly snadno modelovány na vysokých bitech. Sémantické seskupení usnadnilo komprimaci slovníku. Test vzal v úvahu velikost programu spolu s komprimovaným slovníkem.
27. října 2006 byla vyhlášena Hutterova cena Jace Bowery [2] . Cena byla obdržena 30. října 2006 po vydání PAQ8HP5 ve výši 3416 eur .
23. května 2009 se Alexander Ratushniak stal třetím vítězem Hutterovy ceny s modifikací PAQ8HP12 .
Test maximální komprese provádí Werner Bergmans. Využívá dva testovací případy – jeden veřejný a jeden soukromý. Veřejná sada se skládá z asi 55 MB v 10 souborech různých typů: texty různých formátů, spustitelné soubory a obrázky. Programy jsou testovány v režimu maximální komprese z důvodu využití RAM a procesorového času na úkor rychlosti. Test používá dvě kritéria, která je třeba vzít v úvahu: systém účtování komprese pro každý soubor a celkovou velikost komprimovaných dat. K 10. únoru 2007 se testu zúčastnilo 169 kompresorů. Podle prvního kritéria se PAQ8JD umístil na druhém místě po WinRK 3.0.3. Z hlediska celkové velikosti komprimovaných dat byl PAQ8JD první.
Druhá sada dat je soukromá . Skládá se z 316 355 757 bytů v 510 souborech různých typů. Programy jsou seřazeny podle tří kritérií: celková velikost, doba komprese a vzorec, který bere v úvahu velikost a dobu komprese. Proběhlo 200 testovacích jízd, které zahrnovaly některé starší verze; některé programy byly spuštěny s různými možnostmi pro stejný kompresor. Pokud jde o celkovou velikost, jako první byl rozpoznán WinRK 3.0.3, následovaný PAQ8JC a PAQ8JD . PAQ je uveden na konci seznamu pro dobu komprese. PAQ8JD běžel 47 558 sekund (196.) – relativně pomalu ve srovnání s nejrychlejším programem (4 sekundy), ale není špatný ve srovnání s nejpomalejším (70 444 sekund).
Stephen Bush Compression Chart řadí programy podle celkové velikosti komprimovaných dat 16 nepublikovaných datových sad o celkové velikosti 3 271 105 873 bajtů. K 20. únoru 2007 byl PAQ8JC první v testu 201 kompresního programu. PAQ8JD nebyl testován.
Test Black Fox hodnotil 111 verzí 69 kompresorů na 12 nepublikovaných souborech o celkové velikosti 30 309 194 bajtů k 4. únoru 2007 . PAQ8JD vyšel jako první.
Velký test komprese textu ( LTCB ) od Matta Mahoneyho řadí programy podle komprimované velikosti veřejně dostupného 109bytového anglického textového souboru Wikipedie . Na rozdíl od jiných testů zahrnuje velikost dekompresoru a všech souborů potřebných pro kompresi jako archiv zip ve velikosti komprimovaného souboru. K 9. únoru 2007 byl PAQ8HP8 prvním z 62 programů.
PAQ je velmi náročný na paměť a zdroje CPU. Následující tabulka porovnává časy komprese a dekomprese na 2,2 GHz počítači Athlon-64 a také spotřebu paměti v megabajtech pro některé oblíbené programy v tomto testu.
Hodnost | Program | Velikost komprimovaného souboru | Doba komprese | Paměť |
---|---|---|---|---|
jeden | PAQ8HP8 | 133 423 109 | 64 639 sekund | 1849 MB |
osmnáct | PPMd | 183 976 014 | 880 sekund | 256 MB |
44 | bzip2 | 254 007 875 | 379 sekund | 8 MB |
49 | infozip | 322 649 703 | 104 sekund | 0,1 MB |
PAQ je svobodný software distribuovaný za podmínek GNU General Public License . To umožňuje ostatním autorům rozvětvovat PAQ a provádět změny, jako je grafické uživatelské rozhraní , nebo zlepšit rychlost komprese na úkor kompresního poměru. Nejznámější klony PAQ:
Archivátory a kompresory | |
---|---|
otevřené a zdarma | |
Volný, uvolnit | |
Komerční | |
Příkazový řádek |
Archivní formáty | |
---|---|
Pouze archivace | |
Pouze komprese | |
Archivace a komprese | |
Balení a distribuce softwaru |