O documento discute técnicas para indexação e recuperação de dados, incluindo:
1) Tokenização, normalização e outras etapas de pré-processamento para criar o vocabulário de termos do índice;
2) Estrutura de postings e otimizações como skip pointers para melhorar o desempenho de consultas;
3) Índices posicionais que armazenam posições de termos nos documentos para suportar consultas por frases.
1. Centro de Informática – Universidade Federal da Paraíba
Ordenação e Recuperação de Dados
Aula 2: Vocabulário de termos e listas
de postings
Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br
2. Ch. 1
Revisão da aula passada
Índices invertidos (introdução):
Estrutura: Dicionário e Postings
Passo chave na construção: Ordenação
Processamento de consultas Booleanas
Achar a interseção em tempo linear (“merging”)
Otimizações simples
3. Roteiro para esta aula
Aprofundamento sobre indexação
Pré-processamento para criação do vocabulário
de termos
Documentos
Tokenization
Que termos colocar no índice?
Postings
Merge mais rápido: skip lists
Postings posicionais e consultas por frases
4. Relembrando o processo de indexação
Documentos para Friends, Romans, countrymen.
indexar
Tokenizer
Fluxo de tokens Friends Romans Countrymen
Módulos
Linguísticos
Tokens modificados friend roman countryman
Indexador friend 2 4
roman 1 2
Índice invertido
countryman 13 16
5. Sec. 2.1
Parsing de um documento
Qual o formato do documento?
pdf/word/excel/html?
Em que idioma?
Qual o conjunto de caracteres utilizados?
Cada um deste itens representa um
problema de classificação. Veremos mais
sobre isso no futuro.
6. Sec. 2.1
Complicadores: Formato/idioma
A coleção pode conter documentos escritos em
vários idiomas diferentes
Um único índice pode conter termos de vários idiomas
diferentes
Algumas vezes um único documento pode
contemplar múltiplos idiomas e diferentes formatos
E-mail escrito em português com anexo em inglês
O que representa um documento unitário?
Um arquivo?
Um email?
Um e-mail com 5 anexos?
Um grupo de arquivos (PPT ou LaTeX salvo como HTM)?
8. Sec. 2.2.1
Tokenization
Entrada: “Friends, Romans and Countrymen”
Saída: Tokens
Friends
Romans
Countrymen
Um token é uma instância de uma sequência de
caracteres
Cada um dos tokens, depois de um processamento
adicional, é candidato a ser uma entrada no índice
Mas como definir quais são os tokens válidos?
9. Sec. 2.2.1
Tokenization
Problemas na geração de tokens:
Finland’s capital →
Finland? Finlands? Finland’s?
Hewlett-Packard → Hewlett e Packard como dois
tokens diferentes?
João Pessoa: um token ou dois?
Como você decidiu que seria um único token?
10. Sec. 2.2.1
Números
23/03/2011 23 de Março 2011
55 B.C.
B-52
Minha chave PGP é 324a3df234cb23e
(083) 3216-7093
Geralmente incluem espaços em branco
Sistemas mais antigos podem não indexar números
Muitas vezes é algo útil: pense em uma busca na Web por códigos
de erro em um determinado programa (Oracle, por exemplo)
Meta-dados geralmente são indexados separadamente
Data de criação, formato, etc.
11. Sec. 2.2.1
Tokenization: questões referentes ao
idioma
Francês
L'ensemble → um token ou dois?
L ? L’ ? Le ?
Fazer l’ensemble casar com un ensemble
Até 2003 o Google não fazia isso
Internacionalização!
Em alemão substantivos compostos não são segmentados
Lebensversicherungsgesellschaftsangestellter
‘empregado de uma companhia de seguros de vida’
Sistemas de recuperação de informação em alemão se beneficiam de um
“quebrador de substantivos”
Pode melhorar o desempenho em até 15%
12. Sec. 2.2.1
Tokenization: questões referentes ao
idioma
Chinês e Japonês não tem espaços entre as
palavras:
莎拉波娃现在居住在美国东南部的佛罗里达。
Impossível garantir um fluxo de tokens único
Mais complicado ainda em Japonês, com a
mistura de múltiplos alfabetos
Datas/quantidades em diferentes formados
フォーチュン 500 社は情報不足のため時間あた $500K( 約 6,000 万円 )
Katakana Hiragana Kanji Romaji
O usuário poderia fazer a consulta em Hiragana!
13. Sec. 2.2.1
Tokenization: questões referentes ao
idioma
Árabe (e Hebraico) é escrito basicamente da direita
para a esquerda, mas alguns itens como números
são escritos da esquerda para a direita
As palavras são separadas mas o formato das letras
formam ligações complexas
← → ←→ ←
‘A Algeria se tornou independente em 1962 depois
de 132 anos de ocupação Francesa’
14. Sec. 2.2.2
Separadores
Com uma lista de separadores é possível excluir do
dicionário as palavras mais comuns
Pouco significado semântico: de, a, e, para, com
Elas são muito freqüentes: ~30% dos postings dentre as 30 palavras mais
comuns
Porém, não é isso que se tem feito :
Técnicas de compressão fazem com que o espaço necessário para incluir os
separadores seja muito pequeno
Técnicas de otimização de consultas significam que se gasta muito pouco
tempo com os separadores durante o processamento da consulta.
Eles são necessários para:
Consultas por frases: “Rei do Futebol”
Títulos de música, livros, etc.: “Let it be”, “To be or not to be”
Consultas “relacionais” : “Vôos para Fernando de Noronha”
15. Sec. 2.2.3
Normalização
Precisamos “normalizar”as palavras no texto indexado e
também nas consultas para uma mesma forma
Queremos casar U.S.A. com USA
Um termo é uma palavra (normalizada), que é uma entrada
para o dicionário de um sistema de recuperação de
informação
Classes de equivalência são definidas para os termos, por
exemplo:
Remover os pontos
U.S.A., USA USA
Remover os hífens
Para-choques, parachoques parachoques
16. Sec. 2.2.3
Normalização: outros idiomas
Acentos: Francês résumé vs. resume.
Tremas: Alemão: Tuebingen vs. Tübingen
Devem ser equivalentes
Critério mais importante:
Como os usuários gostariam de utilizar estes termos em
suas consultas?
Mesmo em linguagens como o Português, que usam
acentos freqüentemente, os usuários muitas vezes
podem preferir não digitá-los
Geralmente é melhor normalizar para a forma sem
acentos
Tuebingen, Tübingen, Tubingen Tubingen
17. Sec. 2.2.3
Normalização: outros idiomas
Normalização de formatos de datas
7 月 30 日 vs. 7/30
Tokenization e normalização podem depender do
idioma, portanto são correlacionadas à deteção do
idioma do documento O que seria MIT?
Morgen will ich in MIT …
Crucial: É preciso normalizar tanto o texto a ser
indexado quanto os termos da consulta
uniformemente
18. Sec. 2.2.3
Normalização
Uma alternativa às classes de equivalência é fazer
expansão assimétrica
Um exemplo de onde esta técnica pode ser útil
Digite: window Busca por: window, windows
Digite: windows Busca por: Windows, windows, window
Digite: Windows Busca por: Windows
Potencialmente mais poderosa porém menos
eficiente
19. Thesaurus
Como lidar com sinônimos e homônimos?
Classes de equivalência específicas
carro = automóvel
Podem ser re-escritos para formar classes de equivalência
Quando o documento contiver automóvel, indexar como carro e
automóvel. (e vice-versa)
Ou pode-se expandir a consulta
Quando a consulta contiver automóvel, pesquisar também por
carro
Como lidar com erros de grafia?
Uma idéia é utilizar um soundex, que forma classes de
equivalência baseado em heurísticas fonética
20. Sec. 2.2.4
Lemmatization
Reduzir variações à uma única base
Exemplo
fui, era, sou → ser
carro, carrinho, carrão, carros → carro
Os carros são de cores diferentes → O carro ser de
cor diferente
Lemmatization implica em reduzir as palavras à sua
forma no dicionário
21. Sec. 2.2.4
Especificidades do idioma
Muitas das funcionalidades descritas anteriormente
descrevem transformações que são
Dependentes de idioma
Geralmente, dependentes de aplicação
Devem ser vistas como adendos ao processo de
indexação
23. Sec. 2.3
Relembrando o merge básico
Caminhe simultaneamente nas duas listas em tempo
linear ao total de postings
2 4 8 41 48 64 128 Brutus
2 8
1 2 3 8 11 17 21 31 Caesar
Se as listas têm comprimento m e n, o cálculo da
interseção tem complexidade O(m+n)
Podemos fazer melhor que isso?
Sim (se o índice não for alterado muito freqüentemente).
24. Sec. 2.3
Adicionando skip pointers (em tempo
de indexação) às listas de postings
41 128
2 4 8 41 48 64 128
11 31
1 2 3 8 11 17 21 31
Por que?
Para saltar (skip) postings que não vão aparecer nos
resultados da consulta
Como?
Onde colocamos os skip pointers?
25. Sec. 2.3
Processando consultas com skip
pointers
41 128
2 4 8 41 48 64 128
11 31
1 2 3 8 11 17 21 31
Suponha que tenhamos percorrido as duas listas até
que processamos o 8 em cada lista. Processamos o 8
e avançamos.
Temos agora o 41 e o 11. 11 é menor
Porém, 11 tem um skip pointer para o 31, então
podemos pular (skip) a frente até o fim da lista.
26. Sec. 2.3
Onde colocar os skip pointers?
Tradeoff:
Mais ponteiros → saltos menores ⇒ saltos mais
frequentes. Porém requer muitas comparações.
Menos ponteiros → menos comparações, saltos mais
longos ⇒ poucos saltos bem sucedidos.
27. Sec. 2.3
Colocando os skip pointers
Heurística simples: para listas de tamanho L, colocar
√L skip pointers distribuídos uniformemente
Ignora a distribuição dos termos
Fácil se o índice é relativamente estático; complicado
se o L muda com freqüência.
29. Sec. 2.4
Consultas por frases
Queremos ser capazes de responder consultas como
“Universidade Federal da Paraíba” – como uma
frase
Portanto a frase “Eu moro na Paraíba” não é um
bom resultado para a consulta.
O conceito de consulta por frases se mostrou um dos
poucos recursos “avançados” de busca que cairam no
gosto dos usuários
Para isto, não é suficiente armazenar apenas
entradas do tipo <termo : documento>
30. Sec. 2.4.1
Primeria tentativa: índices com bi-
termos
Indexar cada par de termos consecutivos como se
fossem uma frase
Por exemplo, para o texto “Friends, Romans,
Countrymen” seriam gerados os bi-termos
friends romans
romans countrymen
Cada um desses bi-termos é agora uma entrada no
dicionário
Consultas por frases de duas palavras são
processadas imediatamente.
31. Sec. 2.4.1
Consultas por frases mais longas
Frases mais longas são processadas utilizando
operadores lógicos:
universidade federal da paraiba pode ser quebrado
em dois bi-termos:
universidade federal AND da paraiba
Sem acessar os documentos é impossível ter certeza
que a consulta retornará realmente os documentos
que possuem a frase completa.
Pode ter falsos positivos
32. Sec. 2.4.1
Problemas com os bi-termos
Falsos positivos, como mencionado anteriormente
O tamanho do índice explode por conta do aumento
no dicionário
Impraticável para tri-termos, por exemplo
Índices com bi-termos não são a solução padrão mas
podem ser parte de uma estratégia conjunta
33. Sec. 2.4.2
Solução 2: Índices posicionais
Armazenar na lista de postings as posições dos
tokens no documento
<termo, número de documentos contendo o termo;
doc1: posição1, posição2 … ;
doc2: posição1, posição2 … ;
etc.>
34. Sec. 2.4.2
Exemplo de índice posicional
<be: 993427;
1: 7, 18, 33, 72, 86, 231; Que documento 1,2,4,5
2: 3, 149; poderia conter “to be
4: 17, 191, 291, 430, 434; or not to be”?
5: 363, 367, …>
35. Sec. 2.4.2
Tamanho de um índice posicional
É possível comprimir a lista de posições: falaremos
sobre isso em breve
No entanto, um índice posicional aumenta
substancialmente o tamanho do índice
Mesmo assim, índices posicionais são padrão hoje
por conta de seu poder e capacidade de responder
consultas por frases.
36. Sec. 2.4.2
Tamanho de um índice posicional
Requer uma entrada para cada ocorrência, não
apenas uma por documento
Tamanho do índice depende do tamanho médio dos
documentos
Uma página web tem em média menos de 1000 termos
Livros e poemas épicos podem chegar facilmente a
100.000 termos
Considere um termo com frequência 0.1%
Tamanho do Doc Postings Posições
1000 1 1
100,000 1 100
37. Sec. 2.4.2
Regra geral
Um índice posicional é entre duas e quatros vezes
maior que um índice não-posicional
O tamanho do índice posicional representa algo
entre 35-50% do documento original
Esses números valem para documentos escritos em
inglês.
Tamanho do índice pode variar dependendo do
idioma
Notes de l'éditeur
Nontrivial issues. Requires some design decisions.
Nevertheless: “Google ignores common words and characters such as where, the, how, and other digits and letters which slow down your search without improving the results.” (Though you can explicitly ask for them to remain.)