INTRODUCTION TO RETRIVEAL INFORMATION RESUMOS: Capítulos 1 e 2 Aluno: Humberto Gustavo de Melo CAPITULO 1: MODELO BOOLEANO Definições: Recuperação de informação são técnicas computacionais para encontrar documentos de natureza não estruturada (texto em geral) que satisfaça uma necessidade de informação de um usuário a partir de grande quantidade de documentos. Modelo clássico de busca: TASK Info Need Verbal form Query SEARCH ENGINE Query Refinement Results Corpus Figura 1: Modelo clássico de busca A figura 1 demonstra o modelo clássico de busca em um sistema de recuperação de informação. O processo inicia com o usuário tentando expressar a sua necessidade em forma de consulta, um dos grandes desafios na área de RI e justamente traduzir essa necessidade do usuário (semântica) na forma sintática. Depois de realizada a consulta (Query) a maquina de busca então procura nos documentos chamados de corpus na figura anterior. A partir disso obtém-se então os resultados da pesquisa. Esse resultado o usuário ou o próprio sistema de RI pode realizar um refinamento na consulta (query refinement). O usuário então a partir desse resultado pode mudar ou não sua consulta. Outro grande problema na pratica são o tamanho dos documentos (corpus) que contem um volume muito grande de informações de forma não estruturadas. O que dificulta bastante o desenvolvimento de algoritmos eficientes nesses documentos. A partir desse modelo clássico veremos algumas técnicas de recuperação de informação. Matriz Termo - Documento: Considere que o usuário deseja realizar a seguinte consulta nas obras de Shakespeare: “Quais as obras contem os personagens Brutus, Caesar e não Calpurnia”. Uma maneira de realizar essa consulta e utilizando o conceito Matriz Termo – Documento. Suponha a matriz abaixo: Antony and Cleopatra Julius Caesar The Tempest Hamlet Othello Macbeth Antony 1 1 0 0 0 1 Brutus 1 1 0 1 0 0 Caesar 1 1 0 1 1 1 Calpurnia 0 1 0 0 0 0 Cleopatra 1 0 0 0 0 0 mercy 1 0 1 1 1 1 worser 1 0 1 1 1 0 Propriedades: Cada posição da matriz pode assumir valor de 0 (Ausência no documento) ou 1 (presença no documento); As linhas representam os termos; As colunas representam os documentos. Para realizar a consulta “Brutus AND Caesar AND NOT Calpurnia” primeiramente recupera-se as linhas dos temos: Exemplo: (Brutus) 110100 (Caesar) 110111 (Calpurnia) 101111 Complemento pois na expressão o usuário deseja NOT O resultado e a operação AND entre as linhas, o resultado obtido e 100100. Observando o resultado obtém-se as obras Antony and Cleópatra (primeira coluna) e Hamlet (quarta coluna). Modelo Índice Invertido Uma outra forma de recuperação de informação e utilizando a estrutura de dados índice invertido. Considere a figura 2 abaixo: Listas Brutus 6 Caesar 6 Calpurnia 3 2 2 4 4 1 1 5 3 1 6 45 17 3 16 57 31 54 101 Listas Dicionário Ordenado pelo by docID Figura 2: Estrutura de dados índice invertido Na figura anterior pode-se observar um dicionário (conjunto de termos), onde cada termo aponta para uma lista de documentos. Essa lista armazena então os documentos nos quais os termos aparecem. Uma vantagem desse modelo sobre o matricial e que os termos podem ter um tamanho dinâmico dependendo da freqüência com que aparecem nos documentos. Para a construção dos índices e necessário seguir alguns passos conforme figura 3 abaixo: Figura 3: Passos para construção de índices 2 Tokenizer: O primeiro passo e obter a partir dos documentos os termos a serem indexados, esse processo e chamado de tokenizer. O objetivo e dividir as palavras do texto em termos, ou seja, separar cada palavra do texto que será indexada posteriormente. Imagine os documentos abaixo: Documento 1 I did enact Julius Caesar I was killed i' the Capitol; Brutus killed me. Documento 2 So let it be with Caesar. The noble Brutus hath told you Caesar was ambitious Separamos cada letra do documento e criamos uma tabela onde armazenamos o termo e o documento em que aparece o termo e depois ordenamos essa tabela em ordem alfabética conforme abaixo: O ultimo passo e criar um dicionário que possuirá todos os termos criados, e criação das listas com os documentos onde os termos aparecem, com sua freqüência, conforme figura abaixo: Liguist Modules: O segundo passo necessário e realizar diversas tarefas sobre os termos obtidos no passo anterior: Essas tarefas são: o Eliminação das StopWords (artigos, pronomes, etc); o Padronização das palavras (eliminação de acentos, tremas, hífens , plural, etc); o Aplicação de algoritmos que padronizem as palavras com relação ao seu sufixo, sinônimo, etc. OBS: esse tópico será detalhado no capitulo 2. Indexer: O ultimo passo e a indexação e criação das listas de documentos dos termos padronizados e preparados pelos algoritmos do passo anterior. OBS: esse tópico será detalhado no capitulo 3. Consultas no modelo booleano: índice invertido Considera a consulta “Brutus e Caesar”: Primeiro Passo: Recuperar as listas do termos Brutus e Caesar, depois verificar o que as listas tem em comum com o algoritmo de merge. 2 8 2 4 8 1 1 2 3 65 Brutu 82 13 4 2 8 3 34 Caesa s 1 4 r 3 6 12 128 Se observamos as duas listas anteriores percebemos que as listas tem em comum o documento 2 e 8. O algoritmo de merge descrito na figura abaixo: O algoritmo é muito simples a idéia é ir percorrendo posição a posição das listas e comparar se os documentos coincidem ou não. Se coincidirem é então adicionado o documento na lista de resposta. Esse processo repete até o término das duas listas. A partir dos das duas técnicas estudas anteriormente pode-se concluir algumas características do modelo booleano: Processamento lento para grande quantidade de informações; Não e possível realizar consultas do tipo: “trazer todos os paises começados com a letra B”; Usuário necessita montar consultas utilizando operadores booleanos (AND, OR , NOT); Otimização consultas Índice invertido Como melhor maneira de realizar a consulta Brutus AND Calpurnia AND Caesar: Brutus Caesar Calpurnia 2 1 4 2 13 16 8 3 1 6 5 3 2 8 6 12 4 8 1 2 6 1 3 4 Inicie com os termos com as menores freqüências, ou seja, que possuem as menores listas. No caso da figura anterior execute a consulta (Calpurnia AND Brutus) AND Caesar, pois as listas de Calpurnia AND brutus são as menores. CAPITULO 2: Os termos do vocabulário e as listas de endereçamento Para recuperar informações contidas em documentos, existem diversos problemas a serem resolvidos, dentre esses problemas podemos citar: Documentos possuem diversos formatos: Pdf, word, excel, html, etc; Variedade de Idiomas; Informações de datas, números, etc. Erros ortográficos; Etc. Para indexar os termos e necessário realizar algumas operações sobre o texto: Analise léxica; Eliminação de StopWords; Operação de Stemming. Nos idiomas de maneira geral existem diversos caracteres tais como: ‘s, trema, acento, etc. Nesse caso como indexar as palavras? Filand’s, Hewlett-Packard, San Francisco, 3/20/91, etc. Para resolver esses problemas é necessário padronizar os termos. Uma das etapas da padronização consiste em eliminar alguns caracteres especiais: Exemplos: U.S.A USA (eliminação de pontos) resume resume (eliminação de acentos) TübingenTuebingen (eliminação de tremas) Fed fed (substituição de letra maiúscula por minúscula) anti-discriminatory antidiscriminatory (eliminação do hífen) Outro fator importante são os termos homônimos e sinônimos, uma solução para esses casos é associar um índice para os termos. Exemplo: carro = automóvel, nesse caso um índice carro – automóvel é criado. Outra solução e realizar a consulta do termo carro e depois consultar também automóvel. Lemmatization Essa técnica consiste em reduzir as formas variantes dos termos: Exemplo: am, are, is be car, cars, car’s, cars’ car Stemming Essa técnica tem por objetivo reduzir os termos no seu radical baseando-se em regras pré-definidas, devido a grande diversificação entre os idiomas é necessário um Stemming para cada um. Exemplo: for example compressed and compression are both accepted as equivalent to compress. for exampl compress and compress ar both accept as equival to compress Observe que no documento acima os textos foram reduzidos aos seus radicais, as regras utilizadas para o idioma em inglês são: sses ss ies i ational ate tional tion Regras dependem do tamanho da palavra (m>1) EMENT → replacement → replac cement → cement Um dos algoritmos mais utilizados para realizar o Stemming e o algoritmo de Porter. A figura abaixo mostra como funciona o algoritmo para a língua portuguesa. Figura: Algoritmo de porter para língua portuguesa Phrase Queries And Positional Indexes Suponha que o usuário deseja consultar “Stanford University”, como realizar essa consulta? A primeira solução proposta é chamada de Biword Indexes, essa técnica consiste em separar pares de termos contidos na frase e criar um índice para cada par. Exemplo: “friends, romans, Countrymen”. Friends romans (primeira biword) Romans contrymen (segunda biword) Cada uma das biwords é agora um termo do dicionário. Para realizar uma consulta dividimos a frase em Biwords e aplicamos uma consulta booleana. Exemplo: “stanford university palo alto “ stanford university AND university palo AND palo alto Existem uma extensao das biwords chamadas de Extended bywords. A idéia consiste em dividir os temos em Nomes(N) e artigos/preposições(x). Chamamos uma string de termos NX*N de extended biword. Cada extended biword é um novo termo do dicionário. Exemplo: catcher in the rye N X X N Processo de consulta o sistema de RI analisa os N’s e X’s elimina os X’s e consulta pelo índice dos N’s. na frase acima seria consultado pelo índice catcher rye. As biwords indexes possuem uma desvantagem no qual o dicionário se torna muito grande, o que torna a consulta mais lenta. Uma segunda solução para consultar frases são os Positional Indexes, essa técnica permite consultar as frases pela posição dos termos dentro das frases. Existe uma estrutura de dados que permite realizar a consulta dessa forma, segue abaixo: <term, number of docs containing term; doc1: position1, position2 … ; doc2: position1, position2 … ; etc.> Exemplo: <be: 993427; 1: 7, 18, 33, 72, 86, 231; 2: 3, 149; 4: 17, 191, 291, 430, 434; 5: 363, 367, …> O termo be acima esta contido nos documentos (1,2,4,5), dentro do documento 1 o termo aparece nas posições: 7,18,33,72, ... Suponha que o usuário deseja consultar a expressão “to be” dado dicionário abaixo: to: 2:1,17,74,222,551; 4:8,16,190,429,433; 7:13,23,191; ... 1:17,19; 4:17,191,291,430,434; 5:14,19,101; ... be: Para realizar essa consulta, extraímos primeiramente as listas de to e be e depois realizamos um merge para descobrirmos os documentos em comum. Em seguida analisamos as posições como temos o termo “to” e logo em seguida temos “be” o algoritmo ira retornar as posições 429 – to e 430 – be, e 433 – to e 434 – be.