Tecnologias da Comunicação
Humana
Transmission and Storage
13340, Hugo Costa
14676, Luís Aguilar
14119, Fernando Cunha
Transmission and Storage
• Neste domínio é fundamental falar de compressão de
dados.
• E também é importante falar de índices.
Porquê da Compressão?
• Economia de espaço
• Economia de rede
• Velocidade de acesso
• Processamento eficiente
Código de Huffman
• Método de compressão muito usado e fiável
• Maneira de funcionamento muito simples, consiste em
criar árvores binárias.
• Método usado pelo Winzip.
Algoritmo Huffman
• Monta uma tabela de frequências da ocorrência de cada
caracter.
• Cada caracter é representado por um conjunto de bits.
• Somar os índices com menor frequência, repetidamente até
termos só uma árvore binária.
Algoritmo Huffman
• Considerando:
• Somar os índices com menor frequência
Algoritmo Huffman
• Continuando a somar e colocando os índices com menor
frequência no nodo esquerdo
Algoritmo Huffman
• Finalmente a árvore:
Codificação dos Símbolos
Símbolo
a
" "
c
l
t
s
e
j
Código
0
10
1100
1101
1110
11110
111110
111111
• Estes códigos são utilizados na descodificação
Considerar nodo esquerdo 0 e nodo direito 1.
Objectivo Huffman
• Codificar os símbolos mais frequentes com o menor
número de bits.
• Permite diminuir drasticamente o tamanho dos ficheiros.
Exercício
• Ponham-se atentos que sai na frequência
Porquê dos Índices?
• Aumento da performance de pesquisas.
• Diminuição do tempo de resposta.
• Resumindo eficiência.
Tipos Índices
• Índice Invertido
• Suffix Array
• Suffix Tree
Índices Invertidos
• O indíce invertido é a estrutura básica por trás de qualquer
algoritmo de IR.
• Qualquer forma de melhorar a eficiência do uso do II
melhora também a performance global do sistema de IR.
• Nalguns casos, conseguimos reduzir um índice para 10 %
do seu tamanho original.
• Os indíces invertidos tornam-se necessários para se
encontrar eficazmente os termos de um conjunto de
documentos.
• Uma lista de palavras, cada uma das quais aponta para uma
lista de ocorrências em documentos.
Índices Invertidos
pal1
Doc 1
Doc 6
Doc 16
pal2 ...
...
...
...
paln
...
...
...
Índices Invertidos
• Com um média de 6 letras por termo, um contador de
documentos de 4 bytes e um apontador de 4 bytes para o
ínicio da lista de cada termo, são necessários 14 bytes por
termo. Um corpus de 8 milhões de termos ocuparia 128
MB.
• Cabe portanto facilmente em memória.
• Mas quanto maior for o indíce, maior vai ser o espaço de
armazenamento necessário para o guardar.
• O tamanho (espaço de armazenamento) afecta
directamente o tempo de processamento (I/O)
• Então o tamanho do Índice tem de ser reduzido ao máximo
Compressão de Índices
• Usam-se então técnicas de compressão de índices
• Byte Aligned (Fixed Length Index Compression)
• Elias Gamma (Variable Length Index Compression)
• Flat Huffman
Compressão de Índices
Fixed Length Index Compression
•
•
•
•
É o tipo de algoritmo mais simples de todos.
Algoritmo está relacionado com as fronteiras do Byte.
É fácil de implementar
Melhora a performance em runtime, prejudicando um
pouco a taxa de compressão
• Oferece boa compressão (15% do tamanho de um índice
invertido, usando stop words)
Compressão de Índices
Fixed Length Index Compression
• Num índice invertido, as entradas para cada palavra são
armazenadas em ordem descendente
• Então para cada identificador de documento, apenas a
diferença entre o identificador corrente e o identificador que
o precede precisa de ser guardada. Exemplo:
benfica
Doc 5
3
campeão
...
...
Benfica está no
documento 5 e no 8,
por exemplo...
...
...
...
Compressão de Índices
Fixed Length Index Compression
• No caso de não haver ainda nenhum identificador de
documento, guarda-se uma versão comprimida do deste.
• Uma elevada proporção de valores relativamente baixos é
assim garantida.
• Uma vez que as diferenças entre as ocorrências são
relativamente pequenas precisamos de uma quantidade baixa
de bits para guardar essa diferença.
•
Ex: 1 byte  64
2 bytes  16384
3 bytes  4.194.304
4 bytes  2 ^ 30 – 1
63 – 00 111111
180 – 01 000000 10110100
1 – 00 000001
Neste exemplo de Byte Aligned, usa-se os primeiros 2 bits para indicar quantos
bytes vamos usar para guardar a diferença (por isso 2^30 e não 2^32)
Compressão de Índices
Fixed Length Index Compression
• Na melhor das hipóteses, um x até 64 pode ser guardado em
um byte. Se não tivessemos compressão precisariamos de 4
bytes.
• Se tivessemos que guardar 180, 63, 4, 2, 1 precisariamos de
160 bits (20 bytes).
• Com este tipo de compressão precisamos apenas de 48 bits (4
bytes)
180 – 01 000000 10110100
63 – 00 111111
4 – 00 000100
2 – 00 000010
1 – 00 000001
Compressão de Índices
Variable Length Index Compression
• A técnica descrita por Witten, Moffat e Bell também tira
proveito do facto de para a maioria das palavras, as diferenças
entre os ids dos documentos que as contêm ser relativamente
pequena.
• Consegue-se guardar um inteiro x com 2 * ( log2 x) + 1 bits.
• Ex: 14 guarda-se com 2 *( log2 14) +1 = 2*3 + 1 = 7 bits.
• O primeiro ( log2 x) usa-se para guardar uma representação de
base 1 de inteiros usando apenas o dígito 1. Depois um stop bit
de zero. O ( log2 x) seguinte usa-se para representar a
diferença x – 2 ^ ( log2 x) .
Compressão de Índices
Variable Length Index Compression
• Ex.: 14: ( log2 14) = 3. Na representação de base 1 = 111 (três
uns para o 3)
• Acrescentamos um 0 (stop bit).
• 14 – 2^3 = 14 – 8 = 6 em binário 110.
• Então representamos 14 por 1110110
• Para guardarmos o nosso exemplo de há pouco:
180, 63, 4, 2 e 1
usávamos apenas 35 bits.
Outras técnicas para ganhar
eficiência
• Pesquisas demonstram que atrasar o update do índice na
altura da introdução de documentos no corpus melhora
consideravelmente a eficiência sem degradar de forma notória
a eficácia do sistema de IR.
(Frieder, Grossman, Chowdury e Frieder - Efficiency
Considerations for Scalable Information Retrieval Servers)
• Uma vez que os utilizadores de sistemas de IR não toleram
respostas demoradas e a pesquisa em bases de dados
gigantescas requer sempre vastos recursos computacionais, o
processamento em paralelo torna-se inevitável.
Suffix Trees e Suffix Arrays
• Consideram o texto como uma string longa
• Cada posição no texto é considerado como um sufixo de
texto
• Sufixo é a string que vai desde a posição inicial do sufixo
até ao fim do texto
• Cada sufixo é identificado pela sua posição
Suffix Tree
• Uma árvore de sufixos T para uma palavra t=t1...tm é uma
árvore com raiz com exactamente m folhas numeradas 1 a
m
• Cada nó interno da árvore com excepção da raiz tem pelo
menos 2 ramos e cada ramo é rotulado com uma
subpalavra de t
• Se dois ramos partem do mesmo nó de T, então os seus
rótulos diferem pelo menos no primeiro caractere
Suffix Tree – Exercício
1 6 9 11 17 19 24 28
33
40 46 50 55 60
• This is a text. A text has many words. Words are made from letters.
•
•
•
•
•
•
•
text . A text has many words. Words are made from letters.
text has many words. Words are made from letters.
many words. Words are made from letters.
words. Words are made from letters.
Words are made from letters.
made from letters.
letters.
Suffix Trie
Exemplo de Construção
GOOGOL$
1234567
Suffix Tree
Exemplo de Construção
Suffix Tree
• Custo computacional de construção elevado
• Ocupam ainda mais espaço que o próprio texto
• Não são práticas para textos grandes
• Ao contrário dos indices invertidos guarda a sequência das
palavras
• Ideal para querys complicadas
• Pesquisa facilitada
Suffix Tree
Pesquisas
• Pesquisa é feita a partir da raíz da árvore, e percorrendo os
nodos da árvore conforme a query
• Se chegarmos a um ponto onde a query foi satisfeita, então
devolvemos todos os resultados
• Se não por outro lado chegarmos a um ponto onde não
podemos descer mais na árvore e a query não foi satisfeita,
a pesquisa termina
Suffix Tree
Pesquisas
• Query = GO
– Resultdo = GOOGOL$,GOL$
• Query = GOLO
– Resultdo = null
Suffix Array
• Mesmas funcionalidades do suffix trees, mas requerem
muito menos espaço
• Array com ponteiros para os sufixos de texto
• Possibilitam buscas binárias
• Pesquisas são feitas em disco
• Perde-se funcionalidade, mas ganha-se espaço
Suffix Array - Exemplo
1 6 9 11 17 19 24 28
33
40 46 50 55 60
• This is a text. A text has many words. Words are made from letters.
60 50 28 19 11 40 33
Suffix Array
Pesquisa Binária
String = mississippi
i
11
L
ippi
8
5
issippi
Query = isse
2
ississippi
1
mississippi
10
pi
M
9
ppi
7
sippi
sisippi
4
ssippi
6
ssissippi
3
R
Exemplos
• http://www.beluga.ch/code/applets/huffman/
• http://w3.ualg.pt/~hshah/algoritmos/aula17/aula17.htm
Referências
(1) Efficiency Considerations for Scalable Information Retrieval Servers
Ophir Frieder, David A. Grossman, Abdur Chowdhury and Gideon Frieder
em http://jodi.tamu.edu/Articles/v01/i05/Frieder/
(2) On the Mapping of Index Compression Techniques on CSR
Information Retrievall
Sterling Stuart Stein e Nazli Goharian
em http://lingcog.iit.edu/~scubed/paper.pdf
(3)
(4)
http://articulos.conclase.net/compresion/huffman.html
Modern Information Retrieval
Ricardo Baeza-Yates, Berthier Ribeiro-Neto
Download

Transmission And Storage