Modelo
U
NIVERSIDADE
F
EDERAL DE
G
OIÁS
INSTITUTO DE
INFORMÁTICA
A
NDRÉ
R
ODRIGUES
C
OIMBRA
Método automático para descoberta de
funções de ordenação utilizando
programação genética paralela em GPU
Goiânia 2014
A
NDRÉ
R
ODRIGUES
C
OIMBRA
Método automático para descoberta de
funções de ordenação utilizando
programação genética paralela em GPU
Dissertação apresentada ao Programa de Pós–Graduação do Instituto de Informática da Universidade Federal de Goiás, como requisito parcial para obtenção do título de Mestre em Computação.
Área de concentração: Ciência da Computação. Orientador: Prof. Wellington Santos Martins Co-Orientador: Prof. Thierson Couto Rosa
Goiânia 2014
A
NDRÉ
R
ODRIGUES
C
OIMBRA
Método automático para descoberta de
funções de ordenação utilizando
programação genética paralela em GPU
Dissertação defendida no Programa de Pós–Graduação do Instituto de Informática da Universidade Federal de Goiás como requisito parcial para obtenção do título de Mestre em Computação, aprovada em 28 de Março de 2014, pela Banca Examinadora constituída pelos professores:
Prof. Wellington Santos Martins Instituto de Informática – UFG
Presidente da Banca
Prof. Thierson Couto Rosa Instituto de Informática – UFG
Prof. Marcos André Gonçalves
Departamento de Ciência da Computação – UFMG
Prof. Celso Gonçalves Camilo Junior Instituto de Informática – UFG
Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização da universidade, do autor e do orientador(a).
André Rodrigues Coimbra
Possui graduação em Ciências da Computação pela Universidade Federal de Goiás (2009). Participou durante sua graduação em Projetos de Pesquisa na área de Wireless Sensor Networks e RFID (Radio-Frequency Identification). Atualmente, realiza mestrado em Ciências da Computação pela mesma uni-versidade na área de Inteligência Computacional, trabalhando com Computa-ção Evolucionária, mais especificamente na aplicaComputa-ção da ProgramaComputa-ção Gené-tica Paralela em Unidades Gráficas de Processameto para resolver o Problema de Ordenação em Sistemas de Recuperação de Informação. Suas áreas de in-teresse atuais são Computação Paralela, Computação Evolucionária e Mine-ração de Dados.
A Deus, o grande arquiteto do universo, a minha família, apoio constante e incondicional, e aos meus amigos.
Agradecimentos
A Deus meu criador que me deu força e saúde para concluir este trabalho. A meus pais pelo apoio e pelo incentivo constante, mesmo à distância. Aos meus irmãos, Thyago e Fellipe, por estarem sempre ao meu lado. Aos meus professores orientadores Wellington Martins e Thierson Rosa pela orientação e pela paciência infindável durante todo o processo. A meu amigo, Leandro Alexandre, pelos conselhos e por sempre me ajudar sem medir esforços. A todos aqueles que contribuíram de alguma forma para a minha formação acadêmica.
Aprenda com o ontem, viva o hoje, tenha esperança no amanhã. O importante é não parar de questionar.
Albert Einstein, Físico Teórico Alemão.
Resumo
Rodrigues Coimbra, André. Método automático para descoberta de funções de ordenação utilizando programação genética paralela em GPU. Goiânia, 2014. 97p. Dissertação de Mestrado. Instituto de Informática, Universidade Federal de Goiás.
Funções de ordenação têm um papel vital no desempenho de sistemas de recuperação de informação garantindo que os documentos mais relacionados com o desejo do usuário – representado através de uma consulta – sejam trazidos no topo dos resultados, evitando que o usuário tenha que analisar uma série de documentos que não sejam realmente relevantes.
Assim, utiliza-se a Programação Genética (PG), uma técnica da Computação Evolucioná-ria, para descobrir de forma automática e sistemática funções de ordenação. Além disso, neste trabalho a técnica de PG foi desenvolvida seguindo uma estratégia que explora o paralelismo através de unidades gráficas de processamento.
Foram agregados ainda na abordagem proposta – denominada Finch – outros métodos conhecidos no contexto de recuperação de informação como os comitês de classificação e a estratégia Lazy. Sendo que essa complementação só foi viável devido a natureza da PG e em virtude da utilização do paralelismo.
Os resultados experimentais encontrados com a Finch, em relação à qualidade das funções de ordenação descobertas, superaram os resultados de diversas estratégias conhecidas na literatura. Considerando o desempenho da abordagem em função do tempo, também foram alcançados ganhos significativos. A solução desenvolvida explorando o paralelismo gasta, em média, vinte vezes menos tempo que a solução utilizando somente a unidade central de processamento.
Palavras–chave
Programação Genética, Computação Paralela, Sistema de Recuperação de Infor-mação, Ordenação de Documentos, Computação Evolucionária, CUDA, Unidade Gráfica de Processamento, Inteligência Computacional.
Abstract
Rodrigues Coimbra, André. Automatic Raking Function Discovery Method using Parallel Genetic Programming on GPU. Goiânia, 2014. 97p. MSc. Dissertation. Instituto de Informática, Universidade Federal de Goiás.
Ranking functions have a vital role in the performance of information retrieval systems ensuring that documents more related to the user’s search need – represented as a query – are shown in the top results, preventing the user from having to examine a range of documents that are not really relevant.
Therefore, this work uses Genetic Programming (GP), an Evolutionary Computation technique, to find ranking functions automaticaly and systematicaly. Moreover, in this project the technique of GP was developed following a strategy that exploits parallelism through graphics processing units.
Other known methods in the context of information retrieval as classification committees and the Lazy strategy were combined with the proposed approach – called Finch. These combinations were only feasible due to the GP nature and the use of parallelism.
The experimental results with the Finch, regarding the ranking functions quality, surpas-sed the results of several strategies known in the literature. Considering the time per-formance, significant gains were also achieved. The solution developed exploiting the parallelism spends around twenty times less time than the solution using only the central processing unit.
Keywords
Genetic Programming, Parallel Computing, Information Retrieval System, Do-cument Ranking, Evolutionary Computation, CUDA, Graphics Processing Unit, Machine Learning.
Sumário
Lista de Figuras 11 Lista de Tabelas 13 Lista de Algoritmos 14 1 Introdução 15 1.1 Definição do Problema 15 1.2 Desafios 16 1.3 Objetivo 17 1.4 Trabalhos Relacionados 17 1.5 Contribuições da Dissertação 20 1.6 Estrutura da Dissertação 212 Recuperação de Informação e Funções de Ordenação 22
2.1 Conceitos Básicos 22
2.2 Objetivos 23
2.3 Processo de Recuperação de Informação 24
2.4 Modelos de Recuperação de Informação 27
2.5 Avaliação de Desempenho 31
2.6 Descoberta de Funções de Ordenação 33
3 Programação Genética e Paralelismo em GPU 36
3.1 Histórico 36
3.2 Principais Elementos da PG 37
3.3 Algoritmo de Programação Genética 43
3.4 Paralelismo e PG 45
3.5 GPUs e PG 45
4 Abordagem Proposta – Finch 49
4.1 Finch e a PG 49
4.2 Finch e o Paralelismo 60
4.3 Finch e a Estratégia Lazy 63
5 Avaliação Experimental 66
5.1 Metodologia 66
5.2 Resultados 70
6 Conclusão e Trabalhos Futuros 83
6.1 Conclusão 83
6.2 Trabalhos Futuros 84
Referências Bibliográficas 86
A Informações Adicionais 95
A.1 Coleção TREC 95
Lista de Figuras
2.1 O processo de recuperação de informação [1]. 26
3.1 Indivíduo representado através de uma árvore. 37
3.2 Fluxograma de um esquema comum de um algoritmo evolucionário [19]. 38
3.3 Indivíduo gerado pelo método full. 39
3.4 Indivíduo gerado pelo método grow. 40
3.5 Operador de cruzamento aplicado a dois indivíduos. 42
3.6 Operador de mutação aplicado a um indivíduo. 43
3.7 Fluxograma de um algoritmo genético convencional [52]. 44
3.8 Hierarquia de memória de uma GPU [13]. 46
3.9 Paralelismo em âmbito de bloco. 47
3.10 Paralelismo em âmbito de thread. 48
4.1 Fluxograma da abordagem proposta – Finch. 51
4.2 Indivíduo: função de ordenação. 52
4.3 Representação em árvore da função em RPN. 53
4.4 Exemplo de entrada do conjunto de treino da LETOR. 61
4.5 (a) e (b) representam os passos realizados antes do cálculo de aptidão
de um indivíduo. 62
(a) Função de ordenação aplicada para calcular a relevância dos
docu-mentos. 62
(b) Documentos ordenados pela relevância atribuída pela função de
ordenação. 62
4.6 Similaridade entre os pares (a) e (b) determinada pelo número de
carac-terísticas em comum. 64
(a) Exemplo de um par consulta-documento do conjunto de treino. 64 (b) Exemplo de um par consulta-documento do conjunto de teste. 64
4.7 Similaridade pelo método do cosseno. 64
5.1 Valor de NDCG para as dez primeiras posições da lista ordenada de cada
pasta do conjunto TD2003. 73
5.2 Valor de MAP encontrado pelo comitê para cada pasta do conjunto TD2003. 74
5.3 Valor de MAP encontrado pelo comitê para cada pasta do conjunto TD2004. 76
5.4 Valor de MAP encontrado pelo algoritmo SmoothRank para cada pasta
do conjunto TD2004. 76
5.5 Melhor função de ordenação descoberta para o conjunto TD2003. 77
5.6 Melhor função de ordenação descoberta para o conjunto TD2004. 77
5.7 Análise para determinar número máximo de gerações. 78
5.9 Análise da frequência das características nos indivíduos da última geração. 79
5.10 Tempo gasto em cada cenário. 80
5.11 Tempo gasto em cada cenário. 80
A.1 Melhor função de ordenação descoberta para o conjunto TD2003
estrutu-rada na notação convencional. 97
A.2 Melhor função de ordenação descoberta para o conjunto TD2004
Lista de Tabelas
4.1 Exemplos de terminais utilizados 54
4.2 Exemplo para comparar os resultados gerados pelos comitês
apresenta-dos nas equações 4-3 e 4-4 59
5.1 Características de baixo-nível [58] 68
5.2 Características de alto-nível e suas descrições [61] 68
5.3 Número de pares consulta-documento e cada subconjunto da TREC 69
5.4 Resultados obtidos para a coleção TREC – TD2003 71
5.5 Resultados da abordagem proposta, para a coleção TD2003, em
compa-ração com outros algoritmos do estado da arte 73
5.6 Resultados obtidos para a coleção TREC – TD2004 74
5.7 Resultados da abordagem proposta, para a coleção TD2004, em
compa-ração com outros algoritmos do estado da arte 75
5.8 Cinco características mais frequentes nos indivíduos da última geração
em relação a cada pasta (fold ) 79
A.1 Lista de características (features) disponíveis na coleção TREC da
Lista de Algoritmos
3.1 Algoritmo de Programação Genética 44
CAPÍTULO
1
Introdução
A humanidade sempre teve necessidade de registrar informações para perpetuar a história, descobertas, pensamentos, entre outros dados, para as próximas gerações. Entretanto, devido aos meios de armazenamento utilizados anteriormente, era comum diversas informações serem perdidas ao longo do tempo.
Atualmente, o meio de armazenamento digital tem se mostrado como uma forma confiável e prática para se guardar informações, sendo então abastecido diariamente com uma enorme quantidade de dados. Segundo um estudo apresentado por pesquisadores da Universidade do Sul da Califórnia, até 2007 a humanidade já havia armazenado o equivalente a 295 exabytes [40].
Ser capaz de armazenar essa quantidade de dados é um importante avanço, além disso, grande parte desses dados estão disponíveis na Web e podem ser acessados por qualquer pessoa de qualquer lugar do mundo através da Internet. Todavia, com isso surgem alguns problemas: como acessar essas informações de forma fácil e organizada, ou como encontrar o que se deseja nesse amplo universo.
1.1
Definição do Problema
Por conseguinte, surgem as máquinas de busca na Web para tentar resolver esses problemas. Os usuários desses mecanismos de busca devem formalizar suas necessidades de informação através de uma consulta e aguardar que esses sistemas sejam capazes de recuperar as informações desejadas.
Devido a grande quantidade de dados disponível na internet e a complexidade para o usuário conseguir expressar sua necessidade de informação de maneira clara e sem ambiguidade através de uma consulta, normalmente, um grande número de documentos é recuperado pelas máquinas de busca como resultado da consulta [3]. Não é nada prático para o usuário ter que analisar uma grande coleção de documentos para tentar encontrar aqueles que mais se assemelham à sua necessidade.
Assim, utiliza-se uma estratégia para diminuir esse trabalho de analisar uma lista inteira de documentos recuperados em busca da informação desejada. Essa estratégia visa,
1.2 Desafios 16
então, ordenar o conjunto de documentos recuperados de acordo como a relevância dos mesmos em relação à consulta realizada pelo usuário. Desta maneira, o usuário pode encontrar mais fácil e rapidamente as informações desejadas. Consequentemente, uma ordenação eficiente do conjunto de documentos recuperados é um importante componente em uma máquina de busca [3].
Contudo, caso o contrário ocorra, ou seja, a máquina de busca passe a apresentar os documentos na ordem incorreta – colocando os documentos menos relevantes no topo da lista e dificultando a informação desejada ser encontrada –, os usuários acabam perdendo a confiança neste mecanismo e tendem a parar de utilizá-lo. Atualmente, sabe-se da importância comercial e financeira dessas máquinas, portanto, há uma luta constante de seus responsáveis para que não haja diminuição no número de pessoas que utilizam o mecanismo oferecido por eles. Por conseguinte, o processo para aprender a ordenar documentos recuperados a partir da consulta de um usuário tem ganhado muita atenção.
1.2
Desafios
Há uma série de desafios para encontrar uma boa função de ordenação capaz de ordenar um conjunto de documentos, recuperados a partir de uma dada consulta de um usuário, o que torna a descoberta dessas funções um problema difícil.
Bollegala et al. [3] afirmam que existem diversos fatores que uma função de ordenação deve levar em consideração na Web para determinar a importância de um documento, como o conteúdo da página, a estrutura de links, a URL (Uniform Resource Locator da página, etc. Portanto, construir uma função de ordenação que pondere todas essas informações de naturezas distintas e que através delas consiga julgar a importância de um documento para uma consulta não é uma tarefa simples.
Além disso, declaram que o algoritmo para descoberta dessas funções, para poder ser utilizado em um mecanismo de busca na Web, deve ser rápido e escalável. Pois, as bases de dados trazem uma quantidade substancial de documentos, que devem ser manipulados não apenas durante o processo de aprendizado da função, mas também durante o processo de recuperação – no qual a máquina de busca deve recuperar e ordenar uma grande quantidade de documentos como resposta a uma consulta do usuário. A base de dados LETOR [61], por exemplo, contém mais de 25 milhões de documentos, associados a uma determinada consulta, com informações de relevância que podem ser utilizados para aprender uma função de ordenação.
Na literatura existem diversas funções de ordenação bem conhecidas, como Okapi BM25 [81], TFIDF [80], etc. Entretanto a maioria dessas funções são desenvol-vidas manualmente por especialistas considerando: heurísticas, a própria experiência, ob-servações, teorias estatísticas, etc [95].
1.3 Objetivo 17
Neste trabalho, utiliza-se a Programação Genética (PG), uma técnica de Inteli-gência Artificial, para descobrir funções de ordenação de forma automática. É sabido que as funções de ordenação, em geral, não apresentam o mesmo desempenho quando aplica-das a cenários distintos. De fato, diferentes estudos na área de recuperação de informação mostram que o desempenho de uma função de ordenação depende muito do contexto onde ela é aplicada [1, 30, 102]. Não apenas as características da coleção de documentos, mas até mesmo propriedades da consulta elaborada pelo usuário podem influenciar na defini-ção do contexto [95]. Portanto, aprender a encontrar a fundefini-ção de ordenadefini-ção ideal para um contexto específico é um grande desafio. Assim, a vantagem de se utilizar a Programação Genética é que a aprendizagem dessa função de ordenação ideal pode ser realizada de forma automática para diferentes contextos.
Entretanto, a PG é uma técnica computacionalmente cara, pois essa estratégia aproxima-se à uma busca exaustiva pela melhor solução em todo um espaço de busca. Logo, uma abordagem comum que visa reduzir esse problema é desenvolver essa técnica de forma paralela [38].
O desenvolvimento de soluções paralelas tem sido explorado com maior frequên-cia atualmente, devido à quantidade de processadores multi-núcleo disponíveis no mer-cado. Entretanto, este trabalho visa explorar o ganho de desempenho obtido com o para-lelismo através de placas gráficas, em virtude do baixo custo dessas Unidades Gráficas de Processamento – Graphical Processing Units (GPUs) – que normalmente apresentam uma quantidade de núcleos bem superior à dos processadores tradicionais (CPU – Central Processing Unit).
1.3
Objetivo
Desta forma, o objetivo deste trabalho é desenvolver um método para descobrir funções de ordenação para motores de busca utilizando as técnicas Programação Genética e Paralelismo com unidades de gráficas de processamento de propósito geral.
1.4
Trabalhos Relacionados
A Programação Genética é uma técnica bem consolidada na literatura que vem sendo aplicada para a resolução de múltiplos problemas e, em geral, alcançando bons resultados. Especificamente para problemas relacionados ao contexto de recuperação de informação, essa técnica é explorada no tratamento dos mais variados tópicos [10, 11] como: indexação de documentos [31, 44]; indução, representação e otimização de consultas [29, 92]; cluster de documentos [32]; e ordenação de documentos [21].
1.4 Trabalhos Relacionados 18
Diferentes trabalhos propõem a utilização da programação genética e de algorit-mos genéticos para a descoberta de funções de ordenação para sistemas de recuperação de informação. Historicamente, em 1998, Pathak [70, 71] desenvolveu um trabalho que com-binava linearmente múltiplas funções de similaridade de maneira adaptativa, atribuindo pesos a cada função de acordo com o julgamento de usuários humanos. Ao final do texto, como trabalho futuro, Pathak propõe a aplicação de algoritmos genéticos para a desco-berta automática desses pesos. No ano seguinte, Fan et al. [21] – trabalho que conta com a participação de Pathak – apresentam uma solução que descobre automaticamente funções de ordenação para diferentes consultas e coleções utilizando a programação genética.
Com o passar dos anos, em diferentes pesquisas, Fan et al. [22, 20, 23, 24, 26, 25, 27] corroboram a eficiência da aplicação da programação genética no contexto de recuperação de informação, analisando e otimizando as diferentes etapas da PG visando alcançar resultados ainda melhores. Além disso, esses trabalhos reforçam a importância da descoberta de funções de ordenação específicas para cada cenário distinto, pois uma dada função, usualmente, não apresenta o mesmo desempenho quando aplicada a coleções ou até mesmo a consultas diferentes.
Em relação ao tempo gasto pelas soluções, é necessário destacar que Fan et al. relatam a importância de executar o programa mais de uma vez, pois como a PG é uma meta-heurística estocástica, quanto maior o número de execuções, maior serão as chances de encontrar melhores resultados. Desta forma, em [20], no qual o foco é avaliar a importância da função de aptidão no processo evolutivo, é relatado que a solução gasta, em média, 70h (setenta horas) para ser executada 10 (dez) vezes. Já em [26], no qual o objetivo é descobrir funções de ordenação, o tempo médio gasto pela solução é de 5 (cinco) dias – também para 10 (dez) execuções. Os autores ressaltam neste último, que o tempo de execução pode ser reduzido utilizando múltiplos processadores e processamento paralelo. Vale denotar ainda que nessas pesquisas, geralmente, a população não excede 200 (duzentos) indivíduos, enquanto neste presente trabalho foram realizados testes, normalmente, com populações de 1000 (mil) indivíduos.
Durante o mesmo período, Oren [68] apresenta um trabalho semelhante aos citados. Contudo, ao contrário dos trabalhos inicias de Pathak – que eram focados na utilização da PG para combinação de funções de similaridade já conhecidas –, Oren utiliza terminais com informações estatísticas mais genéricas. Além disso, Oren realiza uma análise relevante em relação ao tempo de execução da estratégia, o tamanho da população e o número de gerações. Utilizando um cluster de 40 (quarenta) computadores, com uma população de 100 (cem) indivíduos, por 50 (cinquenta) gerações, a solução gastou aproximadamente 3h (três horas) para ser executada uma única vez. Oren argumenta que aumentar o número de indivíduos por geração, provavelmente, levaria à descoberta de funções melhores, contudo o tempo gasto pela estratégia aumentaria exponencialmente.
1.4 Trabalhos Relacionados 19
Wang et al. [95], considerando a proposta de Fan et al. [23, 24], desenvolve uma estratégia chamada ARRANGER (Automatic geneRation of RANking functions by GEnetic pRogramming). Além da programação genética, Wang propõe a utilização de uma técnica também aplicada neste trabalho: a combinação/fusão de ordenadores. Consequentemente, demonstra que a combinação de funções de ordenação melhora não apenas o desempenho, mas a coerência de um sistema de recuperação de informação. Entretanto, Wang não apresenta nenhuma discussão sobre o tempo gasto pela solução desenvolvida.
O trabalho de Almeida et al. [15], apesar de um pouco distinto, também se as-semelha ao proposto nesta dissertação. Almeida et al. propõem uma abordagem de com-ponentes combinados para a descoberta de funções de ordenação utilizando programação genética. Desta forma, ao invés de informações estatísticas da coleção, os terminais uti-lizados são, na verdade, partes de funções de ordenação bem conhecidas, expressivas e legitimamente eficazes no contexto de recuperação de informação. Além desses, outros trabalhos – como os apresentados por Trotman [93] e Yeh et al. [98] – têm sido propostos ao longo do tempo, demonstrando a viabilidade da PG para a descoberta de funções de ordenação.
Um outro aspecto importante a ser considerado é possibilidade de desenvolver a Programação Genética explorando o paralelismo, sendo este um tema também discutido na literatura. Bethke [2], na década de 70, conduz um estudo sobre a paralelização de Algoritmos Genéticos e Cantu-Paz [6], em uma análise histórica, relata que os primeiros trabalhos registrados nessa área datam da década de 50. No início dos anos 90, Koza [52] apresenta uma das primeiras implementações paralelas de Programação Genética, o que desencadeou no desenvolvimento de diferentes outros trabalhos com esse mesmo objetivo [94, 48].
Em função do desenvolvimento tecnológico, as primeiras soluções paralelas de PG foram propostas para computadores de arquitetura paralela. Todavia, com o surgimento e difusão das placas gráficas de propósito geral, começaram a ser apresentados trabalhos que implementavam a PG explorando o paralelismo através desses dispositivos. Yu et al. [99] introduzem uma das primeiras implementações paralelas de Algoritmos Genéticos utilizando GPUs e apresentam excelentes resultados quanto à redução do tempo, quando contrastada com uma solução linear executada na CPU.
A partir disso, surgiram outras pesquisas que discutiram os pormenores envol-vidos na implementação de Algoritmos Genéticos [36, 101, 97, 75] e da Programação Genética [36, 35, 12, 57, 84, 85, 83] em GPUs e evidenciaram a eficiência alcançada com a aplicação do paralelismo. Em relação à PG, diferentes autores afirmam que a avaliação da aptidão é a etapa que consome mais tempo em todo o processo evolutivo [85, 56]. Desta forma, a execução da mesma em paralelo, certamente resultará em um ganho de
desem-1.5 Contribuições da Dissertação 20
penho. Esta é uma relevante consideração, pois, por limitações tecnológicas, geralmente, não é possível realizar todo o processo evolutivo em paralelo na GPU. Por conseguinte, neste trabalho, a análise de aptidão foi executada em paralelo, conforme relatado no Capí-tulo 4, que discorre também sobre outras decisões tomadas para tratar questões associadas ao desenvolvimento de PG paralela em GPUs.
É importante destacar que este trabalho se difere dos demais, uma vez que não foi encontrado nenhum que desenvolva uma solução paralela de programação genética em GPU aplicada ao problema de geração de funções de ordenação. Além disso, nesta abordagem, ainda são associadas outras técnicas como a agregação de ordenadores e a estratégia Lazy. O trabalho proposto por Wang et al., em [96], de certa forma, se assemelha ao apresentado neste dissertação. Contudo, Wang et al. fazem uso de uma estratégia evolucionária cooperativa e o paralelismo é explorado através de processadores multi-núcleo e não através de unidades gráficas de processamento.
1.5
Contribuições da Dissertação
Apesar da quantidade extensa de trabalhos relacionados ao tema desta disserta-ção, podem ser destacadas algumas contribuições que foram alcançadas com o desenvol-vimento deste trabalho.
Inicialmente, a aplicação da estratégia de programação genética desenvolvida em paralelo utilizando unidades gráficas de processamento especificamente para o problema de descoberta de funções de ordenação em sistemas de recuperação de informação.
Consequentemente, a utilização do paralelismo e de bibliotecas específicas que otimizam a realização de atividades em GPUs, possibilitaram a proposição da utilização de técnicas computacionalmente caras como a estratégia Lazy (discutida mais detalhada-mente no Capítulo 4). Se vista de uma forma simples, tal estratégia visa encontrar em tempo de execução uma solução para um problema, levando em consideração caracterís-ticas específicas daquela instância do problema em questão. Neste trabalho, foi sugerida uma maneira singular de aplicação desta técnica, voltada para uma etapa particular do pro-cesso de descoberta de funções de ordenação – a fase de validação – descrito no Capítulo 2.
Houve, também, proposição de uma função de aptidão que combina métricas de avaliação de sistemas de recuperação de informação, sendo que tal combinação não foi encontrada em nenhum outro trabalho da área. Essa função de aptidão tem um papel crucial na programação genética, como pode ser visto no Capítulo 3.
Soma-se ainda o fato de que, como essa função de aptidão pode mudar depen-dendo da natureza da base de dados utilizada, a implementação permite a modificação dessa função de maneira simples, mesmo ela sendo calculada em paralelo na GPU.
1.6 Estrutura da Dissertação 21
Por fim, destaca-se que os resultados obtidos através de experimentos com a solução apresentada neste trabalho superaram os resultados de diversas abordagens reconhecidas na literatura. Desta forma, como foi utilizada uma coleção amplamente difundida neste contexto, tais resultados poderão ser utilizados como linha de base para novos trabalhos nesta área.
1.6
Estrutura da Dissertação
O restante deste trabalho está organizado como a seguir. O Capítulo 2 trata sobre o processo de recuperação de informação, os sistemas que realizam tal processo e o papel das funções de ordenação neste contexto. No Capítulo 3 são apresentados os principais conceitos associados à Programação Genética, bem como a utilização do paralelismo em GPUs para otimizar o desempenho dessa estratégia. Na sequência, o Capítulo 4 traz a abordagem proposta, discutindo em detalhes cada um de seus aspectos fundamentais. Já o Capítulo 5 revela e analisa os resultados obtidos através da aplicação de tal abordagem. Ao final, no Capítulo 6 é apresentada a conclusão e os possíveis trabalhos futuros.
CAPÍTULO
2
Recuperação de Informação e Funções de
Ordenação
Neste capítulo são discutidos os conceitos fundamentais associados aos Siste-mas de Recuperação de Informação(SRI). Como apresentado no Capítulo 1, o foco deste trabalho está na utilização da Programação Genética, explorando o paralelismo, visando aprender de forma automática funções de ordenação para SRIs. Assim, é importante com-preender os aspectos primordiais desses sistemas, como: os objetivos dos mesmos, como se dá o processo de recuperação, os principais modelos de recuperação de informação, as métricas utilizadas para realizar a avaliação desses sistemas, entre outras características.
2.1
Conceitos Básicos
O termo Recuperação de Informação (Information Retrievel) pode ter um signi-ficado muito amplo e é aplicado a diferentes cenários. Considerando-o como um campo de estudo acadêmico, Manning et al. [59], apresentam a seguinte definição para tal termo:
Recuperação de Informação (RI) é encontrar o material (geralmente documentos) de uma natureza não estruturada (geralmente texto) que satisfaz uma necessidade de informação de um usuário a partir de grandes coleções (geralmente armazenadas em computadores).
Tal definição pode fazer com que essa área pareça muito restrita ou específica para a atuação de apenas alguns profissionais. Entretanto, com o advento da Internet – consequentemente da Web – e a crescente quantidade de informações geradas e disponibi-lizadas através dessa infraestrutura, é possível verificar que a RI tornou-se uma constante diária na vida da maioria dos usuários de computador.
Apesar de ganhar destaque, principalmente, após o crescimento da Web, devido à necessidade de encontrar dados nesse amplo universo de informações, o termo Recu-peração de Informaçãofoi utilizado pela primeira vez por Calvin Mooers em 1950 [63]. Portanto, pode se afirmar que este não é um tema incipiente. Contudo, ainda assim é uma área bastante explorada e pesquisada devido a sua grande complexidade e aplicabilidade.
2.2 Objetivos 23
Desta forma, um Sistema de Recuperação de Informação (Information Retrieval System) é um sistema capaz de armazenar, recuperar, e manter informações. Ou seja, é um programa que auxilia o usuário a encontrar as informações que o mesmo deseja. Logo, o objetivo principal de um SRI é minimizar o trabalho necessário para que o usuário acesse essas informações, o que demanda a redução do tempo de cada um dos passos que levam a esse resultado (por exemplo, geração da consulta, busca pelos documentos associados a consulta, ordenação dos documentos recuperados etc) [51]. Na Seção 2.2 serão discutidos com mais detalhes os objetivos de um SRI e na Seção 2.3 serão apresentados os passos básicos de um processo de recuperação de informação.
De acordo com Manning et al. [59], um SRI pode ser caracterizado pela sua escala de atuação, assim, existem três categorias de destaque. A primeira é a busca na web, que exige sistemas eficientes capazes de buscar uma grande quantidade de documentos armazenados em diversos computadores espalhados pelo mundo, levando em consideração os aspectos particulares da Web, como trabalhar com hipertexto e evitar ser enganado por algum site no processo de ordenação de documentos (pois alguns tendem a manipular o conteúdo da página para aparecem em melhores posições, em virtude da importância comercial da Web). A segunda é a busca de domínio específico, institucional, empresarial, um cenário totalmente diferente do anterior, pois os arquivos estão, normalmente, armazenados em uma base de dados centralizada e as coleções são compostas de documentos corporativos, artigos científicos, patentes etc. A última é a recuperação de informação pessoal, ferramenta comum nos sistemas operacionais modernos, para auxiliar os usuários encontrarem seus arquivos pessoais de forma rápida e fácil.
2.2
Objetivos
Como afirmado previamente, o objetivo geral de um SRI é minimizar todo o tra-balho necessário para que um usuário encontre a informação desejada. Desta forma, para determinar o sucesso desses sistemas deve-se levar em consideração a real necessidade do usuário. Em alguns casos, pode ser exigido apresentar todos os itens que, de alguma forma, estão relacionados à necessidade de informação do mesmo. Já em outros, talvez al-guns itens possam ser deixados de lado e somente os mais associados àquela busca sejam apresentados.
Em outras palavras, o sistema deve ser capaz de recuperar os itens relevantes para uma determinada necessidade do usuário, ou seja, os itens que contém as informações desejadas pelo mesmo [51]. Assim, a relevância é um aspecto crucial na qualidade dos resultados gerados por um SRI.
2.3 Processo de Recuperação de Informação 24
De acordo com [45], a relevância pode ser definida como a medida ou grau de correspondência ou utilidade existente entre um texto ou documento e uma consulta ou requisição de informação determinada por um usuário. Desta forma, tem um caráter extremamente subjetivo, pois dois usuários com a mesma necessidade de informação podem dar julgamentos diferentes para um mesmo documento recuperado.
Ceri et al [8] afirma que, na verdade, a relevância só pode ser conhecida pelo sistema após o julgamento do usuário. Portanto, poderia ser dito que a função de um SRI é de tentar “adivinhar” um conjunto D de documentos relevantes relacionados a uma determinada consulta, ck, através do cálculo da função de relevância R(ck, dj) para cada documento dj ∈ D. Na Seção 2.4 será visto que a relevância depende do modelo de recuperação adotado e na Seção 2.5 será discutido a sua importância na avaliação do desempenho de um SRI.
Em [51], é dito que antes de ser capaz de recuperar os itens relevantes para uma determinada necessidade do usuário, um SRI deve primeiro permitir que o usuário consiga expressar sua necessidade de informação para que essa busca possa ser realizada. Existem múltiplos desafios que devem ser enfrentados para se alcançar esse objetivo, esses desafios serão discutidos na seção seguinte (2.3).
Outro objetivo do sistema de recuperação é, após o processo de busca, apresentar os documentos recuperados de maneira que o usuário possa encontrar os itens mais relevantes de forma prática. Uma estratégia originalmente utilizada era apresentar os itens ordenados pela data e hora de criação, modificação ou inserção na coleção. Entretanto, os sistemas mais modernos realizam uma ordenação mais inteligente, baseados na potencial relevância daquele item para o usuário. O foco deste trabalho está exatamente em alcançar esse objetivo específico.
2.3
Processo de Recuperação de Informação
O processo de recuperação de informação envolve diversas etapas, que devem ser cumpridas para alcançar os objetivos apresentados na seção anterior. Cada uma dessas etapas possui suas idiossincrasias e devem ser otimizadas para garantir o melhor desempenho do sistema de recuperação como um todo.
Antes de analisar cada etapa, existem alguns aspectos importantes que devem ser conhecidos para a compreensão do processo de recuperação de informação: a atividade do usuário e a visão lógica dos documentos [1]. Ambos são apresentados nas seções seguintes e, posteriormente, o processo de recuperação em si.
2.3 Processo de Recuperação de Informação 25
2.3.1
Atividade do Usuário
A atividade do usuário é definida em função de seus objetivos e da maneira de acessar os dados através de um SRI. Baeza-Yates e Ribeiro-Neto [1] afirmam que existem duas atividades básicas que um usuário pode realizar sobre os dados ou informações: recuperação e navegação. A recuperação é o processo mais comumente conhecido e disponibilizado pelos sistemas de RI com interface na Web, no qual o usuário tem uma necessidade específica e está em busca de informações associadas à mesma. Já na navegação, o usuário inicia com um interesse em um tema amplo e através de uma interface interativa consegue navegar por ramificações particulares desse tema, ou seja, consegue acessar informações mais peculiares a um assunto específico associado ao tema principal.
Portanto, para realizar a atividade de recuperação, o usuário de um SRI deve traduzir sua necessidade de informação em uma consulta, seguindo uma linguagem deter-minada pelo próprio sistema. Em geral, essas consultas são formadas por um conjunto de palavras que estão semanticamente relacionadas com a informação desejada.
2.3.2
Visão Lógica dos Documentos
Em geral, os documentos de uma coleção são representados através de um conjunto de palavras-chave ou termos de indexação. Essas palavras-chave formam uma visão lógica do documentoa que estão associadas e podem ser extraídas diretamente do texto do documento ou podem ser escolhidas por um analisador humano.
O ideal seria, realmente, utilizar todo o texto para alcançar uma completa visão lógica do documento, entretanto, em função dos custos computacionais é comum resumir essa visão a somente um conjunto de palavras-chave representativas. Uma técnica comumente aplicada para isso é a remoção de preposições, artigos, pronomes, advérbios, conjunções como: a, o, para, e, um, alguém, agora, ou etc. Desta forma, elimina-se palavras que em geral são irrelevantes ou pouco expressivas no texto do documento. É comum, também, considerar apenas a raiz gramatical de diversas palavras semelhantes para a escolha da palavra-chave. A essas transformações dá-se o nome de operações de texto [1], diversas outras operações como essas podem ser aplicadas no texto com o objetivo de encontrar uma visão lógica que seja capaz de representar o documento, entretanto, contendo apenas um conjunto reduzido de termos de indexação.
2.3.3
Processo de Recuperação
Como dito anteriormente, o processo de recuperação de informação é divido em diversas etapas, a Figura 2.1 apresenta uma arquitetura de software simples e genérica
2.3 Processo de Recuperação de Informação 26
definida em [1] para descrever esse processo.
Banco de Dados Textual Índice Operações de Texto Operações de Consulta Busca Ordenação Indexação Módulo Gerenciador de BD Interface de Usuário texto texto visão lógica visão lógica consulta docs recuperados lista invertida necessidade do usuário docs ordenados avaliação do usuário
Figura 2.1: O processo de recuperação de informação [1].
Inicialmente, o gerente de banco de dados deve definir alguns aspectos relaciona-dos ao banco de darelaciona-dos textual a ser utilizado como: quais documentos serão utilizarelaciona-dos, quais operações serão aplicadas no texto, e o modelo de texto (ou seja, a estrutura do texto e quais elementos poderão ser recuperados). Lembrando que, após aplicar essas opera-ções de texto sobre os documentos, são obtidas as visões lógicas dos mesmos.
O gerente de banco de dados deve realizar o processo de indexação utilizando o módulo gerenciador de banco de dados a partir das visões lógicas obtidas anterior-mente, para a construção do índice. O índice é uma estrutura de dados que busca otimizar o tempo gasto para encontrar as informações desejadas, portanto tem papel fundamental no desempenho do sistema. Uma estratégia comum para construir tal estrutura é por meio de listas invertidas [8].
O processo de recuperação só pode ser iniciado após a indexação do banco de dados. Portanto, após esse passo, o usuário deve apresentar sua necessidade de informação através da interface fornecida. Essa entrada do usuário passará pelas mesmas operações de texto aplicadas sobre os documentos do banco de dados, para extração dos termos mais significativos.
2.4 Modelos de Recuperação de Informação 27
Após a etapa anterior, o sistema pode aplicar algumas operações de consulta para melhor representar aquela necessidade do usuário em uma consulta otimizada para ser processada pelo sistema. Em geral, os sistemas atuais exigem que o usuário insira diretamente a consulta a ser realizada pelo sistema, ao invés de informar somente sua necessidade de informação. Isso leva a consultas inadequadas (pois, normalmente, os usuários não têm o conhecimento necessário para criar uma consulta eficaz), o que leva a resultados ruins.
Em seguida, considerando a consulta gerada, o processo de busca é realizado utilizando a estrutura de índice construída anteriormente. Esse processo recupera então os documentos relacionados com a necessidade do usuário. O próximo passo é o último a ser realizado antes de se apresentar os resultados para o usuário e de acordo com Goker e Davies [30] é um passo de extrema importância nos sistemas de recuperação.
Assim, o foco deste trabalho está exatamente nesta etapa, na qual os documentos recuperados no estágio anterior passam por um processo de ordenação (ranking), visando colocar no topo do resultado os documentos que sejam mais relevantes para aquela determinada consulta apresentada. Desta forma, evita-se que o usuário tenha que analisar um extenso conjunto de documentos, podendo focar apenas nos que mais se aproximam à sua necessidade de informação.
Kowalski [51] afirma que a ordenação é um dos conceitos mais importantes em um SRI. Algoritmos de ordenação utilizam, normalmente, a frequência de distribuição de termos em documentos, além de outras informações estatísticas, para determinar a similaridade entre uma consulta e um documento. Desta forma, são capazes de criar uma lista ordenada com os documentos mais relevantes no topo. Goker e Davies [30] afirmam ainda que esses algoritmos reduzem drasticamente o tempo gasto pelo usuário para encontrar a informação desejada e que eles estão intimamente relacionados com os modelos de recuperação de informação adotados (tais modelos serão discutidos na Seção 2.4).
Na sequência, após a etapa anterior, o usuário verifica o conjunto de documentos ordenados em função da relevância dos mesmos para aquela necessidade específica e busca pela informação desejada. É importante levar em consideração também nesta etapa a avaliação do usuário, pois considerando os documentos que forem indicados como relevantes pelo usuário pode ser possível gerar um nova consulta capaz de melhor representar a necessidade de informação do mesmo.
2.4
Modelos de Recuperação de Informação
Os modelos de recuperação de informação estão diretamente relacionados com os algoritmos de ordenação. Na verdade, Goker e Davies [30] atestam que esses modelos
2.4 Modelos de Recuperação de Informação 28
predizem e explicam o que um usuário considerará relevante, a partir da consulta gerada pelo mesmo. Ou seja, esse modelos são a base para o processo de recuperação de documentos relevantes de uma coleção a partir de uma consulta do usuário [8].
Existem, basicamente, três modelos clássicos de RI: booleano [55], de espaço vetorial [86, 88] e probabilístico [28]. Cada um deles será brevemente discutido nas seções seguintes: 2.4.2, 2.4.3 e 2.4.4, respectivamente.
É importante conhecer tais modelos, pois eles determinam como será realizada a recuperação e ordenação dos documentos relevantes. Como este trabalho foca na des-coberta automática de funções de ordenação, o modelo adotado é determinante em todo o processo de descoberta, bem como nos resultados encontrados. A seguir é apresentada uma caracterização formal de um modelo de RI.
2.4.1
Caracterização Formal
Antes de conhecer os modelos de recuperação mais utilizados é importante caracterizá-los de maneira formal, para facilitar a compreensão dos mesmos. Ceri et al [8] apresenta a seguinte quádrupla para a definição de um modelo de recuperação de informação (MRI):
MRI= {D,C, F, R(ck, dj)} (2-1) Sendo:
• D é o conjunto de visões lógicas (ou representações) dos documentos na coleção (chamados de dj);
• C é o conjunto de visões lógicas (ou representações) das necessidades de informa-ção do usuário, conhecidas como consultas (chamadas de ck);
• F é a estratégia para modelar as representações dos documentos, consultas e suas relações;
• R(ck, dj) é a função de ordenação que associa um número real a uma representação de documento dj, denotando sua relevância para a consulta ck.
Assim, a função de ordenação R(ck, dj) que define a ordem de relevância dos documentos em relação a uma consulta cké componente impactante do modelo de RI.
2.4.2
Modelo Booleano
O modelo de recuperação Booleano visa determinar a relevância de um docu-mento através da álgebra Booleana e da teoria dos conjuntos. É um modelo simples, no qual as consultas são definidas como expressões booleanas sobre os termos de indexação (por exemplo, “sol AND praia OR montanha NOT chuva”).
2.4 Modelos de Recuperação de Informação 29
A importância de um termo de indexação ti é representada por pesos binários: um peso pi j ∈ 0, 1 é associado à tupla (ti, dj). Assim, a relevância é considerada uma propriedade binária, ou seja, a relevância de um documento em relação a uma consulta é dada pela função R(c, dj) podendo assumir os valores 0 ou 1 [8].
A principal limitação do modelo booleano clássico é que não se pode gerar uma ordenação de fato entre os documentos recuperados, eles são apenas classificados como: relevantes ou não-relevantes (classificação binária). Logo, algumas extensões foram pro-postas para este modelo visando superar essa desvantagem, sendo essas extensões basea-das nos modelos que serão vistos a seguir.
2.4.3
Modelo de Espaço Vetorial
O modelo de espaço vetorial foi um dos primeiros modelos a surgir e tem sido amplamente utilizado e desenvolvido até os dias de hoje. Nesse modelo, documentos e consultas são representados como vetores em um espaço no qual cada dimensão corresponde a um termo comum no vocabulário de ambos [45].
Assim, cada termo ti no vocabulário V é representado por uma base em um espaço ortonormal com |V | dimensões. Logo, uma consulta c e um documento dj ∈ D podem ser representados no espaço vetorial como:
~c = |V |
∑
i=1 wic· ti, ~dj= |V |∑
i=1 wi j· ti (2-2)Sendo wic e wi j os pesos atribuídos aos termos ti para a consulta c e cada documento dj, de acordo com esquema de ponderação definido. Assim, considerando que cada documento e cada consulta são representados como vetores, é possível calcular de maneira algébrica o grau de similaridade entre dois documentos ou entre um documento e uma consulta [8]. Uma maneira simples de se calcular essa similaridade entre dois vetores é através do produto interno, como apresentado a seguir:
sim(dj, c) = dj· c (2-3) Esse valor de similaridade encontrado poderia ser utilizado como o valor de relevância do documento dj em relação à consulta c. É sabido ainda que, o produto interno Euclidiano em um espaço ortonormal definido pelos termos ti∈ V é equivalente a uma métrica muito conhecida, chamada de medida dos cossenos. Tal métrica é obtida calculando o cosseno do ângulo α formado entre os dois vetores no espaço, que pode ser expresso da seguinte maneira:
2.4 Modelos de Recuperação de Informação 30 sim(dj, c) = dj· c = kdjk × kck × cos(α) = dj· c kdjk × kc|k = ∑ |V | i=1(wi j× wic) q ∑|V |i=1(wi j)2× q ∑|V |i=1(wic)2
Além da função de similaridade adotada, o esquema de ponderação definido tam-bém afeta diretamente na avaliação da relevância. Um esquema de ponderação bastante difundido é através da fórmula t f × id f , que define o peso de um termo i em um docu-mento dj∈ D (ou uma consulta c) como:
wi, j = t fi j× id fi = t fi j× log N d fi (2-4) Sendo t f (term frequency) a quantidade de vezes que o termo i aparece no documento dj, ou seja, a frequência desse termo no documento; e id f (inverse document frequency) o inverso da frequência do número de documentos nos quais o termo i aparece. Por isso, é o resultado da divisão do número total de documentos na coleção, N, pela quantidade de documentos na coleção que contém o termo i, d fi(essa fórmula para o id f possui variações, mas essa é uma das mais conhecidas [80] e foi definida por Jones em [47]). De maneira geral, pode-se perceber que o peso de um termo em um documento tende a crescer com sua frequência dentro do documento e com a raridade do documento dentro da coleção [80].
2.4.4
Modelo Probabilístico
O modelo probabilístico visa ordenar os documentos estimando a relevância dos mesmos através da teoria da probabilidade. Portanto, considera a probabilidade de um documento dj ser relevante para um consulta c, dado que o usuário formulou a consulta utilizando o termo t.
Tal modelo, introduzido por Robertson e Sparck Jones [82], utiliza uma medida de similaridade para ordenar os documentos. De uma maneira simples, esta medida define
2.5 Avaliação de Desempenho 31
a probabilidade de um documento ser relevante para uma consulta e a probabilidade dele não ser relevante, como pode ser visto na equação abaixo:
sim(dj, c) =
P(R | dj) P( ¯R| dj)
(2-5) Sendo P(R | dj) a probabilidade de relevância de um documento dj para a consulta c. Além disso, considera-se que existe um conjunto R formado apenas por documentos relevantes para esta consulta. Consequentemente, o complemento de R (ou seja, ¯R) é um conjunto composto por todos os documentos que são considerados não relevantes para a consulta c [91].
As probabilidades P(R | dj) e P( ¯R| dj) podem ser calculadas através de dife-rentes estratégias. Uma função de ordenação bastante utilizada e conhecida baseada no modelo probabilístico é a função BM25 [59] que considera não apenas a frequência dos termos no documento, mas também o tamanho dos documentos, conforme apresentado na equação abaixo: sim(dj, c) =
∑
t∈c logN ni× (k1+ 1) × ft,d k1((1 − b) + b × (td/tmed)) + ft,d (2-6) sendo:• N: número de documentos na coleção;
• ni: número de documentos nos quais o termo t aparece; • ft,d: a frequência do termo t no documento d;
• td: o tamanho do documento d;
• tmed: o tamanho médio dos documentos na coleção;
• k1e b: parâmetros que permitem um ajuste fino da função de ordenação.
Desta forma, a partir de um consulta c e um documento dj em uma coleção, o modelo probabilístico busca, através de um processo de inferência, estimar a relevância do mesmo para uma determinada consulta do usuário.
Na verdade, a abordagem apresentada acima é apenas uma dentre as existentes para o modelo probabilístico. Como exemplo de outras abordagens temos a de 2-Peixes [4], de Linguagens [74], Rede Bayesiana [60].
2.5
Avaliação de Desempenho
A relevância é um critério muito importante na avaliação de desempenho de um Sistema de Recuperação de Informação. Sabe-se que o objetivo de um SRI é retornar um conjunto de documentos relevantes para uma determinada consulta, portanto, a precisão
2.5 Avaliação de Desempenho 32
desse conjunto resposta retornado pode ser medida de acordo com a relevância dos documentos a ele pertencentes.
Como a relevância apresenta um caráter subjetivo, normalmente, são utilizadas duas medidas de avaliação bastante conhecidas: precisão e revocação. Ambas avaliam a qualidade do resultado gerado por um conjunto desordenado de documentos recuperados. De uma maneira simples, a precisão verifica a porção de documentos recupe-rados que são relevantes para a consulta, indicando assim a “solidez” do sistema. Já a revocação leva em consideração o conjunto total de documentos relevantes, ou seja, ve-rifica dentre todos os documentos relevantes a porção que foi efetivamente recuperada, indicando a “completude” do sistema.
De uma maneira mais formal, considerando um conjunto de documentos D e uma consulta c, pode-se definir como RR o conjunto de documentos realmente relevantes recuperados para essa consulta. Além disso, definir como NR o conjunto de documen-tos não-relevantes recuperados para a consulta e como RN o conjunto de documendocumen-tos relevantes que não foram recuperados. Assim, podemos definir:
Precisão= |RR|
|RR + NR| (2-7)
e
Revocação= |RR|
|RR + RN| (2-8)
Como a Precisão e Revocação são métricas que consideram um conjunto de-sordenado de documentos, foram definidas outras métricas, também para determinar o desempenho de um SRI, mas que levam em consideração a ordem dos documentos retor-nados (ou seja, a lista gerada pelo algoritmo de ordenação) como:
• Precisão Média (AveP – Average Precision): apesar de ser chamada de precisão média, essa medida verifica o desempenho médio do sistema sobre todos os mentos relevantes da coleção, levando em consideração a ordem em que os docu-mentos considerados relevantes são recuperados.
AveP= ∑|D|i=1 r(di) × (∑ i j=1r(dj) i |R| (2-9)
sendo que r(d) assume o valor 0 se o documento d não é relvante e 1 caso seja relevante. |R| o número total de documentos relevantes na coleção e |D| é o número total de documentos retornados.
• Média das Precisões Médias (MAP – Mean Average Precision): uma medida muito mais razoável, pois não considera apenas uma consulta para julgar o
desem-2.6 Descoberta de Funções de Ordenação 33
penho do sistema e sim um conjunto de consultas. Desta forma, calcula a média dos valores de precisão média obtidos por cada uma das consultas c ∈ C, sendo |C| o número total de consultas.
MAP= ∑ |C|
q=1AvePc
|C| (2-10)
• Ganho Acumulado Descontado (DCG – Discount Cumulative Gain): uma métrica bastante adotada atualmente. Ao contrário das métricas anteriores, que sempre consideram um julgamento de relevância binário, o DCG é capaz de manipular múltiplos níveis de relevância, por exemplo: 3 (muito relevante), 2 (relevante), 1 (pouco relevante) e 0 (não relevante). Desta forma, calcula a utilidade (ganho) de um documento naquela posição na lista ordenada de documentos relevantes recuperados. Tal ganho é acumulado desde o topo da lista até o final da mesma, considerando que documentos muito relevantes são mais úteis quando aparecem no início da mesma. DCG= rel1+ p
∑
i=2 reli log2i (2-11)sendo relia relevância multinível do documento na posição i e p a última posição da lista a ser analisada.
• Ganho Acumulado Descontado Normalizado (NDCG – Normalized Discount Cumulative Gain): basicamente a métrica DCG normalizada, permitindo portanto a utilização desse valor para comparar algoritmos de ordenação distintos.
NDCGp=
DCGp
IDCGp (2-12)
Sendo o IDCG o valor ideal do DCG e p a última posição a ser analisada da lista.
2.6
Descoberta de Funções de Ordenação
A maioria das funções de ordenação são geradas por especialistas que conhecem as bases de dados e que através de informações estatísticas e conhecimento empírico são capazes de definir essas funções. Entretanto, uma mesma função de ordenação normalmente não apresenta o mesmo desempenho para base de dados diferentes ou mesmo para consultas diferentes à mesma base. Logo, existem estratégias que buscam aprender automaticamente funções de ordenação.
No contexto de recuperação de informação, o problema de aprender funções de ordenação (Learning to Rank – L2R) consiste em duas etapas principais: a etapa de treino na qual é utilizada uma base de dados pré-processada – a relevância de cada
2.6 Descoberta de Funções de Ordenação 34
documento para cada consulta foi previamente determinada por um analisador humano – para aprender a função de ordenação; e a etapa de teste, na qual a função de ordenação aprendida é aplicada para ordenar um conjunto de documentos recuperados pela máquina de busca de acordo com uma consulta do usuário.
De uma maneira mais formal, esse processo é realizado considerando um con-junto de consultas C = {c1, ..., c|C|)}, sendo |C| a quantidade total de consultas no con-junto C. Ainda, um concon-junto de documentos D = {d1, ..., d|D|}. Assim, a base de dados de treino é formada por um conjunto de pares consulta-documentos, (ci, dj) ∈ C × D, no qual cada elemento recebe um julgamento de relevância (i.e., um rótulo) r(qi, dj) indi-cando a relação entre qie djidentificada por um operador humano. Portanto, uma função de ordenação deve colocar no topo da lista os documentos com o maior julgamento de relevância, e para analisar o resultado retornado deve-se verificar o valor de relevância dos documentos recuperados, bem como a posição que eles aparecem na lista.
O objetivo do aprendizado é construir uma função de ordenação que consiga julgar os documentos recuperados de forma mais próxima ao julgamento realizado pelos operadores humanos. Para verificar a qualidade dos resultados gerados pelas funções de ordenação, normalmente, são utilizadas a métricas descritas na seção anterior (Seção 2.5). Tanto MAP quanto NDCG [46] têm sido utilizados tradicionalmente pela comunidade de recuperação de informação para avaliar as ordenações geradas por mecanismos de busca na Web.
Diversas experiências demonstram que mesmo funções bastante conhecidas nem sempre alcançam resultados satisfatórios em todas as coleções [87, 102]. Por exemplo, uma mesma função de ordenação pode ter desempenho insatisfatório para algumas cole-ções e por outro lado apresentar ótimos resultados quando aplicada a uma coleção espe-cífica. Desta forma, afirma-se que essas funções são sensíveis ao contexto de aplicação, apresentando resultados diferentes não apenas para coleções distintas, mas para diferen-tes consultas dentro da mesma coleção. Logo surgem os problemas de como selecionar a função de ordenação correta a partir de um conjunto de funções disponíveis ou de como desenvolver uma nova função para um contexto específico, contexto que talvez nem seja completamente conhecido.
De acordo com Wang et al. [95] quase todas as funções de ordenação existentes foram manualmente projetadas baseadas em experiência, heurísticas e teorias de probabi-lidade. Além disso, os mesmos afirmam que o fato de ter alguns parâmetros ajustados para adaptá-las às distintas coleções, não torna essas funções dinâmicas, uma vez que a estru-tura das mesmas permanece inalterada e o resultado obtido com tal ajuste é restrito. Desta forma, é importante utilizar uma abordagem capaz de prover um mecanismo automático para descoberta de funções de ordenação adaptadas a um contexto específico.
2.6 Descoberta de Funções de Ordenação 35
determinada coleção, vale ressaltar que durante o processo de descoberta há uma certa liberdade na estruturação das mesmas, o que torna a estratégia realmente dinâmica, diferente de uma abordagem de adaptação de funções estáticas e bem conhecidas. Logo, acredita-se que essa estratégia dinâmica leve a funções melhores, pois permite explorar estruturas mais diversas considerando as peculiaridades de cada coleção.
Uma alternativa para descobrir funções de ordenação de forma automática é através da utilização da Programação Genética, portanto, essa técnica será discutida em detalhes no capítulo seguinte (Capítulo 3).
CAPÍTULO
3
Programação Genética e Paralelismo em GPU
Neste capítulo é exposto o paradigma de Programação Genética (PG), uma im-portante técnica da inteligência artificial que visa resolver problemas de otimização, mais especificamente relacionados à aprendizagem computacional. Portanto, são apresentados: o histórico do surgimento dessa técnica, seus elementos principais e um algoritmo básico de PG.
3.1
Histórico
A Programação Genética foi apresentada no início da década de 90 e é um dos ramos mais novos de uma área conhecida como Computação Evolucionária (CE). Essa é uma área de pesquisa na ciência da computação inspirada na teoria da evolução de Darwin, que teve início décadas antes. Desde os anos 40, já haviam propostas para utilização dos princípios Darwinianos para resolver problemas de forma automatizada, uma delas partiu de Turing que propôs uma “busca evolucionária ou genética” [19].
Na verdade, a Computação Evolucionária pode ser dividida em ramos principais: Algoritmos Genéticos (AG) [42], Programação Genética (PG) [52], etc. Apesar de cada técnica ter sido desenvolvida por pesquisadores diferentes, todas elas compartilham o mesmo princípio básico da teoria da evolução, na qual os indivíduos mais adaptados ao meio vão sendo mantidos, enquanto outras espécies vão sendo extintas, garantindo que as características favoráveis à sobrevivência sejam mantidas e as desfavoráveis sejam descartadas. Holland [43] afirma que programas de computador que evoluem de uma maneira que lembra a seleção natural podem resolver problemas complexos que nem mesmo seus criadores compreendem completamente.
A Programação Genética pode ser vista como uma extensão dos Algoritmos Genéticos, a diferença básica está na representação desses indivíduos que passarão pelo processo de evolução. Nos AG Canônicos, os indivíduos – também chamados de cromossomos – são formados por estruturas lineares e com tamanho, normalmente, fixo. Já os indivíduos da PG costumam ter tamanhos distintos e são representados por estruturas
3.2 Principais Elementos da PG 37
não lineares – em geral, árvores sintáticas. Na seção seguinte será detalhada a estrutura de um indivíduo da PG, bem como os demais elementos principais.
Apesar de recente, a Programação Genética tem sido amplamente aplicada a diferentes problemas de otimização, como mineração de dados, previsão financeira, projetos de engenharia, obtendo resultados efetivos para problemas complexos que, normalmente, não poderiam ser encontrados com métodos convencionais [95].
3.2
Principais Elementos da PG
Nesta seção são descritos os principais elementos existentes na Programação Genética. São apresentados os indivíduos da PG, bem como, as operações que esses passam durante o processo evolucionário e outros aspectos importantes nesse processo para a resolução de problemas.
3.2.1
População e Indivíduos
Na Programação Genética, um grande número de indivíduos, chamados de população, são manipulados a cada geração. Um indivíduo representa uma tentativa de solução para o problema alvo. A forma mais comum de se armazenar e representar um indivíduo é através de uma árvore. Assim, cada indivíduo é composto por terminais – que assumem a posição de nós folhas nas árvores – e funções – nós internos. A Figura 3.1 apresenta um exemplo de árvore que representa a expressão (t5+ t1) ∗ log(t7).
Figura 3.1: Indivíduo representado através de uma árvore.
Portanto, deve ser definido um conjunto de terminais e funções que serão utilizados para compor os indivíduos das populações [72].
O conjunto dos terminais, normalmente, é formado por variáveis (por exemplo, a, b), constantes (que podem ser previamente definidas ou geradas aleatoriamente) e funções sem argumentos.
Já o conjunto de funções é composto por operadores aritméticos (+, −, ∗, /), funções matemáticas (log, seno, tangente etc), operadores booleanos (and, or, not), entre outros.
3.2 Principais Elementos da PG 38
A escolha dos terminais e funções que serão utilizados para geração dos indiví-duos influencia diretamente nos resultados alcançados pela PG. Considerando isso, Koza [52] define uma importante propriedade denominada fechamento que determina que tanto terminais quanto subárvores (que resultarão em algum valor de retorno) podem ser utili-zados em qualquer posição em uma função. Forçando assim, o tratamento de casos que geram exceção (como divisão por zero) e a conversão automática entre tipos (inteiros, decimais, booleanos).
Além disso, outra propriedade também levada em consideração é a suficiência que indica que o conjunto de terminais e as funções escolhidos devem ser capazes de expressar uma solução para o problema [72]. Assim, deve-se ter um cuidado na escolha desses elementos, pois qualquer combinação dos mesmos deverá gerar uma solução para o problema e a qualidade dessa solução também é determinada por esses elementos. Em alguns casos, pode não ser possível definir esses conjuntos de forma precisa, e acabar gerando indivíduos que são apenas aproximações das soluções desejadas. Entretanto, experimentos demonstram que mesmo essas aproximações acabam gerando resultados satisfatórios.
De uma maneira mais simplificada, o processo geral de algoritmo evolucionário pode ser visto através de um fluxograma, como apresentado na Figura 3.2.
População Pais Filhos Seleção de Pais Operadores Genéticos Seleção de sobreviventes Inicialização Terminação
Figura 3.2: Fluxograma de um esquema comum de um algoritmo evolucionário [19].
3.2 Principais Elementos da PG 39
3.2.2
População Inicial
Normalmente, a população inicial de qualquer algoritmo evolucionário é com-posta por indivíduos gerados de forma aleatória combinando os elementos do conjunto de terminais e de funções. Existem diferentes métodos para realizar tal atividade, contudo, para todos eles deve ser definida a profundidade máxima das árvores que representam os indivíduos. A escolha dessa profundidade também deve ser feita levando em conside-ração o problema a ser resolvido, pois definirá a quantidade de funções e terminais que comporão os indivíduos.
De acordo com Poli et al. [72], os métodos mais conhecidos e utilizados para geração da população inicial são:
Método Full
Este método gera de forma aleatória indivíduos formados por árvores completas, ou seja, todos os nós folhas estão no mesmo nível de profundidade. Assim, para formação do indivíduo, o método seleciona aleatoriamente elementos do conjunto de funções e preenche os nós internos da árvore até atingir o nível anterior à profundidade máxima definida e então completa o próximo nível com elementos do conjunto de terminais. A Figura 3.3 apresenta um indivíduo gerado pelo método full.
Figura 3.3: Indivíduo gerado pelo método full.
Método Grow
Já o método grow permite a criação de árvores com tamanhos e formatos mais variados. Pois, assim como o método full, ele gera indivíduos de forma aleatória e respeitando a profundidade máxima, entretanto, nem sempre essa profundidade é atingida. Durante o processo de geração do indivíduo, o método pode a qualquer momento selecionar um elemento do conjunto de terminais e inserir em um nó da árvore. Observe a Figura 3.4 com a representação de indivíduo gerado pelo método grow.
3.2 Principais Elementos da PG 40
Figura 3.4: Indivíduo gerado pelo método grow.
Método Ramped-half-and-half
Este método é uma combinação dos dois métodos anteriores, assim, parte de população é formada através do método full e outra parte através do método grow. Koza [52] afirma que esses dois métodos separados não geram uma grande variedade de indivíduos, mas a aplicação de ambos na construção da população inicial acaba resultando em uma diversidade maior de indivíduos, característica normalmente desejável nessa etapa da PG.
3.2.3
Função de Aptidão
Uma função de aptidão é utilizada na PG, essa função retorna um número real associado a cada indivíduo. Portanto, as tentativas de solução, representadas pelos indivíduos, podem ser medidas e ordenadas de acordo com os valores retornados. Assim, como um indivíduo representa uma solução para resolver o problema alvo, o valor retornado pela função de aptidão deve medir apropriadamente quão bem esse indivíduo é capaz de resolver tal problema.
3.2.4
Seleção
A seleção é uma importante etapa na PG, pois nesta fase são escolhidos os indi-víduos sobre os quais serão aplicados os operadores genéticos, ou seja, quais indiindi-víduos serão utilizados para compor a próxima geração. Em geral, essa escolha é feita conside-rando o valor de aptidão desses indivíduos. Existem múltiplos métodos para realização desta etapa, a seguir são apresentados os mais comumente utilizados.