SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
Centro de Informática – Universidade Federal da Paraíba




              Ordenação e Recuperação de Dados
               Aula 5: Compressão de Índices




                Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br
                                                                       1
Agenda
❶   Revisão

❷   Compressão
❸   Compressão de dicionários
❺   Compressão de postings




                                2
Agenda
❶   Revisão

❷   Compressão
❸   Compressão de dicionários
❺   Compressão de postings




                                3
Índices baseados em ordenação de blocos




                                          4
Indexação em memória com passo único

  Abreviação: SPIMI
  Ideia chave 1: Gerar dicionários separados para cada bloco –
   desnecessário manter uma mapeamento de termo-termoID
   entre blocos.
  Ideia chave 2: Não ordene. Acumule os postings nas listas de
   postings na medidade em que ocorrem.
  Com essas ideias é possível gerar um índice invertido
   completo para cada bloco.
  Estes índices separados podem depois ser combinados para
   gerar um índice único.

                                                                  5
SPIMI-Invert




               6
MapReduce para construção de índices




                                       7
Indexação dinâmica: abordagem mais
simples


  Manter um grande índice principal no disco
  Novos documentos utilizam pequenos índices auxiliares em
   memória.
  Pesquise em ambos, combine os resultados
  Combine periodicamente os índices auxiliares com o índice
   principal




                                                               8
Aula de hoje




  Motivação para uso de compressão em sistemas de
   recuperação de informação
  Como comprimir o dicionário em um índice invertido?
  Como comprimir as listas de postings em um índice invertido?



                                                             9
Agenda
❶   Revisão

❷   Compressão
❸   Compressão de dicionários
❺   Compressão de postings




                                10
Por que realizar compressão? (em geral)

   Usar menos espaço em disco (economizar dinheiro)
   Manter mais informação na memória (aumento de
    velocidade)
   Aumentar a velocidade na transferência de dados do disco
    para a memória (novamente, aumento de velocidade)
      [ler dados comprimidos e depois descomprimi-los em memória
       é mais rápido que ler os dados não comprimidos
   Premissa: Algoritmos de descompressão são rápidos.
   Isto é verdade para os algoritmos que estudaremos.


                                                               11
Por que realizar compressão em sistemas de
recuperação da informação ?
  Primeiro, consideraremos o espaço utilizado para o dicionário
     Motivação principal: tornar o dicionário pequeno o suficiente
      para mantê-lo em memória principal
  Em seguida, o arquivo com as listas de postings
     Motivação: reduzir o espaço necessário para armazêna-lo e
      diminuir o tempo necessário para fazer a leitura do disco
     Nota: Grandes mecanismos de busca mantém uma parte
      significante de suas listas de postings em memória principal
  Veremos vários esquemas de compressão para dicionários e
   postings.


                                                                      12
Compressão com e sem perdas


  Compressão com perdas: Descarta parte da informação
     mp3, por exemplo
  Várias das etapas de pré-processamento podem ser vistas
   como compressão com perdas:
     Tratamento de maiúsculas/minúsculas, palavras de separação,
      números, datas
  Compressão sem perdas: Toda a informação é preservada
     zip, por exemplo
     É a forma mais utilizada para compressão de índices
                                                                13
Agenda
❶   Revisão

❷   Compressão
❸   Compressão de dicionários
❺   Compressão de postings




                                14
Coleção modelo

Símbolo   Estatística                                        valor
N         Documentos                                         800.000
L         # médio de tokens por documento                    200
M         Termos                                             400.000
          # médio de bytes por token (incl. espaços/punt.)   6
          # médio de bytes por token (sem espaços/punt.)     4,5
          # médio de bytes por termo                         7,5
T         postings não posicionais                           100.000.000




                                                                     15
Compressão de dicionários


  O dicionário é pequeno em comparação ao tamanho das
   listas de postsings.
  Mas queremos mantê-lo na memória principal.
  Questões importantes: competição com outras
   aplicações, telefones celulares, computadores embarcados
  Portanto, comprimir o dicionário é importante.




                                                              16
Relembrando: O Dicionário como um array de
estruturas de tamanho fixo




 Espaco necessário: 20 bytes 4 bytes      4 bytes
 Para Reuters: (20+4+4)*400,000 = 11,2 MB


                                                    17
Estruturas de tamanho fixo não são boa idéia

   A maioria dos bytes na coluna de termos são
    desperdiçados.
      Alocamos 20 bytes mesmo para termos de tamanho 1.
   Não podemos lidar com termos como
    HYDROCHLOROFLUOROCARBONS e
    SUPERCALIFRAGILISTICEXPIALIDOCIOUS
   Tamanho médio de um termo em inglês: 8 caracteres
   Como podemos utilizar em média 8 caracteres por termo?


                                                             18
Dicionário como uma string única




                                   19
Espaço para o dicionário como uma string

  4 bytes por termo para frequência
  4 bytes por termo para o apontador da lista de postings
  8 bytes (média) para cada termo na string
  3 bytes por apontador para a string (precisamos de log2 8 ·
   400000 < 24 bits para endereçar 8 · 400,000 posições)
  Espaço: 400.000 × (4 + 4 + 8 + 3) = 7,6MB (comparados aos
   11,2 MB para o array de estruturas de tamanho fixo)




                                                                 20
Dicionário como um string de blocos




                                      21
Espaço para o dicionário como uma string de
blocos

  Tamanho do bloco de k = 4
  Onde usávamos 4 × 3 bytes para apontadores de termos
   sem bloco . . .
  . . . usamos agora 3 bytes para um ponteiro para o bloco e
   mais 4 bytes para indicar o tamanho de cada termo no
   bloco.
  Economizamos 12 − (3 + 4) = 5 bytes por bloco.
  Economia total: 400,000/4 ∗ 5 = 0,5 MB
  Isto reduz o dicionário de 7,6 MB para 7,1 MB.

                                                                22
Localização de termo sem bloco




                                 23
Localização de termo com bloco (mais lenta)




                                              24
Codificação de prefixo


          Um bloco na string com blocos (k = 4) . . .
  8 a u t o m a t a 8 a u t o m a t e 9 a u t o m a t i c 10 a u t o m a t i o n
                                ⇓
          . . . reduzida com compressão de prefixo.
               8automat∗a1⋄e2⋄ic3⋄ion




                                                                              25
Compressão de dicionário para a Reuters -
Sumário


 Estrutura de dados                         Tamanho em MB
 dicionário, tamanho fixo                            11,2
 dicionário, string única com apontadores             7,6
 “, com blocos, k = 4                                 7,1
 ” e codificação de prefixo                           5,9




                                                            26
Agenda
❶   Revisão

❷   Compressão
❸   Compressão de dicionários
❺   Compressão de postings




                                27
Compressão de postings

  O arquivo com as listas de postings é pelo menos 10 vezes
   maior que o dicionário.
  Consideramos um posting como sendo um docID.
  Para a coleção da Reuters (800,000 documentos), devemos
   utilizar 32 bits por docID (inteiros de 4 bytes).
  Alternativamente, poderíamos utilizar log2 800,000 ≈ 19.6 <
   20 bits por docID.
  Nosso objetivo: utilizar muito menos que 20 bits por docID.



                                                                 28
Ideia chave: Armazenar diferenças ao invés
dos docIDs

 As listas de postings são ordenadas por docID.
 Exemplo de lista de postings: COMPUTER: 283154, 283159,
  283202, . . .
 Basta armazenar as diferenças: 283159-283154=5, 283202-
  283159=43
 Exemplo de lista de postings com diferenças : COMPUTER:
  283154, 5, 43, . . .
 As diferenças para termos frequentes são pequenas.
 Portanto, podemos utilizar menos que 20 bits para codificar as
  diferenças.

                                                               29
Codificando as diferenças




                            30
Codifição de tamanho variável

   Objetivo:
      Para ARACHNOCENTRIC e outros termos pouco frequentes,
       teremos que utilizar cerca de 20 bits por diferença (=
       posting).
      Para THE e outros temos muito frequentes, utilizaremos
       apenas uns poucos bits por diferença (= posting).
   Para poder implementar esse esquema, precisamos criar
    alguma forma de codificação de tamanho variável
   Codificação de tamanho variável utiliza poucos bits para
    diferenças pequenas e muitos bits para diferenças
    maiores.
                                                                31
Código de tamanho variável
   Usado em muitos sistemas comerciais
   Dedicar um 1 bit para ser o bit de continuação c.
   Se o valor da diferença couber em 7 bits, codificar dentro
    dos 7 bits disponíveis e fazer c = 1.
   Senão: codificar os 7 bits mais significativos e utilizar bytes
    adicionais para codificar o restante do número utilizando o
    mesmo algoritmo.
   No final, o bit de continuação do último byte será 1 (c = 1)
    e dos outros bytes será 0 (c = 0).



                                                                      32
Exemplos de códigos de comprimento
variável

docIDs    824                 829        215406
gaps                          5          214577
VB code   00000110 10111000   10000101   00001101 00001100 10110001




                                                                 33
Compressão da coleção da Reuters
   Estrutura de dados                          Tamanho em MB
   dicionário, estrutura fixa                            11.2
   dictionário, ponteiroes para string                    7.6
   ∼, com blocos, k = 4                                   7.1
   ∼, com blocos & codificação de prefixo                 5.9
   coleção (texto, xml etc)                           3600.0
   coleção (texto)                                      960.0
   matriz de incidência T/D                          40,000.0
   postings, sem compressão (32-bits)                   400.0
   postings, sem compressão (20 bits)                   250.0
   postings, codificação de tamanho variável            116.0



                                                                34
Sumário

   Podemos agora criar um índice muito eficiente em relação
    ao espaço para consultas booleanas.
   O índice terá entre 10 e 15% do tamanho do texto na
    coleção.
   No entanto, ignoramos frequência e informação posicional.
   Portanto, na prática a economia de espaço é menor.




                                                                35

Mais conteúdo relacionado

Destaque

Apache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos ResultadosApache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos ResultadosRafael Domingues
 
Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009Plataformatec
 
Classificação e Ponderação
Classificação e PonderaçãoClassificação e Ponderação
Classificação e PonderaçãoAlexandre Duarte
 
Classficação de Texto e Naive Bayes
Classficação de Texto e Naive BayesClassficação de Texto e Naive Bayes
Classficação de Texto e Naive BayesAlexandre Duarte
 
Modelo de Espaço Vetorial
Modelo de Espaço VetorialModelo de Espaço Vetorial
Modelo de Espaço VetorialAlexandre Duarte
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorialTuane Paixão
 
Sistemas de recomendação
Sistemas de recomendaçãoSistemas de recomendação
Sistemas de recomendaçãoAnderson Dantas
 
Aula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de RecuperaçãoAula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de RecuperaçãoNilton Heck
 

Destaque (10)

Apache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos ResultadosApache Lucene - Relevância dos Resultados
Apache Lucene - Relevância dos Resultados
 
Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009Classificação de textos - Dev in Sampa - 28nov2009
Classificação de textos - Dev in Sampa - 28nov2009
 
Classificação e Ponderação
Classificação e PonderaçãoClassificação e Ponderação
Classificação e Ponderação
 
Cálculo de Score
Cálculo de ScoreCálculo de Score
Cálculo de Score
 
Classficação de Texto e Naive Bayes
Classficação de Texto e Naive BayesClassficação de Texto e Naive Bayes
Classficação de Texto e Naive Bayes
 
Modelo de Espaço Vetorial
Modelo de Espaço VetorialModelo de Espaço Vetorial
Modelo de Espaço Vetorial
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorial
 
Sistemas de recomendação
Sistemas de recomendaçãoSistemas de recomendação
Sistemas de recomendação
 
Aula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de RecuperaçãoAula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
Aula 02 - Recuperação da Informação / Modelos de Sistemas de Recuperação
 
Projeto de Experimentos
Projeto de ExperimentosProjeto de Experimentos
Projeto de Experimentos
 

Semelhante a Centro de Informática - UFPB: Compressão de Índices

Livro 1 conceitos básicos
Livro 1 conceitos básicosLivro 1 conceitos básicos
Livro 1 conceitos básicosJ M
 
Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Pedro Augusto
 
Compactação e Compressão de Dados
Compactação e Compressão de DadosCompactação e Compressão de Dados
Compactação e Compressão de DadosDaniel Rossi
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...Fabrício Catae
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdfSecont
 
Schema designer MongoDB
Schema designer MongoDBSchema designer MongoDB
Schema designer MongoDBMarcus Costa
 
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxmodulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxAnaAlmeida462833
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdfssuser382e50
 
24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration StrategiesMurilo Miranda
 
Bancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosBancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosLuciano Ramalho
 
Vocabulário de termos e listas de postings
Vocabulário de termos e listas de postingsVocabulário de termos e listas de postings
Vocabulário de termos e listas de postingsAlexandre Duarte
 

Semelhante a Centro de Informática - UFPB: Compressão de Índices (20)

Introdução ao no sql e mongodb
Introdução ao no sql e mongodbIntrodução ao no sql e mongodb
Introdução ao no sql e mongodb
 
Livro 1 conceitos básicos
Livro 1 conceitos básicosLivro 1 conceitos básicos
Livro 1 conceitos básicos
 
Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1
 
Compactação e Compressão de Dados
Compactação e Compressão de DadosCompactação e Compressão de Dados
Compactação e Compressão de Dados
 
Mais binários
Mais bináriosMais binários
Mais binários
 
Linguagens
LinguagensLinguagens
Linguagens
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
 
Informatica
InformaticaInformatica
Informatica
 
Informatica
InformaticaInformatica
Informatica
 
Introdução ao banco de dados
Introdução ao banco de dadosIntrodução ao banco de dados
Introdução ao banco de dados
 
Compressão de arquivos
Compressão de arquivosCompressão de arquivos
Compressão de arquivos
 
Automacao com Python.pdf
Automacao com Python.pdfAutomacao com Python.pdf
Automacao com Python.pdf
 
Schema designer MongoDB
Schema designer MongoDBSchema designer MongoDB
Schema designer MongoDB
 
No sql o_que_e_isso.key
No sql o_que_e_isso.keyNo sql o_que_e_isso.key
No sql o_que_e_isso.key
 
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docxmodulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
modulo-15-sql-criar-e-manipular-tabelas1-2-flipbook-pdf.docx
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdf
 
24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies
 
Bancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosBancos de Dados para Bibliotecarios
Bancos de Dados para Bibliotecarios
 
Vocabulário de termos e listas de postings
Vocabulário de termos e listas de postingsVocabulário de termos e listas de postings
Vocabulário de termos e listas de postings
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 

Mais de Alexandre Duarte

Táticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosTáticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosAlexandre Duarte
 
Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Alexandre Duarte
 
Escolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaEscolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaAlexandre Duarte
 
Ciência da Computação como Ciência
Ciência da Computação como CiênciaCiência da Computação como Ciência
Ciência da Computação como CiênciaAlexandre Duarte
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: IntroduçãoAlexandre Duarte
 
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerGráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerAlexandre Duarte
 
Panorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBPanorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBAlexandre Duarte
 
Sumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisSumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisAlexandre Duarte
 
Correlação e Classificação
Correlação e ClassificaçãoCorrelação e Classificação
Correlação e ClassificaçãoAlexandre Duarte
 
Sumarização Estatística 2D
Sumarização Estatística 2DSumarização Estatística 2D
Sumarização Estatística 2DAlexandre Duarte
 
Sumarização Estatística 1D
Sumarização Estatística 1DSumarização Estatística 1D
Sumarização Estatística 1DAlexandre Duarte
 
Preparação e Limpeza de Dados
Preparação e Limpeza de DadosPreparação e Limpeza de Dados
Preparação e Limpeza de DadosAlexandre Duarte
 
Introdução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosIntrodução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosAlexandre Duarte
 
Introdução ao Projeto de Surveys
Introdução ao Projeto de SurveysIntrodução ao Projeto de Surveys
Introdução ao Projeto de SurveysAlexandre Duarte
 
Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Alexandre Duarte
 
Introdução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de DadosIntrodução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de DadosAlexandre Duarte
 

Mais de Alexandre Duarte (20)

Táticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosTáticas para Projeto de Experimentos
Táticas para Projeto de Experimentos
 
Causalidade e Abdução
Causalidade e AbduçãoCausalidade e Abdução
Causalidade e Abdução
 
Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Fazer Ciência é Difícil!
Fazer Ciência é Difícil!
 
Atividades Científica
Atividades CientíficaAtividades Científica
Atividades Científica
 
Escolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaEscolhendo um Projeto de Pesquisa
Escolhendo um Projeto de Pesquisa
 
Ciência da Computação como Ciência
Ciência da Computação como CiênciaCiência da Computação como Ciência
Ciência da Computação como Ciência
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: Introdução
 
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerGráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
 
Panorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBPanorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPB
 
Agrupamento com K-Means
Agrupamento com K-MeansAgrupamento com K-Means
Agrupamento com K-Means
 
Sumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisSumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis Nominais
 
Correlação e Classificação
Correlação e ClassificaçãoCorrelação e Classificação
Correlação e Classificação
 
Sumarização Estatística 2D
Sumarização Estatística 2DSumarização Estatística 2D
Sumarização Estatística 2D
 
Sumarização Estatística 1D
Sumarização Estatística 1DSumarização Estatística 1D
Sumarização Estatística 1D
 
Transformação de Dados
Transformação de DadosTransformação de Dados
Transformação de Dados
 
Preparação e Limpeza de Dados
Preparação e Limpeza de DadosPreparação e Limpeza de Dados
Preparação e Limpeza de Dados
 
Introdução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosIntrodução ao Projeto de Experimentos
Introdução ao Projeto de Experimentos
 
Introdução ao Projeto de Surveys
Introdução ao Projeto de SurveysIntrodução ao Projeto de Surveys
Introdução ao Projeto de Surveys
 
Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01
 
Introdução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de DadosIntrodução à Analise de Dados - aula 3 - Agregação de Dados
Introdução à Analise de Dados - aula 3 - Agregação de Dados
 

Centro de Informática - UFPB: Compressão de Índices

  • 1. Centro de Informática – Universidade Federal da Paraíba Ordenação e Recuperação de Dados Aula 5: Compressão de Índices Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br 1
  • 2. Agenda ❶ Revisão ❷ Compressão ❸ Compressão de dicionários ❺ Compressão de postings 2
  • 3. Agenda ❶ Revisão ❷ Compressão ❸ Compressão de dicionários ❺ Compressão de postings 3
  • 4. Índices baseados em ordenação de blocos 4
  • 5. Indexação em memória com passo único  Abreviação: SPIMI  Ideia chave 1: Gerar dicionários separados para cada bloco – desnecessário manter uma mapeamento de termo-termoID entre blocos.  Ideia chave 2: Não ordene. Acumule os postings nas listas de postings na medidade em que ocorrem.  Com essas ideias é possível gerar um índice invertido completo para cada bloco.  Estes índices separados podem depois ser combinados para gerar um índice único. 5
  • 8. Indexação dinâmica: abordagem mais simples  Manter um grande índice principal no disco  Novos documentos utilizam pequenos índices auxiliares em memória.  Pesquise em ambos, combine os resultados  Combine periodicamente os índices auxiliares com o índice principal 8
  • 9. Aula de hoje  Motivação para uso de compressão em sistemas de recuperação de informação  Como comprimir o dicionário em um índice invertido?  Como comprimir as listas de postings em um índice invertido? 9
  • 10. Agenda ❶ Revisão ❷ Compressão ❸ Compressão de dicionários ❺ Compressão de postings 10
  • 11. Por que realizar compressão? (em geral)  Usar menos espaço em disco (economizar dinheiro)  Manter mais informação na memória (aumento de velocidade)  Aumentar a velocidade na transferência de dados do disco para a memória (novamente, aumento de velocidade)  [ler dados comprimidos e depois descomprimi-los em memória é mais rápido que ler os dados não comprimidos  Premissa: Algoritmos de descompressão são rápidos.  Isto é verdade para os algoritmos que estudaremos. 11
  • 12. Por que realizar compressão em sistemas de recuperação da informação ?  Primeiro, consideraremos o espaço utilizado para o dicionário  Motivação principal: tornar o dicionário pequeno o suficiente para mantê-lo em memória principal  Em seguida, o arquivo com as listas de postings  Motivação: reduzir o espaço necessário para armazêna-lo e diminuir o tempo necessário para fazer a leitura do disco  Nota: Grandes mecanismos de busca mantém uma parte significante de suas listas de postings em memória principal  Veremos vários esquemas de compressão para dicionários e postings. 12
  • 13. Compressão com e sem perdas  Compressão com perdas: Descarta parte da informação  mp3, por exemplo  Várias das etapas de pré-processamento podem ser vistas como compressão com perdas:  Tratamento de maiúsculas/minúsculas, palavras de separação, números, datas  Compressão sem perdas: Toda a informação é preservada  zip, por exemplo  É a forma mais utilizada para compressão de índices 13
  • 14. Agenda ❶ Revisão ❷ Compressão ❸ Compressão de dicionários ❺ Compressão de postings 14
  • 15. Coleção modelo Símbolo Estatística valor N Documentos 800.000 L # médio de tokens por documento 200 M Termos 400.000 # médio de bytes por token (incl. espaços/punt.) 6 # médio de bytes por token (sem espaços/punt.) 4,5 # médio de bytes por termo 7,5 T postings não posicionais 100.000.000 15
  • 16. Compressão de dicionários  O dicionário é pequeno em comparação ao tamanho das listas de postsings.  Mas queremos mantê-lo na memória principal.  Questões importantes: competição com outras aplicações, telefones celulares, computadores embarcados  Portanto, comprimir o dicionário é importante. 16
  • 17. Relembrando: O Dicionário como um array de estruturas de tamanho fixo Espaco necessário: 20 bytes 4 bytes 4 bytes Para Reuters: (20+4+4)*400,000 = 11,2 MB 17
  • 18. Estruturas de tamanho fixo não são boa idéia  A maioria dos bytes na coluna de termos são desperdiçados.  Alocamos 20 bytes mesmo para termos de tamanho 1.  Não podemos lidar com termos como HYDROCHLOROFLUOROCARBONS e SUPERCALIFRAGILISTICEXPIALIDOCIOUS  Tamanho médio de um termo em inglês: 8 caracteres  Como podemos utilizar em média 8 caracteres por termo? 18
  • 19. Dicionário como uma string única 19
  • 20. Espaço para o dicionário como uma string  4 bytes por termo para frequência  4 bytes por termo para o apontador da lista de postings  8 bytes (média) para cada termo na string  3 bytes por apontador para a string (precisamos de log2 8 · 400000 < 24 bits para endereçar 8 · 400,000 posições)  Espaço: 400.000 × (4 + 4 + 8 + 3) = 7,6MB (comparados aos 11,2 MB para o array de estruturas de tamanho fixo) 20
  • 21. Dicionário como um string de blocos 21
  • 22. Espaço para o dicionário como uma string de blocos  Tamanho do bloco de k = 4  Onde usávamos 4 × 3 bytes para apontadores de termos sem bloco . . .  . . . usamos agora 3 bytes para um ponteiro para o bloco e mais 4 bytes para indicar o tamanho de cada termo no bloco.  Economizamos 12 − (3 + 4) = 5 bytes por bloco.  Economia total: 400,000/4 ∗ 5 = 0,5 MB  Isto reduz o dicionário de 7,6 MB para 7,1 MB. 22
  • 23. Localização de termo sem bloco 23
  • 24. Localização de termo com bloco (mais lenta) 24
  • 25. Codificação de prefixo Um bloco na string com blocos (k = 4) . . . 8 a u t o m a t a 8 a u t o m a t e 9 a u t o m a t i c 10 a u t o m a t i o n ⇓ . . . reduzida com compressão de prefixo. 8automat∗a1⋄e2⋄ic3⋄ion 25
  • 26. Compressão de dicionário para a Reuters - Sumário Estrutura de dados Tamanho em MB dicionário, tamanho fixo 11,2 dicionário, string única com apontadores 7,6 “, com blocos, k = 4 7,1 ” e codificação de prefixo 5,9 26
  • 27. Agenda ❶ Revisão ❷ Compressão ❸ Compressão de dicionários ❺ Compressão de postings 27
  • 28. Compressão de postings  O arquivo com as listas de postings é pelo menos 10 vezes maior que o dicionário.  Consideramos um posting como sendo um docID.  Para a coleção da Reuters (800,000 documentos), devemos utilizar 32 bits por docID (inteiros de 4 bytes).  Alternativamente, poderíamos utilizar log2 800,000 ≈ 19.6 < 20 bits por docID.  Nosso objetivo: utilizar muito menos que 20 bits por docID. 28
  • 29. Ideia chave: Armazenar diferenças ao invés dos docIDs  As listas de postings são ordenadas por docID.  Exemplo de lista de postings: COMPUTER: 283154, 283159, 283202, . . .  Basta armazenar as diferenças: 283159-283154=5, 283202- 283159=43  Exemplo de lista de postings com diferenças : COMPUTER: 283154, 5, 43, . . .  As diferenças para termos frequentes são pequenas.  Portanto, podemos utilizar menos que 20 bits para codificar as diferenças. 29
  • 31. Codifição de tamanho variável  Objetivo:  Para ARACHNOCENTRIC e outros termos pouco frequentes, teremos que utilizar cerca de 20 bits por diferença (= posting).  Para THE e outros temos muito frequentes, utilizaremos apenas uns poucos bits por diferença (= posting).  Para poder implementar esse esquema, precisamos criar alguma forma de codificação de tamanho variável  Codificação de tamanho variável utiliza poucos bits para diferenças pequenas e muitos bits para diferenças maiores. 31
  • 32. Código de tamanho variável  Usado em muitos sistemas comerciais  Dedicar um 1 bit para ser o bit de continuação c.  Se o valor da diferença couber em 7 bits, codificar dentro dos 7 bits disponíveis e fazer c = 1.  Senão: codificar os 7 bits mais significativos e utilizar bytes adicionais para codificar o restante do número utilizando o mesmo algoritmo.  No final, o bit de continuação do último byte será 1 (c = 1) e dos outros bytes será 0 (c = 0). 32
  • 33. Exemplos de códigos de comprimento variável docIDs 824 829 215406 gaps 5 214577 VB code 00000110 10111000 10000101 00001101 00001100 10110001 33
  • 34. Compressão da coleção da Reuters Estrutura de dados Tamanho em MB dicionário, estrutura fixa 11.2 dictionário, ponteiroes para string 7.6 ∼, com blocos, k = 4 7.1 ∼, com blocos & codificação de prefixo 5.9 coleção (texto, xml etc) 3600.0 coleção (texto) 960.0 matriz de incidência T/D 40,000.0 postings, sem compressão (32-bits) 400.0 postings, sem compressão (20 bits) 250.0 postings, codificação de tamanho variável 116.0 34
  • 35. Sumário  Podemos agora criar um índice muito eficiente em relação ao espaço para consultas booleanas.  O índice terá entre 10 e 15% do tamanho do texto na coleção.  No entanto, ignoramos frequência e informação posicional.  Portanto, na prática a economia de espaço é menor. 35