Introduction to Information Retrieval
Introduction to
Information Retrieval
CS276: Information Retrieval and Web Search
Christopher Manning and Prabhakar Raghavan
Lecture 5: Index Compression
Introduction to Information Retrieval
Ch. 5
Today
 Estatísticas de coleção em maiores detalhes (com
RCV1)
 Quão grandes serão o dicionário e os documentos
retornados (postings - docID)?
 Compressão de dicionário
 Compressão da lista de ocorrência
Introduction to Information Retrieval
Ch. 5
Por que compressão(em geral)?
 Usa menos espaço em disco
 Economiza um pouco de dinheiro
 Mantém mais coisas na memória
 Aumenta a velocidade
 Aumenta a velocidade da transferência de dados do
disco para a memória
 [ler dado compactado | decompactar] é mais rápido que
[ler dado descompactado]
 Premissa: Algorítimos de descompressão são rápidos
 Verdade para os algorítmos de descompressão que usamos
Introduction to Information Retrieval
Ch. 5
Por que compressão para índices
invertidos
 Dicionário
 Torna-lo pequeno o suficiente para ser mantido na memória principal
 Torna-lo tão pequeno que você pode manter algumas listas de
ocorrencia na memória principal também
 Arquivo(s) da lista de ocorrência (posting)
 Reduz o espaço em disco necessário
 Reduz o tempo necessário para ler a lista de posting do disco
 Grande sistemas de busca mantém uma parte significante dos
postings na memória
 Compressão permite armazenar mais na memória
 Nós vamos analisar varios esquemas de compressão
específico para RI
Sec. 5.1
Introduction to Information Retrieval
Relembrando Reuters RCV1





símbolo
N
L
M
estatística
documentos
# médio tokens por doc
termos (= palavras dig.)
# médio bytes por token
valor
800.000
200
~400.000
6
(incl. espaços/pontuação)

# médio bytes por token
4.5
(sem espaços/pontuação)


# médio bytes por termo
7.5
postings não posicionais 100,000,000
Sec. 5.1
Introduction to Information Retrieval
Parâmetros de índice vs. o que nós
indexamos (detalhes IIR Tabela 5.1, p.80)
Tamanho de
tipos de
palavras(termos)
postings não
posicionais
postings posicionais
dicionário
índice não posicional
índice posicional
Tamanho ∆
(K)
%
Tamanho
(K)
Tamanho
(K)
∆% cumul
%
cumul
%
109,971
∆
%
cumul
%
Não filtrado
484
197,879
Sem números
474
-2
-2
100,680
-8
-8
179,158
-9
-9
Case folding
392 -17
-19
96,969
-3
-12
179,158
0
-9
30 stopwords
391
-0
-19
83,390 -14
-24
121,858 -31
-38
150 stopwords
391
-0
-19
67,002 -30
-39
94,517 -47
-52
stemming
322 -17
-33
63,812
-42
94,517
-52
-4
0
Introduction to Information Retrieval
Sec. 5.1
Lossless vs. lossy compression
 Compressão sem perda: Toda a informação é
preservada.
 Mais usado em RI.
 Compressão com perda: Descarta alguma informação
 Muitos dos passos de pré-processamento podem ser
vistos como lossy compression: case folding, stop
words, stemming, eliminação de números.
Introduction to Information Retrieval
Sec. 5.1
Vocabulario vs. tamanho da coleção
 Quão grande é o vocabulário de termos?
 Ou seja, quantas palavras distintas existem?
 Podemos assumir um limite superior?
 Não exatamente: Ao menos 7020 = 1037 palavras diferentes
de tamanho 20
 Na prática, o vocabulário se mantém em crescimento
junto com o tamanho da coleção
 Especiamente com o Unicode 
Introduction to Information Retrieval
Sec. 5.1
Vocabulario vs. tamanho da coleção
 Lei de Heaps: M = kTb
 M é o tamanhdo do vocabulario, T é o número de
tokens na coleção
 Valores típicos: 30 ≤ k ≤ 100 e b ≈ 0.5
 Em um gráfico log-log do tamanho do vocabulario M
vs. T, a Lei de Heaps prediz uma linha com inclinação
em torno de ½
 É a relação mais simples possível entre os dois em um
espaço log-log
Sec. 5.1
Introduction to Information Retrieval
Lei de Heaps
Para RCV1, a linha pontilhada
log10M = 0.49 log10T + 1.64 é o
melhor ajuste dos mínimos
quadrados
Ainda, M = 101.64T0.49 então k =
101.64 ≈ 44 e b = 0.49.
Para os primeiros 1.000.020
tokens, a lei prevê 38.323
termos; e na verdade, 38.365
termos.
Fig 5.1 p81
Introduction to Information Retrieval
Sec. 5.1
Lei de Zipf
 A Lei de Heaps nos dá o tamanho do vocabulário em
coleções.
 Nós também estudaremos a frequência relativa dos termos.
 Na linguagem natural, existem muitos termos frequentes, e
muitos termos raros.
 Lei de Zipf: O i-ésimo termo mais frequente tem uma
frequencia proporcional a 1/i .
 cfi ∝ 1/i = K/i onde K é uma constante de normalização
 cfi é a frequência na coleção: o número de ocorrências do
termo ti na coleção.
Introduction to Information Retrieval
Sec. 5.1
Consequências de Zipf
 Se o termo mais frequente (the) ocorre cf1 vezes
 Então o segundo termo mais frequente (of) ocorre cf1/2
vezes
 O terceiro termo mais frequente (and) ocorre cf1/3 vezes …
 Equivalente: cfi = K/i onde K é o fator de
normalização, então
 log cfi = log K - log i
 Relação linear entre log cfi e log i
Introduction to Information Retrieval
Ch. 5
Compressão
 Agora, vamos considerar a compressão do
espaço para o dicionário e os postings
 Índice Básico Booleano somente
 Nenhum estudo dos índices posicionais, etc.
 Vamos considerar esquemas de compressão
Introduction to Information Retrieval
COMPRESSÃO DE DICIONÁRIO
Sec. 5.2
Introduction to Information Retrieval
Sec. 5.2
Porque comprimir dicionário?
 A busca começa com o dicionário
 Nós queremos mantê-lo na memória
 Competição do uso da memória com outras
aplicações
 Dispositivos Embarcados/móveis possuem pouca
memória
 Mesmo se o dicionário não estiver na memória,
precisamos que seja pequeno para um tempo de
procura inicial mais rápido
 Então, comprimir o dicionário é importante
Introduction to Information Retrieval
Armazenamento do Dicionário –
primeira redução
 Array de entradas de largura-fixa
 ~400,000 termos; 28 bytes/termo = 11.2 MB.
Estrutura de busca
no Dicionário
Terms
Freq.
a
656,265
aachen
65
….
….
zulu
221
20 bytes
Postings ptr.
4 bytes cada
Sec. 5.2
Introduction to Information Retrieval
Sec. 5.2
Termos de largura-fixa é um desperdício
 Muitos dos bytes na coluna Termo são
desperdiçados – nós alocamos 20 bytes para um
termo de 1 letra.
 E também não podemos tratar supercalifragilisticexpialidoso ou
hidroclorofluorocarbono.
 Média de escrita em Inglês ~4.5 caracteres/palavra.
 Média do tamanho da palavra em Inglês: ~8
caracteres
 Como usamos ~8 caracteres por termo do dicionário?
 Palavras curtas dominam a contagem de token mas
não são contados na média.
Sec. 5.2
Introduction to Information Retrieval
Comprimindo a lista de termos:
Dicionário-como-uma-String
O dicionário é armazenado como uma (longa) string de
characteres:



Ponteiro para a próxima palavra indica o fim da palavra corrente
Espera-se ganhar mais de 60% de espaço no dicionário.
….systilesyzygeticsyzygialsyzygyszaibelyiteszczecinszomo….
Freq.
33
Postings ptr. Term ptr.
Tamanho total da string =
400K x 8B = 3.2MB
29
44
126
Ponteiros determinam
3.2M posições:
log23.2M = 22bits = 3bytes
Introduction to Information Retrieval
Sec. 5.2
Tamanho para dicionários como uma a string
 4 bytes por termo para Frequência.
 Agora média 11
 4 bytes por termo para ponteiro para  bytes/termo,
 não 20.
Postings.
 3 bytes por ponteiro do termo
 Média de 8 bytes por termo
 400K termos x 19  7.6 MB (contra 11.2MB para
largura-fixa)
Sec. 5.2
Introduction to Information Retrieval
Blocking
 Armazena ponteiros para todo késimo string do
termo.
 Exemplo abaixo: k=4.
 Precisa armazenar o tamanho do termo (1 byte
extra)
….7systile9syzygetic8syzygial6syzygy11szaibelyite8szczecin9szomo….
Freq.
Postings ptr. Term ptr.
33
29
44
126
7
 Libera 9 bytes
 em 3
 ponteiros.
Perde 4 bytes para
tamanho de termo.
Introduction to Information Retrieval
Sec. 5.2
Net
 Exemplo para tamanho do bloco k = 4
 Onde nós usamos 3 bytes/ponteiro sem blocking
 3 x 4 = 12 bytes,
Agora nós usamos 3 + 4 = 7 bytes.
Liberado outros ~0.5MB. Isto reduz o tamanho do
dicionário de 7.6 MB para 7.1 MB.
Podemos liberar mais com um k maior.
Por que não usar um k maior?
Introduction to Information Retrieval
Procura pelo Dicionário sem blocking
 Assumindo cada termo
do dicionário igual como
uma consulta (não
exatamente assim na
prática!), a média do
número de comparações
= (1+2∙2+4∙3+4)/8 ~2.6
Sec. 5.2
Introduction to Information Retrieval
Sec. 5.2
Procura pelo Dicionário com blocking
 Busca binária reduz em blocos de 4 termos;
 Então a busca linear busca através dos termos no
bloco.
 Blocos de 4 (árvore binária), média =
(1+2∙2+2∙3+2∙4+5)/8 = 3 comparações
Sec. 5.2
Introduction to Information Retrieval
Front coding
 Front-coding:
 Palavras comumente possuem um longo prefixo em
comum – armazena apenas a diferença
 (para o último k-1 em um bloco de tamanho k)
8automata8automate9automatic10automation
8automat*a1e2ic3ion
Codifica automat
Conteúdo extra apósautomat.
Começa a se assemelhar à compressão geral de string.
Introduction to Information Retrieval
Sec. 5.2
RCV1 sumário de compressão de
dicionário
Tecnica
Largura-fixa
Tamanho
em MB
11.2
Dicionário-como-string com ponteiros para cada
termo
7.6
Também, blocking k = 4
7.1
Também, Blocking + front coding
5.9
Introduction to Information Retrieval
COMPRESSÃO DE POSTINGS
Sec. 5.3
Introduction to Information Retrieval
Sec. 5.3
Compressão de Postings
 Os arquivos de postings são muito maiores que o
dicionário, com fator de pelo menos 10.
 Objetivo chave:armazenar cada posting de forma
compacta.
 Trataremos um posting como um docID.
 Para Reuters (800,000 documentos), nós usaremos
32 bits por docID quando usado inteiros de 4 bytes.
 Alternativamente, podemos usar log2 800,000 ≈ 20
bits por docID.
 Nosso objetivo: usar muito menos que 20 bits por
docID.
Introduction to Information Retrieval
Sec. 5.3
Postings: duas forças conflitando
 Um termo como arachnocentric ocorre em talvez um
documento dentre um milhão – desejamos
armazenar este posting usando log2 1M ~ 20 bits.
 Um termo como the ocorre em praticamente todo
documento, então 20 bits/posting é muito caro.
 Prefira 0/1 vetor de bitmap neste caso
Introduction to Information Retrieval
Sec. 5.3
Entrada de arquivo Postings
 Nós armazenamos a lista dos documentos contendo
em ordem incremental de docID.
 computer: 33,47,154,159,202 …
 Consequência: é suficiente para armazenar gaps.
 33,14,107,5,43 …
 Esperança: maioria dos gaps é possível
codificar/armazenar em pelo menos 20 bits.
Introduction to Information Retrieval
Three postings entries
Sec. 5.3
Introduction to Information Retrieval
Sec. 5.3
Tamanho da Variável codificada
 Objetivo:
 Para arachnocentric, usaremos uma entrada de ~20
bits/gap
 Para the, usaremos uma entrada de ~1 bit/gap.
 Se o gap médio para um termo é G, nós precisamos
usar uma entrada de ~log2G bits/gap.
 Principal Desafio: codificar todo inteiro (gap) com o
mínimo de bits necessários.
 Isto requer um tamanho variável de codificação
 Códigos de tamanho variável para alcançar isto
usando pequenos códigos para números pequenos.
Introduction to Information Retrieval
Sec. 5.3
Código de Byte Variável - Variable Byte
(VB)
 Para um gap de valor G, nós queremos usar os mínimos bytes
necessários para armazenar log2 G bits
 Começa com um byte para armazenar G e com 1 bit dedicado
para ser o bit de continuação.
 Se o G ≤127, G será codificado em binário e armazenado nos 7
bits disponíveis, e o c=1
 Caso contrário codifica os bits menos significativos de G em 7
bits e então usa bytes adicionais para codificar os bits mais
significativos utilizando o mesmo algoritmo.
 No fim coloca 1 no bit de continuação do último e nos outros
bytes c = 0.
Sec. 5.3
Introduction to Information Retrieval
Exemplo
docIDs
824
gaps
VB code
00000110
10111000
829
215406
5
214577
10000101
00001101
00001100
10110001
Postings armazenados como concatenação de bytes
000001101011100010000101000011010000110010110001
Propriedade Chave: Postings em codificação VB
tem decodificação de prefixo únicos.
Para um pequeno gap (5), VB
usa um byte inteiro.
Introduction to Information Retrieval
Sec. 5.3
Introduction to Information Retrieval
Codificação do gap 214.577
 n0 = 214.577 bytestream = <>
 bytestream1 = <49>
 n1 = 1.676
 bytestream2 = <12, 49>
 n2 = 13;
 bytestream3 = <13, 12, 49>
 bytestream4 = <13, 12, 177>
 000011010000110010110001
35
Introduction to Information Retrieval
Sec. 5.3
Introduction to Information Retrieval
Decodificação
000011010000110010110001
 Numbers0 = <>
n0 = 0
 for i de 1 a 3
 1:
n1 = 13
 2:
n2= 128 x 13 + 12 = 1676
 3:
n3=128 x 1676 + (177 - 128) -> 214.577
 numbers1 = <214.577>
37
Introduction to Information Retrieval
Sec. 5.3
Outra codificação de unidade variável
 Ao invés, podemos também usar diferentes
comprimentos de unidades: 32 bits (words), 16 bits,
4 bits (nibbles).
 Comprimentos variáveis de bytes desperdiçam
espaço se temos pequenos gaps – nibbles fazem
melhor nestes casos.
 Códigos de byte variável:
 Usado por muitos sistemas comercial/pesquisa
 Existe um trabalho recente em codificação de wordaligned que agrupa um número variável de gaps em
uma única palavra
Introduction to Information Retrieval
Código Unário
 Representa n como n 1s com um final 0.
 Código Unário para 3 é 1110.
 Código Unário para 40 é
11111111111111111111111111111111111111110 .
 Código Unário para 80 é:
11111111111111111111111111111111111111111111
1111111111111111111111111111111111110
 Isto não parece promissor, mas…
39
Introduction to Information Retrieval
Sec. 5.3
Código Gamma
 Podemos comprimir melhor com código de bit-level
 O código Gamma é o mais conhecidos destes.
 Representamos um gap G como o par length e offset
 Offset é o G em binário, com o primeiro bit mais
significativo excluído
 Por exemplo 13 → 1101 → 101
 length é o tamanho do offset
 Para 13 (offset 101), este é o 3.
 Codificamos length com código unário: 1110.
 Código Gamma de 13 é a concatenação de length e
offset: 1110101
Sec. 5.3
Introduction to Information Retrieval
Exemplos de Código Gamma
número
length
g-code
offset
0
none
1
0
0
2
10
0
10,0
3
10
1
10,1
4
110
00
110,00
9
1110
001
1110,001
13
1110
101
1110,101
24
11110
1000
11110,1000
511
111111110
11111111
111111110,11111111
1025
11111111110
0000000001
11111111110,0000000001
Introduction to Information Retrieval
Gamma code properties
 Todo código gamma tem um número ímpar de
números de bits
 Código Gamma possui unicidade de prefixo
decodificado, como o VB
 Código Gamma pode ser usado por qualquer
distribuição
 Código Gamma é livre de parâmetro
Sec. 5.3
Introduction to Information Retrieval
Sec. 5.3
Gamma é raramente usado na prática
 Máquinas possuem limites de palavra – 8, 16, 32, 64
bits
 Operações que passam dos limites da palavras são mais
lentos
 Compactar e manipular a granularidade de bits pode
ser lento
 Codificação de byte variável é potencialmente mais
eficiente
 Graças a eficiência, byte variável é conceitualmente
mais simples com apenas um pouco de custo de
espaço adicional.
Introduction to Information Retrieval
Sec. 5.3
RCV1 compression
Estrutura de Dados
Tamanho
em MB
dicionário, largura-fixa
1,2
Dicionário, apontador de termo dentro da string
7,6
com blocking, k = 4
7,1
com blocking & front coding
5,9
Coleção (text, xml markup etc)
Coleção (text)
Matriz de incidência de Term-doc
3.600,0
960,0
40.000,0
postings, descompactado (palavras de 32 bits)
400,0
postings, descompactado (20 bits)
250,0
postings, codificação de byte variável
116,0
postings, Codificação gamma
101,0
Introduction to Information Retrieval
Sec. 5.3
Resumo da compressão de índice
 Nós podemos agora criar um índice para recuperação
booleana de alta eficiência que utiliza eficientemente
o espaço
 Apenas 4% do tamanho total da coleção
 Apenas 10-15% do tamanho total do texto na
coleção
 Entretanto, nós ignoramos as informações
posicionais
 Ainda assim, espaços poupados são menos para
índices usados na prática
 Mas as técnicas são substancialmente as mesmas
Introduction to Information Retrieval
Ch. 5
Resources for today’s lecture
 IIR 5
 MG 3.3, 3.4.
 F. Scholer, H.E. Williams and J. Zobel. 2002.
Compression of Inverted Indexes For Fast Query
Evaluation. Proc. ACM-SIGIR 2002.
 Variable byte codes
 V. N. Anh and A. Moffat. 2005. Inverted Index
Compression Using Word-Aligned Binary Codes.
Information Retrieval 8: 151–166.
 Word aligned codes
Download

lecture5-compression..