PAQ

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

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ů.

Aritmetické kódování

Ř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.

Adaptivní vážení modelů

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ě:

Neuronové sítě pro míchání

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)) .

Kontextové modelování

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 .

Předzpracování textu

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.

Historie

Následuje seznam nejvýznamnějších změn v algoritmu PAQ. Kromě toho jsou vynechána menší vícenásobná vylepšení.

Hutterova cena

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 .

Výsledky testu

Maximální komprese

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).

Graf (diagram) komprese

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.

Black Fox Test

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ý textový test

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

Potomci PAQ

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:

Viz také

Poznámky

  1. PAQ1: Model Description Archived 27. října 2016 na Wayback Machine , 2002, Matt Mahoney, v1.02
  2. Oleksandr Ratushniak vyhrál první platbu Hutterovy ceny Archivováno 8. září 2007 na Wayback Machine 

Literatura

Odkazy