Compresión semistática orientada a palabras Guión Motivación • Lenguaje Natural: leyes. • Indexación orientada a palabras Compresión Huffman semistática Compresores semiestáticos densos Antonio Fariña Orientación a palabras ¿por qué? Lenguaje natural: Leyes de Zipf y de Heaps Heaps:: el tamaño tiene poca importancia si tenemos textos grandes Zipf:: La distribución de frecuencias de las palabras de un texto es muy sesgada Antonio Fariña Orientación a palabras (refs) Refs básicas. Antonio Fariña Compresión semistática orientada a palabras Guión Motivación Compresión Huffman semistática • Codificación Orientada a palabras • Huffman orientado a palabras: Plain y Tagged Huffman Compresores semiestáticos densos Antonio Fariña Huffman orientado a palabras Uso de orientación a palabras: — Bentley, Sleator, Tarjan, and Wei (CACM-1986) ?? — Moffat propuso usar palabras en vez de caracteres (+huffman) La distribución de frecuencias de las palabras es más sesgada 16 14 12 10 8 Character freq distribution (Spanish) frec 18 Word freq distribution 6 4 2 0 E A O L S N D R U I T C P M Y Q B H G F V J Ñ Z X K W n Se consiguen ratios de compresión de hasta 25% (en inglés) Así los elementos básicos para compresión y Text Retrieval son los mismos: las palabras Antonio Fariña Compresión + indexación Ejemplo: Texto original: El que poco coco come poco coco compra Vocabulario Índice invertido orientado a palabras: poco coco El que come compra 5 6 1 3 7 11 10 23 28 poco 10 C1 coco 11 C2 El 0010 C3 que 0011 C4 come 0110 C5 compra 0111 C6 Texto comprimido: 0010 0011 10 11 0110 10 11 0111 1 Antonio Fariña Esquema codificación 2 3 4 5 6 7 8 9 10 11 12 Compresión semistática orientada a palabras Guión Motivación Compresión Huffman semistática • Codificación Orientada a palabras • Huffman orientado a palabras: Plain y Tagged Huffman Compresores semiestáticos densos Antonio Fariña Plain Huffman y Tagged Huffman 1998: Moura, Navarro, Ziviani y Baeza: — 2 nuevas técnicas: Plain Huffman y Tagged Huffman Elementos comunes: — Basados en Huffman — Orientado a palabras — Usan bytes (no bits) (compresión ±30% pero más velocidad) Plain Huffman = Huffman sobre bytes (árbol 256-ario) Tagged Huffman marca el inicio de cada código •“1” para el 1er bit del 1er byte El primer bit es: •“0” para el 1er bit de los bytes restantes 1xxxxxxx 0xxxxxxx 0xxxxxxx Antonio Fariña Plain Huffman y Tagged Huffman Codificación Construcción Huffman b-ario: — Plain huffman aridad: 2b=256, Tagged Huffman 2b=128 — Codificación huffman normal Antonio Fariña Bottom-Up: 1ª iteración: R=número de nodos último nivel Restantes iteraciones: eligiendo 2b nodos menos frecuentes Plain Huffman y Tagged Huffman Ejemplos. Asúmase (b=3, bytes “especiales” de sólo 3 bits) Obténgase la codificación Plain Huffman y Tagged Huffman para los vocabularios en los 2 escenarios siguientes: Distribución uniforme: pi=1/17 Antonio Fariña Distribución exponencial: pi = 2-i Plain Huffman y Tagged Huffman Ejemplo 1 Antonio Fariña Plain Huffman y Tagged Huffman Ejemplo 2 Antonio Fariña Plain Huffman & Tagged Huffman Búsquedas sobre texto comprimido Ejemplo (b=2): to be lucky or not PLAIN HUFFMAN TAGGED HUFFMAN be 00 be 10 or 01 or 11 00 not 10 not 11 01 00 lucky 11 00 lucky 11 01 01 00 to 11 11 to 11 01 01 01 Busquemos “lucky” to be lucky or not 1111 00 1100 01 10 permite búsquedas eficientes to be lucky Falso emparejamiento Antonio Fariña or not 11010101 10 11010100 1100 110100 Imposible emparejamientos falsos TH: Búsquedas mejoradas Búsqueda directa (comprimir el patrón y buscarlo) Empezar la búsqueda en cualquier lugar (y la descompresión) Búsqueda tipo Boyer-Moore es posible (saltando bytes) Plain Huffman y Tagged Huffman Plain Huffman. (árbol de aridad 2b=256) — Ratio +- 30-32% — Búsqueda simulando descompresión (frases: Shift-Or autómata) Tagged Huffman. (árbol de aridad 2b-1 =128) — Pérdida en el ratio de compresión (3.5 puntos) Ratio +- 33.5-35% — El bit de marca indica el inicio de los códigos: Búsquedas directas mejoradas (al ser posible usar Boyer-Moore) Descompresión aleatoria Sincronismo: Es posible (1) ir a cualquier offset del texto comprimido, (2) buscar el principio de un código allí, y (3) comenzar la descompresión desde esa posición. Antonio Fariña Compresión semistática orientada a palabras Guión Motivación Compresión Huffman semiestática Compresores semiestáticos densos • End Tagged Dense Code • (s,c)- Dense Code • Resultados Teóricos • Resultados Empíricos Antonio Fariña Compresores semistáticos densos End-Tagged Dense Code Pequeño cambio: Una marca señala el final de un código 1xxxxxxx “1” --> para el 1er bit del último byte Primer bit es: “0” --> para el 1er bit del resto de bytes 0xxxxxxx Código libre de prefijo independ. de restantes 7 bits del byte Ya no se necesita usar Huffman Es posible usar TODAS las combinaciones de bits: Código Denso Antonio Fariña Tiene bit de Flag igual que Tagged Huffman en búsquedas Compresores semistáticos densos End-Tagged Dense Code Pequeño cambio: Una marca señala el final de un código 1xxxxxxx “1” --> para el 1er bit del último byte Primer bit es: “0” --> para el 1er bit del resto de bytes 0xxxxxxx Código libre de prefijo independ. de restantes 7 bits del byte Ya no se necesita usar Huffman 1xxxxxxx Códigos 1 byte Es posibledeusar TODAS las combinaciones de bits: Código Denso Antonio Fariña 0xxxxxxx 1xxxxxxx Tiene bit de Flag igual que Tagged Huffman en búsquedas 0xxxxxxx 0xxxxxxx 1xxxxxxx Códigos de 3 bytes Códigos de 2 bytes Compresores semistáticos densos End-Tagged Dense Code Esquema de codificación 10000000 10000001 ….. 11111111 00000000:10000000 ….. 01111111:11111111 00000000:00000000:10000000 …… 01111111:01111111:11111111 128 palabras más frecuentes (128 = 27 códigos de 1 byte) 1282 palabras de 128+1 a 128+1282 (1282 = 214 códigos de 2 bytes) 1283 Las palabras 128+ 1282+1 a 128 +1282 +1283 usan tres bytes (1283 = 221 códigos) ..... Antonio Fariña Los códigos dependen de la posición de la palabra en el ránking no de su frecuencia Compresores semistáticos densos End-Tagged Dense Code Procedimiento de codificación secuencial — Ordenación de palabras por frecuencia — Asignación de códigos 0xxxxxxx < 2b-1 Procedimiento de codificación directa (“al vuelo”) Ci codificar(i) i decodificar(Ci) Antonio Fariña 0xxxxxxx < 2b-1 ... 1xxxxxxx ≥ 2b-1 Compresores semistáticos densos End-Tagged Dense Code Procedimiento de codificación secuencial — Ordenación de palabras por frecuencia — Asignación de códigos 0xxxxxxx < 2b-1 0xxxxxxx < 2b-1 Pon las formulas y las complejidades Antonio Fariña ... 1xxxxxxx ≥ 2b-1 Compresores semistáticos densos End-Tagged Dense Code Procedimiento de codificación directa (“al vuelo”) Ci codificar(i) i decodificar(Ci) Pon las formulas y las complejidades O(|x|) = O(log i) O(log i) Antonio Fariña Ej. i=decodifica(x) Compresores semistáticos densos End-Tagged Dense Code Descompresión: dos pasos — Cargar el vocabulario ordenado — i decodificar(Ci) :: O(bytes T.Comp) vocabulario de*no*En*… cabecera C2 C3 C4 C0 C5 C6 C0 C7 C8 C1 C9 C10 Datos compr. C1 … Fichero comprimido decode 0 de 1 no 2 En 3 un 4 lugar 5 la En un lugar de la mancha de cuyo nombre no quiero acordarme no … … Texto plano Antonio Fariña Compresores semistáticos densos End-Tagged Dense Code: búsquedas TC Búsquedas directas: 1) Obtener el código asociado al patrón P Cp 2) Buscar el código Cp dentro del texto comprimido usando un algoritmo de tipo Boyer-Moore (skipping bytes) 3) Tras un emparejamiento chequear si es una ocurrencia real del patrón Es una ocurrencia o el sufijo de un código más largo? Byte previo ≥ 128 ? — Ej. Búsqueda de: “Pedrito” C(“Pedrito”) = 39 25 234 False match Antonio Fariña 2 25 234 110 25 234 100 129 234 25 234 True match 2 251 Compresores semistáticos densos End-Tagged Dense Code: búsquedas TC Algoritmo Horspool modificado para ETDC. Alg: En ETDC, c=128 Programa C: T P Antonio Fariña 39 25 234 2 0 1 2 3 25 234 0 k-1 110 25 234 100 129 234 25 234 2 251 z-1 TRUCO para evitar (i=0) Compresores semistáticos densos End-Tagged Dense Code Es un código denso. Pueden utilizarse todos los códigos disponibles. — Comprime mejor que TH (2-3 puntos). — Es superado por PH (≤1 punto). Marca mismas capacidades de búsqueda de Tagged Huffman — Búsqueda directa, — Acceso aleatorio. Codificación y decodificación eficiente — Procedimientos secuencial y directo Fácil de programar Antonio Fariña Compresión semistática orientada a palabras Guión Motivación Compresión Huffman semiestática Compresores semiestáticos densos • End Tagged Dense Code • (s,c)- Dense Code • Resultados Teóricos • Resultados Empíricos Antonio Fariña Compresores semistáticos densos (s,c)-Dense Code End Tagged Dense Code — 128 valores disponibles [128, 255] para el último byte (stoppers) — 128 valores disponibles [0, 127] para los restantes bytes (continuers) Por qué usar valores fijos de s y c? Adaptar (s,c) al vocabulario s minimizando tamaño Texto Comp. — Antonio Fariña — Número de palabras Distribución de frecuencia de las palabras End-Tagged Dense Code es un (128,128)-Dense Code Compresores semistáticos densos (s,c)-Dense Code *k; Antonio Fariña Num occs 20 15 12 11 8 8 Frec. acum 20 35 47 58 … … 3 3 2 1 1 … 1000 Compresores semistáticos densos http://vios.dc.fi.udc.es/codes Esquema de codificación — Stoppers: — s valores entre [0,s-1] Continuers: otros bytes. c valores entre [s, 255] 0 ... s-1 s s+1 ... 255 s ... 255 Antonio Fariña (s,c)-Dense Code último byte. s 0 1 ... s-1 s ... 255 palabras más frecuentes sc palabras de s+1 a s+sc 0 ... S-1 sc2 palabras de s+sc+1 a s+sc+sc2 Compresores semistáticos densos (s,c)-Dense Code Ejemplo (b=3) Palabra Freq P.H. (6,2)-DC (5,3)-DC (4,4)- DC Antonio Fariña (6,2) (5,3) ETDC A 0,20 [000] [000] [000] [000] 0,20 0,20 0,20 0,20 B 0,20 [001] [001] [001] [001] 0,20 0,20 0,20 0,20 C 0,15 [010] [010] [010] [010] 0,15 0,15 0,15 0,15 D 0,15 [011] [011] [011] [011] 0,15 0,15 0,15 0,15 E 0,14 [100] [100] [100] [100][000] 0,14 0,14 0,14 0,28 F 0,09 [101] [101] [101][000] [100][001] 0,09 0,09 0,18 0,18 G 0,04 [110] [110][000] [101][001] [100][010] 0,04 0,08 0,08 0,08 H 0,02 [111][000] [110][001] [101][010] [100][011] 0,04 0,04 0,04 0,04 I 0,005 [111][001] [110][010] [101][011] [101][000] 0,01 0,01 0,01 0,01 J 0,005 [111][010] [110][011] [101][100] [101][001] 0,01 0,01 0,01 0,01 1,03 1,07 1,16 1,30 Longitud media del código PH End-Tagged Dense Code es un (2b-1,2b-1)-DC Compresores semistáticos densos (s,c)-Dense Code Codificación Secuencial xxxxxxxx s≤ vc< 2b-1 s≤ vc < 2b-1 Codificación directa Ci codifica(s, i) i decodifica(s, Ci) Antonio Fariña xxxxxxxx Pon las formulas ... zzzzzzzz 0≤ vs< s Compresores semistáticos densos (s,c)-Dense Code Codificación Secuencial xxxxxxxx xxxxxxxx s≤ vc< 2b-1 s≤ vc < 2b-1 ... zzzzzzzz 0≤ vs< s Codificación directa Ci codifica(s, i) i decodifica(s, Ci) O(log i) Pon las formulas O(|x|) = O(log i) Antonio Fariña Compresores semistáticos densos (s,c)-Dense Code : búsquedas TC Algoritmo Horspool modificado para SCDC. Alg: En SCDC, c=2b-s = 256-s Antonio Fariña Compresores semistáticos densos (s,c)-Dense Code Es un código denso — Comprime mejor que TH (3-4 puntos) — Comprime mejor que ETDC (0.5 puntos) — Es superado por PH (0.25 puntos) — RATIO: PH < SCDC << ETDC <<< TH Codificación y decodificación simple ¿Marca? (byte valor < s) — Mismas capacidades de búsqueda que End-Tagged Dense Code y Tagged Huffman Antonio Fariña S óptimo entre 180 y 190 Guión de la exposición Motivación Compresión Huffman semiestática Compresores semiestáticos densos • End Tagged Dense Code • (s,c)- Dense Code • Resultados Teóricos • Resultados Empíricos Antonio Fariña Compresores semiestáticos densos Acotación analítica de Huffman Es posible obtener nuevas cotas analíticas de la compresión que puede alcanzarse con Huffman usando (s,c)-DC Gonzalo Navarro and Nieves Brisaboa. New Bounds on D-ary Optimal Codes. Information Processing Letters (IPL) 96(5):178184, 2005 Antonio Fariña Compresores semiestáticos densos Acotación analítica de Huffman Nuevas cotas analíticas de Huffman usando (s,c)-DC Dada la entropía (D bits): Siendo , el número de palabras codificables con k bytes, indica el número de palabras codificables con k bytes Por tanto, la probabilidad de los los símbolos codificados con hasta k bytes es: Obteniéndose: Antonio Fariña Compresores semiestáticos densos Acotación analítica de Huffman Por la ley de Zipf: donde: , , para ciertas constantes y Cota Superior Partiendo de que Sustituyendo c=D-s y minimizando, obtenemos una cota superior mínima cuando: y Antonio Fariña Compresores semiestáticos densos Acotación analítica de Huffman Cota Inferior Análogamente: Tomando Puesto que : Antonio Fariña nuestra cota superior, viene dada por: Compresión semistática orientada a palabras Guión Motivación Compresión Huffman semiestática Compresores semiestáticos densos • End Tagged Dense Code • (s,c)- Dense Code • Resultados Teóricos • Resultados Empíricos Antonio Fariña Compresores semistáticos densos Resultados empíricos y Plataforma de prueba Textos del TREC-2 y TREC-4 CORPUS Tamaño (bytes) Nº palabras Nº palabras diferentes 528,611 30,995 3,135,383 75,681 10,230,907 117,713 — Tiempo de descompresión FT92 175,449,235 — Velocidad de búsqueda ZIFF 185,220,215 36,803,204 284,892 40,866,492 237,622 FT93 197,586,294 42,063,804 291,427 FT94 203,783,923 43,335,126 295,018 AP 250,714,271 53,349,620 269,141 ALL FT 591,568,807 124,971,944 577,352 1,080,719,883 229,596,845 886,190 CALGARY Mostrando resultados para:2,131,045 — Ratio de compresión 14,749,355 FT91 y compresión CR— Tiempo de codificación 51,085,545 ALL — Intel Pentium-III (x2) 800 Mhz con 768Mb RAM. Antonio Fariña Debian GNU/Linux (kernel 2.2.19) gcc 3.3.3 20040429 y optimización –O9 Time muestra CPU user-time Compresores semistáticos densos Tiempos de codificación y compresión Extracción de vocabulario Proces. del fichero pal frec Vector de palabras ordenado n (s-c) DC Creando árbol Huffman cons árbol Generación de códigos 1a pasada 2a pasada Huffman Generación secuencial códigos Buscar valores (s,c) óptimos Lista acumulada de frecuencias Encontrar mejor S Generación secuencial códigos pal cod Tabla Hash Fase de compresión To ETDC Antonio Fariña Codificación est alturas compresión 1 T1 Compresores semistáticos densos Resultados Empíricos Ratio de compresión (%) Tiempo de codificación (msg.) 280 35 260 Encoding time (msec.) compression ratio (%) 34 33 32 31 30 240 220 200 180 160 140 29 28 120 30.73 30.88 31.56 (s ,c )-DC E TDC (s,c)-DC ETDC technique PH PH 34.16 100 < (s,c)-DC < ETDC < TH 0.8 pp 0.2 pp 2.5 pp ETDC < PH 25 6.1 24.5 5.8 5.7 5.6 5.5 5.4 5.92 5.88 5.90 5.83 5.3 PH TH TH < TH 2% 24 23.5 23 22.5 22 21.5 21 23.86 23.55 24.15 22.51 E TDC ETDC TH TH 20.5 PH PH PH Antonio Fariña 45% 270 Velocidad de descompresión (Mb/sg.) Deompression speed (Mbytes/sec) Compression speed (Mbytes/sec) Velocidad de compresión (Mb/sg.) 104 (s,c)-DC < 25% 6.2 5.9 143 (s ,c )-DC E TDC (s,c)-DC ETDC te chnique PH PH TH TH 6 260 (s ,c )-DC E TDC (s,c)-DC ETDC technique = ETDC TH TH > (s,c)-DC > TH PH PH ETDC = (s ,c )-DC (s,c)-DC technique PH > (s,c)-DC > TH 1,5% 4% Compresores semistáticos densos Búsquedas de patrones simples Tiempo de búsqueda (sg.) 2.5 2.4 Search time (sec.) 2.3 2.2 2.1 2 1.9 1.8 1.7 1.6 2.30 PH PH 1.70 1.80 (s ,c )-DC E TDC (s,c)-DC tec hnique ETDC (s,c)-DC < 5% ETDC < TH 5-10% 2.00 TH TH < PH 10% Buscando patrones: - Formados por 1 única palabra - Cuyos códigos tienen la misma longitud Antonio Fariña Compresores semistáticos densos Búsquedas multipatrón (100pats.) Compressed Text Plain Text Multi-pattern searches 14.602 16 search time (sec.) 14 10.667 10.49 12 9.143 10 8 6 4 1.987 2.497 2.283 2 0 TH ETDC SCDC DETDC+DEC DETDC AGREP rev Set-Hoorspol Algorithm used Multipatrón Antonio Fariña TH ETDC < Plain text < SCDC < 15-20% 5% 400% Compresores semistáticos densos Resultados Empíricos : Resumen compression ratio 35 Plain Huffman Tagged Huffman (s,c)-Dense Code End-Tagged Dense Code 34 33 32 31 30 100 120 140 160 180 200 220 240 260 280 encoding time (msec) compression ratio 35 Plain Huffman Tagged Huffman (s,c)-Dense Code End-Tagged Dense Code 34 33 32 31 30 18 18.2 18.4 18.6 18.8 19 19.2 search time (sec) Antonio Fariña 19.4 19.6 19.8 20 Compresores semistáticos densos Resultados Empíricos : Resumen Antonio Fariña Compresores semistáticos densos Resultados Empíricos : Resumen Compresores “densos” semiestáticos: ETDC y SCDC Codificación más simple y rápida que los basados en Huffman. — Codificación secuencial — Codificación directa (“al vuelo”) Permiten búsqueda directa y acceso aleatorio Velocidad: Buena velocidad de compresión y descompresión Ratio de compresión próximo a Plain Huffman Superan a Tagged Huffman en (todo): — Ratio de compresión, — Velocidad de compresión y de descompresión — Velocidad de búsquedas. Antonio Fariña Compresores semistáticos densos Ejercicio Muestra la codificación ETDC que se obtiene para los vocabularios siguientes (asúmanse bytes de “sólo” 3 bits) Distribución uniforme: pi=1/17 Distribución exponencial: pi = 2-i ¿En qué se diferencian? ¿En qué caso se obtiene una compresión mejor? Justifica la respuesta. Y si el vocabulario tuviese 20.000 símbolos. ¿qué codigo le correspondería al símbolo en la posición 16.512 (para SCDC o ETDC) Antonio Fariña