Dicionários e Recuperação Tolerante

82
Ordenação e Recuperação de Dados Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br Centro de Informática Universidade Federal da Paraíba Aula 3: Dicionários e Recuperação Tolerante 1

Transcript of Dicionários e Recuperação Tolerante

Page 1: Dicionários e Recuperação Tolerante

Ordenação e Recuperação de Dados

Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br

Centro de Informática – Universidade Federal da Paraíba

Aula 3: Dicionários e RecuperaçãoTolerante

1

Page 2: Dicionários e Recuperação Tolerante

Agenda

❶ Revisão

❷ Dicionários

❸ Consultas com coringas

❹ Correção ortográfica e distância de edição

2

Page 3: Dicionários e Recuperação Tolerante

Agenda

❶ Revisão

❷ Dicionários

❸ Consultas com coringas

❹ Correção ortográfica e distância de edição

3

Page 4: Dicionários e Recuperação Tolerante

4

Problemas com a tokenization

Quais são os delimitadores ?

Espaços ?

Apóstrofos?

Hifens?

As vezes eles delimitam. As vezes não.

Muitas linguagens não tem espaços em braco (e.g., Chinês)

Algumas linguagens (Alemão, Holandês e Sueco, por exemplo) não tem espaços em substantivos compostos (Lebensversicherungsgesellschaftsangestellter)

4

Page 5: Dicionários e Recuperação Tolerante

5

Problemas com classes de equivalências

Um termo é uma classe de equivalência de termos.

Como definimos classes de equivalência?

Números (3/20/91 vs. 20/3/91)

Maiúsculas e minúsculas

Análise morfológica

Problemas com classes de equivalência em diferentes idiomas

Finlandês: um único verbo pode ter até 12.000 formas diferentes

Como lidar com acentos, tremas, etc.

5

Page 6: Dicionários e Recuperação Tolerante

6

Skip pointers

6

Page 7: Dicionários e Recuperação Tolerante

7

Índices posicionais

7

Lista de postings em um índice não posicional: cada posting é apenas um identificador de documento

Lista de postings em um índice posicional: cada posting é um identificador de documento e uma lista de posições

Consulta de exemplo: “to1 be2 or3 not4 to5 be6” TO, 993427:

‹ 1: ‹7, 18, 33, 72, 86, 231›;2: ‹1, 17, 74, 222, 255›;4: ‹8, 16, 190, 429, 433›;5: ‹363, 367›;7: ‹13, 23, 191›; . . . ›

BE, 178239:‹ 1: ‹17, 25›;4: ‹17, 191, 291, 430, 434›;5: ‹14, 19, 101›; . . . › Documento 4!

Page 8: Dicionários e Recuperação Tolerante

8

Índices posicionais

Com um índice posicional podemos responder consultas porfrases

Com um índice posicional podemos responder consultas porproximidade

8

Page 9: Dicionários e Recuperação Tolerante

9

A seguir

Recuperação tolerante: O que fazer se não há nenhum documento que satisfaça totalmente a consulta

Consultas com coringas

Correção ortográfica

9

Page 10: Dicionários e Recuperação Tolerante

Agenda

❶ Revisão

❷ Dicionários

❸ Consultas com coringas

❹ Correção ortográfica e distância de edição

10

Page 11: Dicionários e Recuperação Tolerante

11

Índice invertido

11

Page 12: Dicionários e Recuperação Tolerante

12

Índice invertido

12

Page 13: Dicionários e Recuperação Tolerante

13

Dicionários

Dicionário: a estrutura de dados utilizada para armazenar o vocabulário de termos

13

Page 14: Dicionários e Recuperação Tolerante

14

Dicionário como um array de entradas de tamanho fixo

Para cada termo, preciso armazenar os seguintes itens:

Frequência de documentos

Apontador para a lista de postings

Assuma por enquanto que podemos armazenar esta informação em uma entrada de tamanho fixo

Assuma que armazenamos estas entradas em um array

14

Page 15: Dicionários e Recuperação Tolerante

15

Dicionário como um array de

entradas de tamanho fixo

Espaço necessário: 20 bytes 4 bytes 4 bytes

Como localizar o termo qi neste array em tempo de consulta? Ou seja: que estrutura de dados nós utilizamos para localizar em que entrada qi está armazenado?

15

Page 16: Dicionários e Recuperação Tolerante

16

Estruturas de dados para localização de termos

Duas classes principais de estruturas de dados: hashes e árvores

Alguns sistemas utilizam hashes outros utilizam árvores.

Critério para escolher entre usar hash ou usar árvore:

Há um número fixo de termos ou a coleção vai continuar a crescer ?

Quais são as frequências relativas de acesso para cada um dos termos?

Qual a estimativa para a quantidade de termos no sistema?

16

Page 17: Dicionários e Recuperação Tolerante

17

Hashes

Cada termo do vocabulário é mapeado (hashed) em um número inteiro.

Tentar evitar colisões

No momento da consulta fazer o seguinte: mapear o termo da consulta, resolver eventuais colisões, localizar a entrada no array

Pros: Acesso com hash é mais rápido que acesso em árvore.

Acesso em tempo constante.

Cons

Impossível encontrar variações simples (resume vs. résumé)

Impossível fazer busca por prefixo (todos os termos começando com automat)

É preciso remapear todos os termos periodicamente se o vocabulário continuar a crescer

17

Page 18: Dicionários e Recuperação Tolerante

18

Árvores

Resolvem o problema da busca por prefixos (encontrar todos os temos que começam com automat).

Modelo mais simples: árvore binária

Consulta é ligeiramente mais lenta que utilizando hash : O(logM), onde M é o tamanho do vocabulário.

O(logM) só vale para árvores balanceadas.

Re-balancear uma árvore é uma operação cara.

Árvores B diminuem um pouco o problema de re-balanceamento.

Definição de uma árvore B: cada nó interno tem um número de filhos no intervalo [a, b] onde a, b são números inteiros positivos apropriados e.g., [2, 4].

18

Page 19: Dicionários e Recuperação Tolerante

19

Árvore binária

19

Page 20: Dicionários e Recuperação Tolerante

20

Árvore B

20

Page 21: Dicionários e Recuperação Tolerante

Agenda

❶ Revisão

❷ Dicionários

❸ Consultas com coringas

❹ Correção ortográfica e distância de edição

21

Page 22: Dicionários e Recuperação Tolerante

22

Consultas com coringas

mon*: encontrar todos os documentos contendo algum termo começando com mon

Fácil se utilizamos um dicionário com Árvore B: recuperar todos os termos t no intervalo: mon ≤ t < moo

*mon: encontrar todos os documentos contendo algum termo terminando com mon

Manter uma árvore adicional com os termos em ordem inversa

Então recuperar todos os termos t no intervalo: nom ≤ t < non

Resultado: Um conjunto de termos que atendem uma consulta com coringa

Basta então recuperar os documentos que contem algum desses termos

22

Page 23: Dicionários e Recuperação Tolerante

23

Como lidar com * no meio de um termo

Exemplo: m*nchen

Poderíamos procurar por m* e *nchen na Árvore B e depois achar a interseção dos dois conjuntos.

Muito caro

Alternativas:

Índice com permuterm

Rotacionar o token para o * sempre ficar no final

Multiplica por 4 o tamanho do índice

Índices com k-grams

Enumera todas as sequências de k caracteres no termo

Ocupa menos espaço que um índice permuterm

Requer uma etapa de filtragem posterior de falsos positivos

Não entraremos em detalhes sobre estas técnicas23

Page 24: Dicionários e Recuperação Tolerante

Agenda

❶ Revisão

❷ Dicionários

❸ Consultas com coringas

❹ Correção ortográfica e distância de edição

24

Page 25: Dicionários e Recuperação Tolerante

25

Correção ortográfica

Dois usos principais

Corrigir documentos durante indexação

Corrigir consultas do usuário

Dois métodos diferentes para correção ortográfica

Correção ortográfica de palavras isoladas

Checa cada palavra individualmente

Não vai corrigir erros que resultem em palavras escritas corretamente, e.g., an asteroid that fell form the sky

Correção ortográfica sensível ao contexto

Checa as palavras ao redor

Pode corrigir o form/from na frase acima

25

Page 26: Dicionários e Recuperação Tolerante

26

Corrigindo documentos

Não estamos interessados em correção ortográfica de documentos de forma interativa (e.g., MS Word) neste curso.

Em Recuperação da Informação, correção ortográfica é utilizada principalmente para documentos escaneadosutilizando OCR (OCR = optical character recognition)

A filosofia geral da Recuperação da Informação é: não altere os documentos.

26

Page 27: Dicionários e Recuperação Tolerante

27

Corrigindo consultas

Primeiro: correção ortográfica de palavras isoladas

Premissa 1: Exista uma lista de “palavras corretas” na qual pode ser encontrada a correção para a palavra errada.

Premissa 2: Temos uma forma de calcular a distancia entre uma palavra incorreta e uma palavra correta.

Uma algoritmo simples de correção ortográfica: retorne a palavra “correta” que tenha a menor distância para a palavra errada..

Exemple: infromação → informação

Para esta lista de palavras corretas podemos utilizar o próprio vocabulário que contem todas as palavras que ocorrem na coleção de documentos

Por que isso não seria recomendado?

27

Page 28: Dicionários e Recuperação Tolerante

28

Alternativas a utilizar o vocabulário de termos

Um dicionário padrão (Michaelis, Aurélio, etc)

Um dicionário específico para sistemas de recuperação da informação

28

Page 29: Dicionários e Recuperação Tolerante

29

Distância de edição

A distância de edição entre dois strings s1 e s2 é o menor número de operação básicas que transforma s1 em s2.

Distância de Levenshtein: As operações básicas admissíveis são inserir, remover e substituir um caractere

Distância de Levenshtein dog-do: 1

Distância de Levenshtein cat-cart: 1

Distância de Levenshtein cat-cut: 1

Distância de Levenshtein cat-act: 2

29

Page 30: Dicionários e Recuperação Tolerante

30

Algoritmo da distância de Levenshtein

30

Page 31: Dicionários e Recuperação Tolerante

31

Exemplo: Distância de Levenshtein

31

Page 32: Dicionários e Recuperação Tolerante

32

Significado de cada célula de uma matriz de Levenshtein

32

Custo de chegar aqui a partir do vizinho superior esquerdo (copia ou substituição)

Custo de chegar aqui a partir de meu vizinho de cima (remoção)

Custo de chegar aqui a partir do meu vizinho da esquerda (inserção)

O Valor mínimo destes três possíveis movimentos; a forma mais barata de chegar aqui

Page 33: Dicionários e Recuperação Tolerante

33

Usando a distância de edição para correção ortográfica

Dada uma consulta, primeiro enumere todas a sequencias de caracteres que tenham uma dada distância de edição de cada termo incorreto

Encontre a interseção dessa lista com a lista de termos corretos

Sugira termos na interseção para o usuário.

33

Page 34: Dicionários e Recuperação Tolerante

34

Exercício

❶ Encontre a matriz de distância de Levenshtein para OSLO –SNOW

❷ Quais são as operações de edição de Levenshtein que transformam cat into catcat?

34

Page 35: Dicionários e Recuperação Tolerante

3535

Page 36: Dicionários e Recuperação Tolerante

3636

Page 37: Dicionários e Recuperação Tolerante

3737

Page 38: Dicionários e Recuperação Tolerante

3838

Page 39: Dicionários e Recuperação Tolerante

3939

Page 40: Dicionários e Recuperação Tolerante

4040

Page 41: Dicionários e Recuperação Tolerante

4141

Page 42: Dicionários e Recuperação Tolerante

4242

Page 43: Dicionários e Recuperação Tolerante

4343

Page 44: Dicionários e Recuperação Tolerante

4444

Page 45: Dicionários e Recuperação Tolerante

4545

Page 46: Dicionários e Recuperação Tolerante

4646

Page 47: Dicionários e Recuperação Tolerante

4747

Page 48: Dicionários e Recuperação Tolerante

4848

Page 49: Dicionários e Recuperação Tolerante

4949

Page 50: Dicionários e Recuperação Tolerante

5050

Page 51: Dicionários e Recuperação Tolerante

5151

Page 52: Dicionários e Recuperação Tolerante

5252

Page 53: Dicionários e Recuperação Tolerante

5353

Page 54: Dicionários e Recuperação Tolerante

5454

Page 55: Dicionários e Recuperação Tolerante

5555

Page 56: Dicionários e Recuperação Tolerante

5656

Page 57: Dicionários e Recuperação Tolerante

5757

Page 58: Dicionários e Recuperação Tolerante

5858

Page 59: Dicionários e Recuperação Tolerante

5959

Page 60: Dicionários e Recuperação Tolerante

6060

Page 61: Dicionários e Recuperação Tolerante

6161

Page 62: Dicionários e Recuperação Tolerante

6262

Page 63: Dicionários e Recuperação Tolerante

6363

Page 64: Dicionários e Recuperação Tolerante

6464

Page 65: Dicionários e Recuperação Tolerante

6565

Page 66: Dicionários e Recuperação Tolerante

6666

Page 67: Dicionários e Recuperação Tolerante

6767

Page 68: Dicionários e Recuperação Tolerante

6868

Page 69: Dicionários e Recuperação Tolerante

69

Como entender quais operações de edição transformam OSLO em SNOW?

69

Page 70: Dicionários e Recuperação Tolerante

7070

Page 71: Dicionários e Recuperação Tolerante

7171

Page 72: Dicionários e Recuperação Tolerante

7272

Page 73: Dicionários e Recuperação Tolerante

7373

Page 74: Dicionários e Recuperação Tolerante

7474

Page 75: Dicionários e Recuperação Tolerante

7575

Page 76: Dicionários e Recuperação Tolerante

7676

Page 77: Dicionários e Recuperação Tolerante

7777

Page 78: Dicionários e Recuperação Tolerante

7878

Page 79: Dicionários e Recuperação Tolerante

7979

Page 80: Dicionários e Recuperação Tolerante

80

Correção ortográfica sensível ao contexto Nosso exemplo foi: an asteroid that fell form the sky Como corrigir? Uma dica: Correção ortográfica baseada em hits

Recupere os termos “corretos” próximos a cada termo da consulta flew form munich: flea para flew, from para form e munch para

munich Agora tente todas as possíveis frases resultantes variando uma

palavra por vez Tentar “flea form munich” Tentar “flew from munich” Tentar “flew form munch” A consulta correta “flew from munich” terá o maior número de

resultados (hits).

80

Page 81: Dicionários e Recuperação Tolerante

81

Correção ortográfica sensível ao contexto

A abordagem baseada em hits que acabamos de citar não é muito eficiente.

Altenativas mais eficientes se baseiam em coleções de consultas e não de documentos

81

Page 82: Dicionários e Recuperação Tolerante

82

Questões gerais sobre correção ortográfica

Interface do usuário

automática vs. sugestão de correção

Did you mean só funciona para uma sugestão.

Como lidar com múltiplas possibilidades de correção?

Tradeoff: simplicidade vs. poder

Custo

Correção ortográfica é um processo potencialmente custoso.

Evitar realizar a cada consulta?

Talvez apenas para consultas que resultem em poucos documentos.

Chute: A correção ortográfica das principais ferramentas de busca é eficiente o suficiente para poder ser executada a cada consulta.

82