Information Retrieval using the Boolean Model in Ruby on Rails - Presentation Transcript
Information Retrieval using the Boolean Model in Ruby on Rails Nuno Job 26 de Maio de 2008
Information Retrieval using Boolean Model
M étodo de obter resultados numa pesquisa baseado em modelos booleanos.
Associação das palavras, ao resultado, com base numa formula.
Critérios de ponderação disponíveis em base de dados - Número de ocorrências.
V árias frameworks de IR disponíveis: Spynx, Ferret, ... Ask Google.
3 simples passos de indexaç ão
Era uma vez num reino muito distante uma princesa chamada Eduarda.
historia.txt
E a pesquisa?
Obter as ocorrências que satisfazem cada predicado : A AND B OR NOT C (A,B,C Sets)
Ou por um statement SQL complicado + Performance Ou obter tudo e usar uma linguagem de scripting + Versatilidade
MapReduce!?
Arquitectura (?) usada pela Google para combater este problema de eficiência vs versatilidade. (e muitos outros)
Plataforma distribuída de computaç ão.
Um/vários mestre e vários workers
Funç ão map de cada worker processa “um bocado” de um documento enorme.
Função reduce cria a partir dos maps parciais o resultado final.
Afinal as linguagens funcionais servem para alguma coisa. Os compiladores e a engenharia de linguagens também...
Exemplo: os desafios que as linguagens dinâmicas trazem aos compiladores tradicionais
MapReduce - Esquema
Porque é que nos interessa uma boa arquitectura? (ie: google twitter scaling architecture)
Step by Step on Ruby on Rails
Do it yourself em 15 minutos (ser á que tenho assim tanto tempo? )
Despreza-se as v árias formas de uma palavra. Para efeitos práticos deve ser considerado. (exemplo: procura != procurar )
Criar o projecto e os modelos
O que s ão modelos? (wiki model view controller) Camada computacional responsável pela ligaç ão entre a aplicação e a base de dados
Criar a base de dados
Inserir um documento
Mas....
Inserimos o documento sem processar as palavras?
Para que a procura seja eficiente é necessário que a indexação seja feita não aquando da sua criação mas num esquema de fila de espera. A arquitectura importa!
Para simplificar, indexamos aquando da criaç ão.
Mas e se o fizéssemos numa aplicação real com milhares de request por segundo?
Depois da criaç ão, Indexar!
after_create? before_save?
Vamos experimentar
E.. Funcionou?
A pesquisa
Com a informaç ão disponivel em BD como conseguir processar pesquisas?
Implementação Trivial
Mas tem um pequeno problema no modelo de dados (para os mais atentos...)
O Problema
Quando definimos na base de dados o id do documento fica em document e n ão em document_id
Apesar de ser possível usar assim, os princípios de convention over configuration sugerem a alteraç ão
Para simplificar vamos continuar assim, mas...
A relaç ão funciona? Mas ent ão se não funciona-se eu ia por na apresentação? Claro que não :)
A pesquisa (bugs fixed)
Parece apropriado que seja o modelo dos documentos que faça a pesquisa devolvendo os documentos ordenados pelo peso.
Pode tamb ém vir a ser necessário uma pesquisa complementar. Exemplo: Existe a palavra neste documento?
M ãos na massa...
Os operadores
J á temos uma forma de descobrir quais os documentos que têm dada palavra.
Faltam as operações.
AND? OR? NOT?
AND por defeito. NOT como -.
Primeira tentativa
O documento 4 é claramente o que devia aparecer em primeiro. Mas como?
D úvidas
Ser á que devemos escolher apenas pelos pesos?
Será que é mais importante ter todas as palavras pelo menos uma vez? Ou ter ordenados pela soma dos pesos?
Far á sentido numa pesquisa textual o OR? Ou é o OR apenas a junção de duas pesquisas?
E nesse caso? A ordenaç ão?
Respostas
Como em quase tudo, n ão há certo nem errado.
Existem vários estudos sobre produzir melhores resultados na pesquisa textual.
Para os obter usar uma framework como o spynx parece mais apropriado.
Para fins deste trabalho: O que tem todas as palavras primeiro, depois ordenado por peso. Implementaç ão fácil.
Uma implementaç ão “trivial”
E funcionou?
E a performance? E a pr óximidades das palavras? E (insira-aqui-a-sua-pergunta) ?
Frameworks! Frameworks! Frameworks!
e-archia: Indexaç ão
e-archia: Pesquisa
Consideraç ões finais
Melhorar os resultados
Melhorar a performance
Arquitectura
“ kids, don’t try this at home”
I accept chaos, I'm not sure whether it accepts me. Bob Dylan
0 comments
Post a comment