UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA – UEFS BACHARELADO EM ENGENHARIA DE COMPUTAÇÃO EDSON DOS SANTOS ARAÚJO Uso de Algoritmos de Otimização e Inteligência Artificial no Desenvolvimento de um Motor de Busca com Contextualização em Redes Sociais na WWW FEIRA DE SANTANA 2012 EDSON DOS SANTOS ARAÚJO Uso de Algoritmos de Otimização e Inteligência Artificial no Desenvolvimento de um Motor de Busca com Contextualização em Redes Sociais na WWW Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em Engenharia de Computação da UEFS, como requisito parcial para a obtenção do grau de Bacharel em Engenharia de Computação. Orientador: professor mestre Thiago D’Martin Maia Departamento de ciências exatas Universidade Estadual de Feira de Santana FEIRA DE SANTANA 2012 Dedico a todos que contribuíram com minha caminhada até aqui, de forma especial à minha família, principalmente a minha mãe Elizabeth Fernandes dos Santos e a meu pai José Cardoso Araújo, que tanto fizeram e fazem, e aos meus amigos, principalmente ao Professor Thiago Maia, que acompanhou e ajudou em todas as etapas da minha graduação. RESUMO Sistemas que tem como objetivo armazenar e compartilhar informações entre usuários do mesmo, como Motores de Busca e Redes Sociais, podem ser impedidos por problemas de contextualização de informações, sendo que cada indivíduo que utiliza o sistema é único, necessitando de respostas precisas e relevantes. Observando tal necessidade, o objetivo deste trabalho foi a implementação de um Motor de Busca com teor semântico, além da utilização de algoritmos de Otimização na tentativa de melhorar os relacionamentos de usuários de Redes Sociais na Internet. Estratégias como Web Crawler, indexador, e spider atrelados a um banco de dados são aplicadas para desenvolvimento do Motor de Busca. Para tratarmos os relacionamentos entre usuários, foi feita a implementação do Motor de Busca e foram usados algoritmos de Otimização (heurísticas e meta-heurísticas). Além disso, chegou-se a estudar o uso de Redes Neurais Artificiais (RNAs), com o intuito de aumentar a eficiência da busca realizada pelo Motor de Busca. Para utilizar algoritmos de Otimização necessita-se de uma função-objetivo para guiá-los na busca da melhor solução contextualizada. Neste trabalho, foram utilizados exemplos do Problema de Designação Quadrática (Quadratic Assignment Problem, QAP) para teste dos algoritmos de Otimização. Palavras-chave: Motor de Busca. Redes Sociais. Algoritmos de Otimização. Meta-heurísticas. Problema de Designação Quadrática. ABSTRACT Computational systems that aims to store and share information between its users, as Search Engines and Social Networks, by example, can be hindered by problems of background information, each individual system’s user being unique, requiring the most accurate and relevant answers. Noting this needs, the objective here content, besides improve the was to the use implement a Search Engine of Optimization algorithms in relationships of users of Social with semantic an Networks attempt to on the Internet. Strategies such as Web Crawler and spider linked to a database are applied to development between users, has been of the Search made the Optimization algorithms were Engine. To treat the implementation of Search relationships Engine and used (heuristics and metaheuristics). Furthermore, was studied the use of Artificial Neural Networks (ANNs), in order to increase the efficiency of the search conducted by the Search Engine. To use Optimization algorithms is needed an objectivefunction to guide them in finding the best solution in context. In this work, we used examples of the Quadratic Assignment Problem (QAP) for testing of Optimization algorithms. Keywords: Search Engine. Social Networks. Optimization Algorithms. Meta-heuristics. QAP. LISTA DE FIGURAS LISTA DE TABELAS SUMÁRIO 9 1 INTRODUÇÃO Em principio, no uso da Internet por uma massa de usuários de escala planetária, para representar o acesso a sites por esses usuários utilizou-se o termo Web 1.0. Com o avanço da Internet, seguiu-se o termo Web 2.0 que denota a Internet como uma plataforma, em que usuários podem se comunicar através de Redes Sociais e blogs, entreter-se com arquivos multimídia, como vídeos, e, principalmente, procurar por informações com sites de busca. O próximo passo no desenvolvimento do uso da Internet é a chamada Web 3.0, também chamada de Web semântica, pois apresenta a contextualização das informações disponíveis na rede mundial. É nesse contexto que está a ênfase deste projeto de Trabalho de Conclusão de Curso. Com o emergente crescimento do uso de Redes Sociais na rede mundial, e da quantidade de dados e informações disponíveis inclusive em sites de busca, deparamo-nos com problemas com grande quantidade de informação relativamente desprezível e até inútil, e indesejadas ligações entre usuários de Redes Sociais sem contextualização social real, resultadas de buscas que não correspondem ao que efetivamente se está pesquisando. Por exemplo, suponha-se uma pesquisa na rede mundial sobre o tópico ‘neurônios’, em que uma resposta esperada seriam sites sobre Redes Neurais Artificiais (RNAs), sendo que no entanto o que se obtenha sejam informações sobre redes neurais humanas (RECUERO, 2009). As Redes Sociais existiam muitos anos antes da criação da Internet, com suas formas de relacionamento e seus paradigmas socioculturais, sendo tais paradigmas utilizados para estabelecer normas em todo agrupamento de pessoas que pudesse ser chamado de Rede Social. Utilizando esses paradigmas, e lições obtidas no uso dos mesmos, empresas seguem metodologias para se criar o melhor relacionamento possível entre indivíduos, melhorando assim o desempenho dos funcionários. Em tais metodologias podem ser utilizados algoritmos de Otimização para encontrar o melhor relacionamento entre funcionários (OLIVEIRA, 2009). A obtenção da solução ótima para os problemas de Otimização combinatória pode ser teoricamente feita pela enumeração de cada possibilidade de solução, e posterior análise de custo das mesmas. Porém, dependendo das características do problema, o conjunto de soluções possíveis comumente é tão grande, que se torna 10 impossível avaliar cada um de seus elementos em tempo aceitável. Este é o caso dos problemas NP-difíceis [Garey e Johnson, 1979]. Tal classe é composta de problemas para os quais é improvável a existência de um algoritmo determinístico e eficiente que os resolva exatamente. Como alternativa, utilizam-se Algoritmos Genéticos (AGs) (HOLLAND, 1975) e outras meta-heurísticas que obtêm uma solução boa, em um tempo computacional razoável. Como nas Redes Sociais existe uma replicação imensurável de dados e informações, pode-se utilizar tais algoritmos citados para rastrear informações para usuários das redes, tentando-se, por exemplo, encontrar os melhores relacionamentos e as melhores informações sob algum critério que não se desvie dos paradigmas culturais de determinada Rede Social. Esses mesmos algoritmos podem ser utilizados para otimizar as buscas realizadas no Motor de Busca, atentando para estratégias de aprendizagem, podendo-se contextualizar as buscas em relação aos usuários. Essa contextualização pode ser realizada utilizando-se parâmetros pessoais dos usuários, como localização (cidade, estado, país), emprego, gosto em esportes, lazer etc., pois tais dados são disponibilizados nos perfis dos usuários nas Redes Sociais. Algoritmos de Inteligência Artificial (IA) serão utilizados para melhorar o desempenho do cruzamento de usuários e informações das Redes Sociais e sites de buscas. O principal algoritmo de IA utilizado será o PCM (Perceptron de múltiplas camadas), também chamado de algoritmo de backpropagation. Tal algoritmo é composto por RNAs, que simulam neurônios humanos e suas ligações sinápticas (Haykin, 2001). O trabalho está dividido em introdução, fundamentação teórica, em que serão abordados conceitos sobre o assunto, embasando o leito para a apresentação das funcionalidades do sistema, no tópico métodos e materiais. O tópico resultados traz os aqueles obtidos no decorrer do projeto, e a conclusão aborda as dificuldades encontradas, as soluções e as possíveis melhorias do sistema. 1.1 OBJETIVO O objetivo principal deste projeto é o desenvolvimento de um Motor de Busca contextualizado, utilizando especificações de usuários de Redes Sociais para coletar informações e prover a sugestão de melhores relacionamentos entre estes membros de Redes Sociais. 11 Observando a dificuldade em encontrar Redes Sociais disponíveis para coleta das informações de seus usuários, um dos objetivos específicos é criar um sistema básico com algumas páginas Web, na tentativa de simular uma Rede Social. Outros tópicos secundários para implementação e análise são algoritmos de IA para utilizar como estratégias de aprendizagem, na tentativa de encontrar um padrão para as buscas de usuários específicos. Também a criação de funções especificas do projeto, como estratégias para indexação, ranking de páginas e função-objetivo para guiar os algoritmos de Otimização. 12 2 FUNDAMENTAÇÃO TEÓRICA A seguir são apresentados tópicos referentes a Algoritmos de Otimização e ao Problema de Designação Quadrática (QAP), sendo que se utilizaram exemplos do QAP para testar os algoritmos de Otimização. Em seguida são apresentados tópicos referentes à implementação de um Motor de Busca. 2.1 RECUPERAÇÃO DA INFORMAÇÃO A Recuperação da Informação, termo estabelecido por Calvin Moores em 1950, é baseada em diversas subáreas do conhecimento em Informática, partindo da interseção da Ciência da Informação com a Ciência da Computação, a Estatística e outras subáreas. Um processo de Recuperação da Informação consiste em analisar os documentos armazenados em um sistema e devolver os links referentes ao assunto pesquisado pelo usuário. Uma área correlata à Recuperação da Informação é conhecida como Mineração de Dados, que pode ser descrita como o processo de análise de conjuntos de dados com o objetivo de encontrar padrões em dados que representem informações úteis e não triviais, relacionadas ou não. Para tanto, utilizam-se métodos matemáticos, sendo estes heurísticos ou exatos. A Mineração de Dados é parte de um processo maior e mais abrangente, a saber, o de descoberta de conhecimento em Bancos de Dados (PITONI, 2002). Em (AMO, 2002) encontramos uma descrição mais funcional, a qual divide a Mineração de Dados em sete etapas (Figura 1), que são: • Limpeza de dados: etapa em que são eliminados ruídos e dados inconsistentes; • Integração de dados: etapa em que diferentes fontes de dados podem ser combinadas produzindo um único repositório de dados; • Seleção: etapa em que são selecionados os atributos que interessam ao usuário; • Transformação dos dados: etapa em que os dados são normatizados em um formato apropriado para a aplicação de algoritmos de mineração; 13 • Mineração: etapa essencial do processo, consistindo na aplicação de técnicas inteligentes a fim de se extraírem padrões de interesse; • Avaliação ou Pré-processamento: etapa em que são identificados os padrões interessantes de acordo com critério(s) do usuário; • Visualização dos resultados: etapa em que são utilizadas técnicas de representação de conhecimento a fim de apresentar ao usuário o conhecimento minerado. Figura : Etapas da Mineração de Dados. Fonte: Amo (2002). 2.2 FERRAMENTAS DE BUSCA WEB Com o crescimento do número de páginas Web, surge a necessidade da criação de algum sistema que auxiliasse o usuário na tarefa de pesquisar informação nos conteúdos disponíveis na Internet. Para atender a essa demanda, foram desenvolvidas diversas ferramentas com o propósito de tornar menos complexo o processo de busca. Elas se classificam em três tipos: Diretórios, Motores de Busca e Meta-motores (CENDÓN, 2001). 2.2.1 Diretórios Os diretórios foram a primeira solução proposta para organizar e localizar os recursos da Web, introduzidos quando o conteúdo da Web ainda era pequeno o suficiente 14 para permitir que houvesse coleta de dados de forma não automática. Os diretórios organizam os sites que compõem sua base de dados em categorias, as quais podem conter subcategorias, ou seja, os sites são organizados hierarquicamente por assuntos, o que permite ao usuário localizar informações, navegando, progressivamente, nas subcategorias. A grande deficiência no mero uso de Diretórios é a seleção de sites coletados, que era realizada por pessoas. Observando-se o aumento do número de sites para a escala de centenas de milhões e mais, tal tarefa tornou-se inviável, assim como a criação de subdiretórios para a imensa gama de especificidades de assuntos abordados. 2.2.2 Motor de Busca Ao contrário do que ocorre no simples uso de Diretórios selecionados “a olhos e mão”, os Motores de Busca não pré-organizam hierarquicamente as páginas que coletam. Ocorrendo uma quantidade menor de seleções de páginas Web, visando a aumentar a abrangência de suas bases de dados e a coletar o maior número de páginas Web, com da utilização de um software chamado robô. Como suas bases de dados são extremamente grandes, podendo alcançar centenas de milhões de páginas, permite-se ao usuário localizar os itens desejados mediante buscas por palavras-chave, ou, às vezes, a busca em linguagem natural. Os Motores de Busca surgiram quando o número de recursos na Web adquiriu proporções tais que impedia a coleta por meio manual e a busca apenas pela navegação. O primeiro dos Motores de Busca baseados em robôs foi o Web Crawler, proposto em abril de 1994 (COELHO, AZEVEDO, 2008). O funcionamento básico do Web Crawler consiste em varrer as páginas Web, capturando dados de cada página e armazenando-os em sua base de dados. O Web Crawler contém uma lista de links chamada Seeds, sendo que cada link dessa lista é utilizado para visitar uma página Web. Quando ocorre uma visita, a página é capturada, ou seja, são armazenados dados seus na base de dados do Web Crawler e todos os links encontrados na página capturada são armazenados na Seeds para futuras visitas. A Figura 2 ilustra o funcionamento de um Web Crawler. 15 Figura : Esquema de funcionamento de um Web Crawler. Fonte: Amaral (2011). Então se pode observar que com apenas uma visita a uma página Web, pode-se varrer uma parte maior da própria Web, pois a lista Seeds é sempre realimentada com links encontrados nas páginas, links que levam inclusive a páginas inéditas na varredura em questão. 2.2.2.1 Indexador O indexador é utilizado para armazenar as páginas no banco de dados do Motor de Busca, sendo que, quando um robô visita uma página, existe a necessidade de se armazenar tal página seguindo determinados critérios. O indexador obtém informações das páginas e cria uma relação semântica entre essas páginas, na tentativa de contextualizar as páginas, armazenando páginas com relações semânticas na mesma localização (SHKAPENYUK, SUEL, 2003). Esse armazenamento, levando em consideração a relação semântica, é utilizado quando ocorre uma busca de página pelo usuário, e a resposta do sistema para esse usuário serão as páginas que têm relação com o assunto pesquisado. O modelo de indexação utilizado neste projeto é a indexação automática, segundo (Santos, 2009), um sucinto conceito de tal tópico: “Sendo a indexação a representação de um documento ou das perguntas feitas pelos usuários, no ato de busca, por meio de linguagens naturais ou uma linguagem documentária, a indexação automática seria a execução deste processo por meio de programas ou algoritmos de computador que “varrem” o 16 documento (ou registro de documentos) e realizam a representação do conteúdo sem a intervenção do documento.” A indexação automática pode ser dividida em três possibilidades fundamentais, que são: • Indexação assistida por computador durante o armazenamento: sistema que auxilia o processo de armazenamento dos termos de indexação extraídos pelo indexador na etapa de análise conceitual. São facilitadores do processo de indexação, uma vez que proporcionam, por meio de janelas de ajuda, notas explicativas sobre os termos e seus relacionamentos e, às vezes, acesso a documentos já indexados, para solução de dúvidas; • Indexação semi-automática: sistema que indexa automaticamente o documento e, se necessário, permite a edição e a validação dos termos pelo documentalista; • Indexação automática: sistema sem nenhuma validação por parte do documentalista; os termos de indexação são armazenados diretamente como descritores do documento. Razões para se utilizar indexação automática: No artigo “Lenguaje natural e indización automatizada”, escrito por Méndez Rodrigues e Moreira González e encontrado em Santos, 2009, são identificados quatro fatores que solidificam a utilização da indexação automática: • O alto custo da indexação humana, em termos de tempo, suscitou a ideia de explorar de maneira eficaz, em um tempo reduzido, o volume constantemente crescente de informações. Essa questão motivou estudos para se comparar a indexação humana e a indexação automática; • O aumento exponencial da quantidade de informação eletrônica e a proliferação de textos completos; • A Gestão Eletrônica de Documentos (GED) e a informatização dos processos documentais; 17 • A automatização de processos cognitivos, e a pesquisa crescente e os avanços em Processamento de Linguagens Natural (PLN). A automatização de processos cognitivos permite o surgimento de sistemas inteligentes, que aliados ao PLN podem lidar com a atividade de indexação. Porém, os autores alertam para complexidade da linguagem natural e afirmam que um sistema não pode lidar globalmente com a mesma, sendo capaz apenas de reconhecer cadeias de caracteres. Observando-se as vantagens citadas acima e notando o grande volume de dados e informações contidos na Internet, pode-se considerar a necessidade e a importância de uma boa estratégia de indexação de documentos, ou páginas da Web, para Motores de Busca. No entanto, a dificuldade encontrada na indexação de páginas Web está na sua independência, tanto na estrutura, quanto na exposição. Novas páginas Web são lançadas na Internet com uma alta frequência, independente de assunto e idioma. Portanto a maneira mais encontrada de descobrir conteúdo em páginas Web é analisando seus metadados, que descrevem as informações contidas na página, como as tags que são usadas para qualificar partes da página, como autor, título, palavras-chave, entre outras. Com tais tags podemos encontrar uma contextualização do assunto abordado na página. O método utilizado para armazenar as páginas, neste projeto, foi o uso da linguagem descritora Extensible Markup Language (XML), criando um arquivo xml para cada página, contendo o link, o título e as palavras-chave. Esta abordagem foi utilizada visando a reduzir a quantidade de espaço utilizado no banco de dados, pois se armazenássemos a página inteira, utilizaríamos muito mais espaço, já que uma página tem um tamanho, em média, de 125Kb, enquanto um arquivo xml tem o tamanho de 4Kb. XML é uma linguagem de marcação de dados, que provê um formato para descrever dados semiestruturados. Isso facilita declarações mais precisas do conteúdo e resultados mais significativos na utilização de XML em múltiplas plataformas. É um padrão para a formatação de dados, ou seja, uma maneira de organizar informações. Tal organização é compreensível tanto para computadores quanto para humanos (DUARTE, 2010). O uso de XML traz alguns benefícios, como buscas mais eficientes, por sua organização, e o desenvolvimento de aplicações flexíveis para Web. 18 2.2.2.2 Ranking de Páginas Web Com a grande quantidade de páginas Web armazenada pelos Motores de Busca e, a quantidade de resultados que podem ser apresentados ao usuário, tem-se a necessidade de ordenar os resultados, na tentativa de prover páginas ordenadas para melhorar o acesso do usuário às mesmas. Assim surgem as estratégias de Ranking de páginas, observando que Rankings existem não somente para páginas Web. As estratégias de Ranking organizam os resultados, colocando em ordem sequencial as páginas, sendo que todos os Motores de Busca (de sites como Yahoo, Google e Bing) organizam seus resultados segundo estratégias de ordenação de resultados. Uma das estratégias mais famosas para criar um Ranking de páginas Web, usando teoria de grafos, é PageRank, um algoritmo iterativo que designa um peso numérico para cada nó com o propósito de estimar sua importância no grafo. O algoritmo foi projetado por Brin e Page em 1998 (BENEVENUTO et al., 2011) para ordenar resultados de busca do protótipo de Motor de Busca da Google. A característica fundamental do PageRank é considerar o critério de popularidade de uma página, tendo as páginas que mais são apontadas por outras páginas, um maior grau de popularidade, sendo assim as primeiras no topo da lista de resultados de uma busca. A equação seguinte representa matematicamente o critério da PageRank: onde i é um nó, S(i) é o conjunto de páginas que apontam para i, Nv é denominado o número de arestas que saem do nó v, e o parâmetro d é um fator que pode ter valor entre 0 e 1 (BENEVENUTO et al., 2011). 2.2.3 Meta-motores Para obterem-se resultados melhores em uma pesquisa de páginas na Web, é recomendável que se utilize várias ferramentas, já que há pouca superposição na informação recuperada por motores diferentes. 19 Para melhorar esse processo, foram criados os Meta-motores, que permitem a execução de uma mesma busca em mais de uma ferramenta (motores ou diretórios), exibindo todos os resultados encontrados em uma só lista. 2.2.4 Armazenamento de Dados O volume de informações disponíveis atualmente na World Wide Web (WWW) e a perspectiva de seu aumento como exponencial são muitíssimo expressivos, ademais se levado em consideração o nível das tecnologias de comunicação e armazenamento de dados. Com essa perspectiva de crescimento, surge o problema de armazenamento, e de controle de fluxo de informações, com a tendência a se modificarem paradigmas de gerenciamento de dados. Segundo Yamaoka (2003), em 2000 foi estimado que a Web continha cerca de 2,5 bilhões de documentos na Web visível com crescimento de 7,5 milhões de documentos ao dia, e que a Web oculta¹ era cerca de 500 vezes maior. Observado que a expressão Web oculta refere-se ao conteúdo que os atuais mecanismos de busca têm dificuldades de recuperar e indexar. Em dezembro de 2001, os maiores sistemas de busca informaram os seguintes números em relação ao tamanho de suas bases: Figura : Bases de dados. Fonte: Yamaoka (2003). 20 Observando tal cenário, analisamos a melhor maneira para armazenar as páginas Web e suas informações. No entanto, observa-se a necessidade de armazenar apenas o titulo da página, as palavras-chave e o endereço da página, pois assim reduzimos a quantidade de informações referentes à página Web, podendo-se armazenar as mesmas em documentos, como os dos tipos xml ou de documentos não estruturados. Um documento não estruturado refere-se a arquivos de texto, os quais não seguem nenhuma ordem primária de armazenamento como a XML. Em contrapartida, a liberdade proporcionada pelo tipo não estruturado é maior, como a de armazenar várias páginas no mesmo documento, utilizando cada linha para armazenar as informações de cada página Web. 2.2.4.1 Estruturas de Dados Estruturas de dados são estratégias utilizadas para prover um armazenamento organizado de dados, proporcionando uma maior eficiência no momento da pesquisa. Existem destas vários tipos, como Listas, Filas, Pilhas, Árvores, entre outras. Neste trabalho utilizamos principalmente duas estruturas de dados, árvore binária de busca e tabela de hashing. A árvore é uma das estruturas de dados mais utilizadas e úteis. A estrutura em árvore é uma estrutura hierárquica, na qual um segmento é o principal e dele se derivam todos os demais. Esse mesmo desenho se repete nos segmentos derivados, e a semelhança que existe com uma árvore tradicional ocorre quando se compara esse segmento básico ao tronco de uma árvore, os demais aos galhos, até que finalmente se chega às folhas. A tabela de hashing é uma estrutura que utiliza índices para armazenar e acessar seus dados, sendo que, para melhor entendimento, precisa-se definir o que seja o espaço de chaves e o de índices. Denomina-se S(k), espaço de chaves, ao conjunto de todos os valores possíveis que a chave K possa assumir. Por exemplo, se uma chave é a placa de um carro, qual o seu espaço de chaves? Resposta = são 3 letras e 4 números, ou seja, 26 x 26 x 26 x 10 x 10 x 10 x 10 = 175.000.000 de possibilidades. S(i), espaço de índices, é o conjunto de todos os valores que o índice possa assumir. Por conta do uso da função de hashing, esta técnica também é conhecida como “transformação de chaves”. Como o universo de chaves é muito maior do que o de índices, claramente a função tende a mapear diversas chaves em um mesmo índice. 21 A utilização de árvores e tabelas de hashing neste trabalho se deu pela velocidade de acesso a cada estrutura, tendo as mesmas, respectivamente, custos de O(log n) e O(n), observando que O(n) refere-se ao pior caso da tabela de hashing, na busca, sendo o ideal O(1) (KANTEK, 2007). 2.2.5 Algoritmos de Aprendizagem Algoritmos de aprendizagem são utilizados na tentativa de ensinar algum padrão à máquina. Um dos algoritmos mais utilizados para aprendizagem de máquina é a Rede Neural Artificial (RNA), que é uma técnica de IA que tenta simular em máquinas o funcionamento do cérebro humano. Estruturalmente as RNAs são conhecidas por modelos conexionistas, e se assemelham à rede neural biológica pela composição de seus neurônios e pela conexão entre eles (TONSIG, 2000). As RNAs são compostas por nós que recebem informações e as transferem mediante conexões entre as camadas, definidas como camada de entrada, intermediária e de saída, como ilustrado na Figura 4. Figura : Rede Neural e suas camadas. Fonte: Tonsig (2000). A propriedade mais importante das RNAs é a habilidade de aprender e com isso melhorar seu desempenho. Isso é realizado por meio de um processo iterativo de ajustes dos seus pesos, o treinamento. O aprendizado ocorre quando a RNA atinge uma solução generalizada para uma classe de problemas. 22 Haykin (2001) descreve uma RNA como um processador maciço e paralelamente distribuído, constituído de unidades de processamento simples, que tem a propensão natural para armazenar conhecimento experimental e torná-lo disponível para uso. As RNAs se assemelham ao cérebro em dois aspectos: o conhecimento é adquirido pela rede, por meio de um processo de aprendizagem, e as forças de conexão entre os neurônios, os pesos sinápticos, são utilizados para armazenar o conhecimento. Uma RNA é implementada com base nas características do problema a ser investigado, sendo esta treinada a partir de uma base de casos, de modo que a mesma seja capaz de generalizar situações futuras (SCHWALBERT, 2007). 2.3 REDES SOCIAIS As Redes Sociais podem ser definidas como um sistema de nós e elos, representando um conjunto de participantes autônomos, unidos por ideias, valores ou interesses compartilhados. Há uma valorização das relações, em detrimento das estruturas hierárquicas. As primeiras tentativas de análise de Redes Sociais se deram na década de 30 com o desenvolvimento da sociedade e seus pequenos subconjuntos sociais (OLIVEIRA, 2009). A sociometria é a representação métrica das relações interpessoais dentro de um grupo social, visando a identificar as características dos vínculos interpessoais entre os seus membros, bem como seu modo de funcionamento e sua organização psicossocial. Por meio dela, torna-se possível discernir padrões de atração, repulsa e indiferença entre indivíduos que compõem um determinado grupo. Pelos motivos apresentados, podemos observar a possibilidade de tratarmos tais relacionamentos entre usuários com um grafo, como na Figura 5, verificando suas afinidades e localização. Observamos, pela grande quantidade de usuários de Redes Sociais, o tamanho e quantidade de relações possíveis em tal grafo, e com isso podemos definir esse relacionamento como um problema NP (polinomial não determinístico). Por isso, neste trabalho, utilizaremos algoritmos de Otimização Combinatória para sugerir tais relacionamentos da melhor maneira. 23 Figura : Exemplo de Sociograma. Fonte: (Oliveira, 2009). Antes de utilizarmos um algoritmo específico, testamos algumas heurísticas e meta-heurísticas com exemplos do QAP, retirados do site QAPLib (de QAP Library). Experimentos com Redes Sociais datam da década de 1960, com o experimento de Milgram, em que estudou o grau de separação entre as pessoas. Ele enviou aleatoriamente uma quantidade de cartas a várias pessoas, solicitando que as repassassem a outra pessoa específica. Se não conhecessem a pessoa específica, as pessoas teriam a possibilidade de enviar para pessoas mais próximas à pessoa específica. Milgram descobriu que, das cartas que chegaram a seu destinatário final (pessoa específica), a maioria havia passado apenas por um pequeno número de pessoas. Isso sugeria que todas estariam separadas por uma pequena distância, pertencente a um espaço próprio, denominado de mundo pequeno. O resultado deste estudo é chamado de “Principio dos seis graus de separação”, em que se pretende provar que cada pessoa está conectada a qualquer outro na rede com um número máximo de seis pessoas intermediárias (BENEVENUTO et al., 2011). No entanto Milgram tratava as Redes Sociais como redes aleatórias, nas quais as relações entre os nós sofreriam um critério randômico de relacionamento, sendo que, no entanto, Barabási demonstrou que as Redes Sociais não carregam um critério de relacionamento aleatório e sim uma ordem de estruturação em rede. Tal ordem refere-se ao fato de que “pessoas mais populares ficam mais populares”, ou seja, de que para nós com maior quantidade de conexão (nós com graus elevados), maior a possibilidade de ter mais conexões. Com tal análise, cria-se a premissa de que as Redes não teriam um grau igualitário para os nós, resultando em que cada nó poderia ter uma quantidade diferente de relacionamentos. É essa premissa que seguimos ao utilizar algoritmos de Otimização Combinatória para encontrar e sugerir as melhores ligações entre usuários de Redes Sociais (FREITAS, 2008). 24 2.3.1 Otimização Combinatória, Ótimos global e local A Otimização Combinatória é o processo de encontrar e comparar soluções factíveis até que nenhuma solução melhor possa ser encontrada. Essas soluções podem ser boas ou ruins em termos de um objetivo (COELHO, 2006). Uma grande variedade de problemas da indústria, tais como os de economia, logística etc., apresentam uma decisão NP-Completa associada, cuja versão de Otimização é NP-Difícil e, por isso, é considerada de impossível resolução em tempo polinomial. A versão de Otimização de um problema NP-Difícil apresenta uma função e um conjunto de requisitos, ambos relacionados às variáveis de decisão, que dão valor a uma solução específica. A função pode ser minimizada ou maximizada, sendo chamada de função-objetivo. A melhor solução para um exemplo do problema, ou seja, seu ótimo global, é o menor ou maior valor possível para a função, desde que o valor atribuído às variáveis não viole nenhuma restrição. Em alguns casos, chega-se a valores cuja alteração discreta não conduz a resultados melhores, mas que podem não ser equivalentes ao ótimo global: essas soluções são chamadas de ótimos locais. 2.3.2 Problema de Designação Quadrática – QAP O QAP consiste em encontrar o posicionamento ótimo em casos de designação de instalações a localidades predefinidas, levando-se em conta as distâncias entre as localidades e os níveis de interação entre as instalações. Uma motivação adicional para a pesquisa e o desenvolvimento de técnicas para a resolução do QAP é o fato de que este problema faz parte da classe NP-Difícil (MAIA, 2002). Uma formulação para o QAP é uma bijeção f entre os vértices de dois grafos A e B com n vértices, de forma que se minimize ou maximize o custo total: n n C( v ) = ∑ ∑ a b ij v(i) v( j) i =1j =1 v ∈ V( n ) 25 Sendo: n - número de instalações ou localidades; V(n) - conjunto de todas as permutações de {1, 2, ..., n}; a(aij) - uma matriz n × n, em que aij representa o fluxo de materiais da instalação i para a j; b(bkl) - uma matriz n × n, em que bkl representa a distância entre as localidades k e l; C(v) – custo do subconjunto v do conjunto V. Uma interpretação para este problema é que cada vértice de A é uma localidade, e o valor da aresta entre uma localidade i e uma localidade j é a distância entre estas. Cada vértice de B é um recurso, que é inerente a alguma instalação. Para cada par x e y de recursos, existe um valor de fluxo de recurso associado (CORRÊA, 2007). A seguir é apresentado um exemplo simples do QAP. São 5 localidades, 3 instalações e 3 fluxos de insumos entre as mesmas (Figura 6): 3 1 A B C 2 m 4 5 Instalações n Localidades distância fluxo fluxo de maior peso Figura : Um exemplo do QAP. m ≤n 26 Uma solução factível para o exemplo da Figura 6 pode ser vista a seguir. C A B 4 5 Note-se que o fato das instalações A, B e C terem sido posicionadas nas localidades 1, 2 e 3, respectivamente, é apenas uma coincidência. Outra solução factível seria aquela onde manteríamos as instalações A e C nas mesmas localidades, e posicionaríamos a instalação B na localidade 5, como representado a seguir. C A 2 4 B Esta solução tem um valor maior na função-objetivo, já que a localidade 5 apresenta custos maiores do que aqueles referentes à localidade 2, em relação às outras duas. Essa segunda solução é então considerada pior que a primeira. 27 2.3.3 Heurísticas Uma heurística é um conjunto de regras e métodos que conduzem à descoberta, à inversão e à resolução de problemas, fornecendo, em geral, soluções satisfatórias, em um período de tempo razoável (MAIA, 2002; COELHO, 2006). A maioria das heurísticas é utilizada para resolução de problemas para os quais é necessário diminuir o custo computacional, tais como problemas que demandam respostas diárias. Um algoritmo de Busca Local (Figura 7) estabelece, para cada solução, uma vizinhança composta por um conjunto de soluções com características próximas. Dada uma solução referencial, uma das formas de implementar um algoritmo de Busca Local é percorrer a vizinhança dessa solução em busca de outra com valor mais satisfatório. Se tal solução vizinha for encontrada, torna-se essa a solução referencial e o algoritmo continua. Caso contrário, a solução referencial corrente é considerada um ótimo local em relação à vizinhança considerada (MAs Homepage, 2010). Figura : Algoritmo de Busca Local. Fonte: MAs Homepage (2010). 28 2.3.4 Meta-heurísticas Uma Meta-heurística é uma estratégia de busca de Ótimo global em problemas de Otimização Combinatória, que utiliza uma Heurística para guiar outra Heurística. Pode-se citar, como exemplo, um algoritmo que a cada iteração procure primeiro melhorar ostensivamente a solução atual, levando em conta sua vizinhança, e, depois, tente melhorá-la novamente em relação a outras regiões do espaço de busca. Neste trabalho foram implementadas e avaliadas algumas Meta-heurísticas, sendo que se implementaram e avaliaram uma Busca Tabu (BT) e um Simulated Annealing (SA). 29 3 MATERIAIS E MÉTODOS Nesta etapa o funcionamento do Motor de Busca e do sistema de relacionamento de usuários será abordado. Exibindo o funcionamento dos algoritmos de Varredura da Web (spider), indexação e pesquisa, referentes ao Motor de Busca, além das Metaheurísticas e função-objetivo, relacionadas ao sistema de relacionamento. 3.1 MOTOR DE BUSCA O Motor de Busca ou Web Crawler é composto por um buscador de páginas na Web, utilizado para pesquisar links entre as páginas (spider) e salvar as mesmas, um indexador para armazenar tais páginas, e uma interface para permitir ao usuário a pesquisa nas bases de dados do Motor de Busca. Na mesma etapa ainda utilizaremos um algoritmo de IA para melhorar a contextualização das pesquisas realizadas pelo usuário. 3.1.1 Buscar páginas (spider) A expressão “varrendo a Internet” está relacionada ao fato de que o spider acessa páginas que estão disponíveis na Internet, capturando links de outras páginas que possam ser acessadas e assim criando uma teia entre as páginas, daí o nome spider. O ideal para o funcionamento de um spider é se estabelecer uma conexão de alta disponibilidade com a Internet e um conjunto de servidores para armazenamento de dados. Seu funcionamento básico é receber um link de uma fila de links, referente a determinada página da Internet, e acessar essa página armazenando a mesma em seu banco de dados. Nas informações contidas na página, podemos encontrar links para outras páginas, sendo que os mesmos são inseridos na fila de links do Motor de Busca, assim proporcionando ao spider continuar varrendo a Internet. Para criar um spider utilizamos as bibliotecas java.io, java.net e java.util, para receber dados, conectar à Internet e filtrar informações da página, respectivamente. O spider recebe um link válido, como http://www.google.com, conecta-se a essa página, lê todas as informações da página e captura da mesma página somente o título, as palavras-chave e os links ali encontrados. Os links válidos encontrados na página acessada são enviados para a fila de links, aumentando assim o tamanho da fila de links e consequentemente o número de páginas que serão acessadas pelo spider. 30 Para determinar quando um link é válido utilizamos um filtro de páginas Web, sendo que esse filtro recebe um link, conecta à respectiva página, se a conexão foi estabelecida e a página existe, então o link é validado. No entanto, se não houver conexão ou se tal conexão leva a uma página que não possa ser armazenada, por conduta de privacidade ou irrelevância de conteúdo, então tal link é considerado inválido e não é enviado para a fila. A Figura 8 (b) exibe o diagrama de atividade do spider, ilustrando seu funcionamento. Figura : (a) Funcionamento da pesquisa, (b) Funcionamento do spider. Fonte: Próprio Autor. 31 Logo após a captura das informações da página (Link da página acessada, título e palavras-chave), é criado um documento com essas informações, e tal documento é enviado para a classe Indexar que o armazena no diretório ideal para tal página, observando que os diretórios são contextualizados. Na Próxima seção será tratado o funcionamento do indexador. 3.1.2 Indexar Um dos quesitos fundamentais para um Motor de Busca funcionar é o indexador. Ponto-chave dos Motores de Busca da Web, o indexador é utilizado para armazenar informações obtidas nas páginas acessadas. Nenhuma empresa revela seus algoritmos de indexação, pois esse é o ponto que diferencia uma empresa da outra, sendo que as mesmas podem utilizar diferentes tipos de indexação de documentos, levando em consideração objetivos específicos. Neste projeto houve a necessidade de contextualizar informações, criar uma relação de contexto para cada página no momento da indexação, e é este um dos pontos fundamentais do Motor de Busca implementado neste projeto. Para armazenarmos as páginas temos que criar um contexto semântico para cada uma. Devido à necessidade criou-se um analisador semântico para tratar a contextualização das páginas. O analisador tem o seguinte funcionamento: quando o motor recebe as informações referentes a uma página, compara o título e as palavras-chave desta página com um conjunto de palavras pré-estabelecidas que fazem alusão a determinado assunto, por exemplo, uma página que tem como título "Medicina Humana" e contém entre suas palavras-chave, palavras como "medicina", "cuidado" ou "saúde", entre outras, essa página será contextualizada como uma página da área de saúde. Em caso de falha na contextualização do analisador, por não encontrar nenhuma relação entre o título e as palavras-chave com as palavras pré-estabelecidas, utiliza-se o contexto da página em que se obteve o link da página atual, por exemplo, na página do exemplo anterior, "Medicina Humana", o spider encontrou links e, acessando esses links, encontrou-se uma página que não tem relevância semântica que a contextualizasse, mas, sabendo-se que a mesma foi extraída a partir da página "Medicina Humana", que tem como contexto a área de saúde, então contextualiza-se a página derivada no mesmo contexto da página "Medicina Humana". 32 Tal estratégia pode ser utilizada pelo fato de que páginas de determinado assunto sempre se relacionam com outras páginas de mesmo assunto, salvo quando essa relação se refere a uma propaganda. A estratégia de indexação, utilizando somente link, título e palavras-chave, tem como objetivo reduzir o tempo de indexação, reduzindo a quantidade de comparações, observando que o algoritmo utiliza uma estratégia de Força Bruta, cotejando essas informações com um conjunto de palavras pré-estabelecidas encontrado no apêndice A. 3.1.2.1 Estrutura de Armazenamento Para armazenarmos as páginas usamos alguns diretórios, como pode ser visto na Figura 9 (a). Esses diretórios são nomeados com as possíveis áreas de atuação profissional de um usuário, sendo Saúde, Agricultura, Tecnologia, Direito, Artes, Esporte, Humanas e Ciências. Cada diretório contém suas palavras-chave, e as mesmas são comparadas com as informações de cada página na tentativa de criar um contexto. Dentro de cada diretório existe uma estrutura em forma de árvore, Figura 9 (b). Essa estrutura foi criada levando-se em consideração a ordenação alfabética pela primeira letra da principal palavra do título da página, e o armazenamento em forma de árvore foi utilizado para aumentar a velocidade de pesquisa e armazenamento das páginas. Dentro de cada nó da árvore existe uma tabela de hashing, Figura 9 (c). Essa tabela armazena vários arquivos de texto que contêm as páginas indexadas, e esses arquivos são referentes a cada chave da tabela de hashing, observando que cada chave refere-se a um arquivo. A estrutura da tabela de hashing foi utilizada pela sua velocidade no momento da leitura e armazenamento de determinado arquivo, observando a utilização de uma chave para acessar um exato local da tabela. A Figura 8 mostra a estrutura de armazenamento das páginas Web. 33 Figura : Estrutura de Armazenamento. Fonte: Próprio Autor. 3.1.2.2 Funcionamento da Indexação Depois que se contextualiza a página e já se conhece qual o seu diretório, resta saber qual seu local na árvore e consequentemente qual seu local na tabela de hashing. Para isso se utilizou um algoritmo de indexação com a principal palavra do título da página. As etapas são: • Receber o titulo da página; • Retirar as palavras ou letras indesejadas, as StopWords, que são um conjunto de palavras que não carregam um sentindo final, como os artigos e as preposições, como no título, “A medicina do homem”, o artigo “A” e a preposição “do” são retiradas, restando apenas “medicina homem”, nessa ordem; • É recuperada a letra inicial da primeira palavra que restou da frase: como no exemplo anterior, “medicina homem”, recupera-se a letra “m”, que corresponde à palavra “medicina”; • Com essa letra, conhece-se em qual local da árvore haverá inserção; • Conhecendo o nó exato da árvore, acessa-se a tabela de hashing do respectivo nó, sendo que, para acessar a posição da tabela, necessita-se conhecer a chave. Utiliza-se uma função de hashing para encontrar a respectiva chave, no entanto foi necessário utilizar uma função de soma ASCII, que recebe a primeira 34 palavra do título, como “medicina” no exemplo anterior, encontrando um valor ASCII que é enviando para a função de hashing; • Quando encontrada a posição de hashing, retorna-se uma string com o nome do arquivo ou, se tal arquivo não existe, um novo arquivo é criado na posição vazia do hashing; • Nesse arquivo serão armazenadas as informações da página, sendo que cada linha do arquivo refere-se a uma página. A função de soma ASCII foi criada para realizar a soma de ASCII de uma palavra, levando em consideração a posição de cada caractere. O funcionamento da função é receber a palavra e somar os dois primeiros ASCII, referentes às duas primeiras letras da palavra, e em seguida subtrair pela terceira letra, sendo que esse mesmo processo é repetido até o fim da palavra. Pode-se observar na palavra “JAVA” que, se apenas for realizada uma soma dos ASCII, qualquer anagrama formado pelas letras desta palavra terá o mesmo resultado, como em “AVAJ”. Utilizando a função de soma ASCII, um anagrama com essa letras terá um resultado diferente, pois J + A – V + A = 118 é diferente de A + V – A + J = 160. Essa função foi criada para que diferentes palavras não gerem a mesma posição da tabela de hashing, acontecendo essa colisão somente quando a palavra for a mesma. Essa estrutura foi criada para obter uma melhor divisão entre assuntos específicos de cada página e não carregar um grande conjunto de páginas em somente uma estrutura de armazenamento. Com tal divisão podem-se capturar várias páginas que tenham um título iniciando com a mesma palavra e mesmo sentido, e colocar essa página no mesmo arquivo. Assim não sobrecarregamos um único arquivo com uma grande quantidade de páginas que podem ser anexadas, mesmo capturando somente título, palavras-chave e link. Por exemplo, pode-se ter no mesmo arquivo, correspondente à área de Tecnologia, as páginas O Mundo Java e O Mundo da Web, observando que a palavra inicial do título das duas é "Mundo". Essa abordagem é possível pelo fato de que a chave da tabela de hashing é criada utilizando a palavra inicial do link, como no exemplo anterior, "Mundo". 3.1.2.3 Armazenamento 35 Uma estratégia de armazenamento avaliada foi utilizar XML. Em tal estratégia criou-se um arquivo XML para cada página indexada, sendo que com isso muitos arquivos teriam que ser criados para armazenar tantas páginas, mesmo utilizando as estruturas de armazenamento anteriores com árvore e tabela de hashing. Essa grande quantidade de arquivos poderia proporcionar uma baixa velocidade no momento da pesquisa. Na outra estratégia, utilizando arquivos não estruturados, armazenamos várias páginas no mesmo arquivo, e com essa estratégia só é realizada uma leitura de arquivo, pois no mesmo várias páginas são armazenadas, como pode ser visto na Figura 10. Figura : Arquivo de Armazenamento. Fonte: Próprio Autor. 3.1.3 Pesquisa A pesquisa é o segundo ponto fundamental de um Motor de Busca, pois em tal funcionalidade o motor usa todo seu potencial. Quando se utiliza um Motor de Busca, como ocorre com Google, Yahoo, Bing, entre outras, passamos somente uma palavra ou frase que necessitamos pesquisar, através de uma interface, então o sistema recupera esse conjunto de caracteres e retorna um conjunto de resultados ordenados. Essa ordenação é criada levando em consideração algum critério próprio do motor, como a Google que, por exemplo, utiliza o PageRank para ranquear as páginas que serão exibidas para o usuário, sendo que essa estratégia utiliza o critério das redes entre as páginas, em que a página que tiver o maior número de conexões com outras páginas será a mais bem colocada. Neste projeto o resultado da pesquisa tem que levar em consideração o usuário que está realizando a pesquisa, não somente um usuário sem identificação, mas, um usuário com preferências entre assuntos profissionais e de lazer. 36 Com isso a primeira estratégia para realizar uma pesquisa contextualizada é conhecer as preferências do usuário. Em tal tarefa são utilizadas duas técnicas para a operação: a primeira é realizar um simples cadastro na página da pesquisa, selecionando a área de atuação profissional (utilizamos apenas área profissional neste trabalho), e a segunda estratégia vem ao longo de algumas pesquisas, em que algoritmos de aprendizagem são utilizados para conhecer as preferências do usuário. 3.1.3.1 Funcionalidade da pesquisa A funcionalidade básica da pesquisa está relacionada com a estrutura de armazenamento das páginas, e por esse motivo utiliza-se o mesmo procedimento utilizado no momento da indexação. A diferença em relação ao algoritmo de indexação está no fato de conhecermos o usuário, e com isso já sabermos em qual primeiro diretório será realizada a pesquisa e a leitura do arquivo. Neste ponto que ocorreu a dificuldade em se utilizar XML para cada página, pois encontrando o diretório exato, ainda assim o motor terá que ler todos os arquivos XML até encontrar algumas páginas que satisfaçam a pesquisa do usuário. Com a utilização de arquivos é necessária à leitura de apenas um arquivo, que guarda várias páginas com suas informações, com cada linha do arquivo correspondente a uma página. Por exemplo, na pesquisa “O mundo do neurologista”, se supõe como usuário uma pessoa da área de saúde, e com isso já se conhece o primeiro diretório onde a pesquisa irá acontecer. Então, seguindo os demais passos encontra-se o nó da árvore e respectivamente a posição da tabela de hashing, apropriados, usando a primeira palavra fundamental, "mundo". Com esse procedimento encontra-se um arquivo em que existem somente palavras iniciando com a palavra “mundo” e relacionadas a saúde, sendo que a pesquisa será realizada procurando-se, entre as páginas, a página que apresente pelo menos uma ocorrência da palavra “neurologista”, ou algo similar, como “neurônio”, e que será exibida para o usuário através da interface, exibindo-se o nome da página, as palavraschave e o link. Se a pesquisa não encontrar nada nesse arquivo, o motor vai para o próximo diretório que mais tem relevância para esse usuário, utilizando o algoritmo de aprendizagem para se conhecer esses próximos campos de interesse. Na próxima 37 subseção, Algoritmos de Aprendizagem, uma estratégia de aprendizagem será demonstrada. Encontrando o próximo diretório, realiza-se o mesmo processo e, se não ocorrer sucesso em nenhum diretório, uma mensagem de erro será retornada, sendo que esse processo pode ser observando na Figura 8 (a), a qual apresenta um diagrama de comportamento da pesquisa. Podemos observar que o funcionamento da pesquisa é muito parecido ao procedimento realizado no momento de indexar uma página. No momento da indexação recebemos o título da página, realizamos todo o processo já citado e armazenamos a página em uma linha do arquivo correspondente a essa página. Na pesquisa o processo é o mesmo, mas recebemos a frase passada pelo usuário e, como já sabemos a preferência do usuário, já sabemos o diretório onde será realizada a pesquisa. Um dos propósitos da divisão em diretórios é facilitar a tarefa do motor no momento da pesquisa, pois em todos os diretórios temos árvores e hashings que podem ter a mesma chave. Assim a pesquisa é realizada em cada diretório, chegando a apenas um arquivo por vez, deixando assim a pesquisa mais rápida do que seria se utilizassem páginas armazenadas em XML. 3.1.4 Estratégia de Ranking de Páginas A estratégia de ordenação de páginas na exibição de resultados utilizada neste projeto é criar um ranking pessoal, e não um ranking geral de páginas. Essa estratégia utiliza as preferências do próprio usuário no momento da pesquisa. A ideia principal é colocar ao lado de cada link que for exibido no momento da pesquisa, a possibilidade do usuário demonstrar que aprovou ou recusou a página, sendo que assim, nas próximas pesquisas, os links com uma maior quantidade de "votos" serão exibidos no topo da página. A outra estratégia é: verificar a página que tem uma maior quantidade de páginas apontando, juntas, para essa página. Com isso obtemos as páginas mais “populares” da pesquisa. O cálculo utilizado é verificar a quantidade de votos positivos e negativos que determinada página teve e verificar a popularidade da mesma com a quantidade de páginas que apontam para ela. A ponderação para os votos dos usuários é maior do que a popularidade da página, pois como a ideia é criar um motor que leve em consideração 38 a preferência do usuário e não a dos desenvolvedores Web. A equação abaixo mostra o cálculo do ranking das páginas, equação modelada pelo próprio autor deste TCC. n R ( i ) =10F−8C+5 ∑ R( j) j =0 onde i é um nó (página Web), F a quantidade de votos a favor, C a quantidade de votos contra e R(j) o valor de cada página que aponta para o nó atual, observando que se uma quantidade de páginas com alto nível de aceitação apontar para uma página, ela será mais popular ainda, e verificando que não é analisada apenas a quantidade de páginas que aponta para o nó mas também o valor de cada página que aponta para o nó. 3.1.5 Algoritmo de Aprendizagem Um dos pontos diferenciais deste Motor de Busca é a possibilidade de aprender preferências do usuário ao decorrer de algumas pesquisas realizadas pelo mesmo. Tal estratégia é utilizada para obter um maior conhecimento do usuário do sistema, pois, como os mesmos são cadastrados no sistema, suas preferências são armazenadas e reconhecidas, proporcionando uma melhor resposta no momento da busca. Com a aprendizagem do sistema, o mesmo tem a possibilidade de abranger outras áreas além daquela previamente cadastrada pelo usuário, proporcionando uma busca em outros diretórios em caso de falha na primeira busca. 3.1.5.1 Funcionalidade do Algoritmo de Aprendizagem A funcionalidade básica de um algoritmo de aprendizagem é aprender uma função especifica, no entanto existe a necessidade de treinarmos a rede neural, observando que foi utilizada neste projeto uma RNA. Para obtermos um resultado satisfatório temos que capturar as pesquisas realizadas pelo usuário e verificar qual diretório foi mais acessado, com isso aprendendo outra área de atuação que não seja a principal. Para treinarmos a rede tem-se um conjunto de palavras (os mesmos rótulos utilizado pelo analisador semântico), sendo que essas palavras são utilizadas para comparar com as palavras que o usuário está digitando, e assim, comparando as 39 palavras acessadas com as palavras pré-estabelecidas, balancea-se a rede direcionando para o diretório que teve o maior número de acessos. 3.2 RELACIONAMENTOS ENTRE USUÁRIOS Como já foi citado, o crescente número de usuários de Redes Sociais, e a quantidade de tarefas realizadas nas mesmas, proporciona uma grande quantidade de nichos específicos de usuários, levando em consideração trabalho, lazer, esporte etc. Por isso utilizamos algoritmos de Otimização, como Meta-heurísticas, para relacionarmos esses usuários, levando em conta suas preferências e a distância física entre suas localizações. A utilização de Meta-heurísticas é justificada pela quantidade de usuários que utilizam Redes Sociais, notando-se que a quantidade de cômputo e tempo necessário para calcular esses relacionamentos é enorme, classificando tal problema como NPDifícil. Nesta sessão são apresentados os algoritmos utilizados para criar o melhor relacionamento entre os usuários do Motor de Busca, sendo que para isso utiliza-se o cadastro dos usuários, com suas preferências e as distâncias entre as cidades onde os mesmos estão. Em uma primeira fase testamos algumas Heurísticas e Meta-heurísticas para escolher uma que se adequasse ao projeto, e para testarmos utilizamos a função-objetivo do QAP e alguns exemplos da QAPLib. A seguir serão mostradas as Meta-heurísticas usadas. Na segunda fase, já sabendo qual algoritmo de Otimização utilizar, utilizamos uma função-objetivo (para guiar os algoritmos de Otimização), que se adequasse às especificações do projeto, que não é o caso da função-objetivo da QAP, utilizada apenas para testes prévios (vide Apêndice C, com a função-objetivo e Resultados). 3.2.1 Busca Tabu Tal método é baseado no conceito de Busca Local, pois se considera uma solução como referencial corrente e se percorre a vizinhança dessa solução procurando soluções factíveis melhores. O acréscimo a isso no funcionamento da Busca Tabu está na procura de soluções melhores a cada vizinhança percorrida, memorizando-se as soluções encontradas anteriormente (GOMES, 2003). 40 Partindo de uma solução inicial, que pode ser escolhida de acordo com algum critério predeterminado, a busca move-se, a cada iteração, para a melhor solução na vizinhança, não aceitando movimentos que levem a soluções já visitadas, sendo que essas são memorizadas em uma estrutura de dados chamada lista tabu. A lista tabu permanece na memória guardando soluções já visitadas (tabu) durante um determinado espaço de tempo ou certo número de interações (tempo tabu). Como resultado final é esperado que se encontre o ótimo global ou a solução factível mais próxima desta. Ao se armazenarem tais soluções passadas, são considerados dois critérios de estabelecimento de memorização na busca Tabu, a saber, a memória de curto prazo e a memória de longo prazo. No primeiro caso as soluções encontradas, em um curto prazo, são armazenadas visando à desconsideração de soluções já analisadas em um pequeno espaço de soluções vizinhas. Mas, para se melhorar o desempenho da busca pode ser utilizada a memorização de longo prazo, sendo que tal memorização não desconsidera somente as soluções visitadas mais recentemente. Alguns critérios são adotados em uma Busca Tabu: ● k: quantidade de últimas iterações na memória (lista) tabu; ● T(k): lista de movimentos proibidos (lista tabu), considerando-se as últimas k iterações; ● N(s): conjunto de soluções vizinhas a uma solução específica s; ● Critério de expiração: permite a aceitação de um movimento, baseado na qualidade da solução prevista para tal movimento, mesmo havendo proibição segundo a lista tabu. Abaixo, um exemplo de busca tabu: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Seja S uma solução inicial S+ ← S (mantém armazenada a melhor solução encontrada) Enquanto não se atingem as condições de parada faça Escolha soluções candidatas V contidas em N(S) Enquanto V é diferente de vazio faça Pegue S’ elemento de V de custo menor e faça V ← V\ {S’} Se C(S’) é menor ou igual C(S+) então S+ ← S’, S ← S’ e V ← Ø Se não Se (não Tabu) ou (satisfaz Critério de expiração) então 41 S ← S’, V ← 0 11. 12. Devolva S+ 3.2.2 Simulated Annealing Annealing é um processo físico utilizado para fundir materiais, sendo esses aquecidos a altas temperaturas e em seguida resfriados até apresentar homogeneidade. Em cada estágio de temperatura o material apresenta um nível de energia. O ponto de solidificação (material ideal) é atingido quando se encontra o ponto de energia mínima. Levando-se em consideração que o resfriamento do material deve ser lento e gradativo para não danificar o material e atingir o ponto de energia mínima, podem-se definir estágios de energia para cada temperatura, discretizando a temperatura em relação à energia. Em 1983 Kirkpatrick propôs que a simulação desse processo poderia ser utilizada ao se compararem soluções factíveis, com o objetivo de se encontrar a solução ótima em problemas de Otimização. Essa analogia com Otimização é chamada de Simulated Annealing (SA) ou Têmpera Simulada, e consiste em otimizar o problema por níveis, simulando níveis de temperatura. Em cada nível de temperatura uma mesma variável representa uma solução factível, e no decorrer do processo a vizinhança dessa variável é testada na tentativa de se encontrar a melhor solução para cada nível de temperatura (HAESER E GOMES-RUGGIERO, 1995). Note-se que a relação entre temperatura e busca da melhor solução vem da probabilidade de certa variável ter sua energia (E) aumentada, levando-se em consideração um fator Δ, que pode ser expresso pela função probabilística seguinte: Tal função demonstra a probabilidade de acréscimo de energia no material, a depender da temperatura vigente. Pode-se então relacionar essa probabilidade com a procura da melhor solução factível em cada nível de temperatura, aceitando-se soluções piores na tentativa de fuga de ótimos locais. A temperatura segue diminuindo e a possibilidade de alterações que piorem a melhor solução armazenada vai se reduzindo, pois se fica próximo ao ótimo global. 42 O algoritmo de SA apresenta inicialmente um ponto ou solução e uma temperatura inicial (So e To), e o termo L, que representa a quantidade de iterações realizadas em cada nível de temperatura. A Figura 11 representa o algoritmo de AS (REEVES, 1993). 43 Figura : Algoritmo de SA. Fonte: Reeves (1993). A ideia é aceitar inicialmente uma boa parte das soluções factíveis, mesmo piorando o melhor custo, levando em consideração a temperatura, pois, quanto maior a temperatura, maior será a chance de se aceitarem soluções piores, fugindo da melhor solução local, tendência que regride com a redução da temperatura e provoca a aproximação da solução ótima. 3.2.3 Função Objetivo Específica ao Projeto Dada a necessidade do projeto de, na fase de sugestão de melhores relacionamentos para o usuário de Rede Social, fazê-lo segundo um critério de Otimização que guiasse as Meta-heurísticas selecionadas, formulou-se a seguinte função-objetivo específica: Sejam: n - o número de usuários passíveis de relacionamento (usuários-alvo) na Rede Social; V(n) - o conjunto de todas as permutações binárias de tamanho n; 44 P(pk) - uma matriz unidimensional de ordem n, em que p k representa binariamente se o usuário está relacionado ao usuário-alvo k da Rede Social, sendo o número de relacionamentos vigentes sempre menor ou igual a n; A(ai) - uma matriz unidimensional de ordem n, em que a i representa um somatório de códigos de preferências (definidos por uma tabela de associação de preferências com números primos) pré-dirigido, correspondente a um usuárioalvo da Rede Social; B(bj) - uma matriz unidimensional de ordem n, em que b j representa a distância entre as localizações do usuário e de um usuário-alvo j; O objetivo é minimizar a função: n C (v) = ∑ (ai +bi ) pv ( i ) i =1 v ∈ V(n ) Assim como este trabalho deixou em aberto possibilidades de extensão e melhorias futuras, como, por exemplo, a aplicação de paralelismo, coube a decisão de não se apresentarem resultados do uso das Meta-heurísticas atreladas a essa funçãoobjetivo específica, devido a não se ter conseguido, a tempo da entrega da versão atual da monografia, uma quantidade razoável de testes dos módulos de geração de números primos e de obtenção de um máximo divisor comum entre dois inteiros positivos, módulos já implementados e isoladamente testados devido a sua simplicidade, mas ainda não testados no âmbito sistema geral. 3.3 SISTEMA GERAL O sistema em si é composto por um Motor de Busca, que alimenta a base de dados com páginas Web, e uma Rede Social, que utiliza o cadastro dos usuários para criar o melhor relacionamento entre os mesmos. Para obter acesso aos serviços do sistema, o usuário utiliza páginas Web para acessar seu perfil na Rede Social e buscar por páginas no Motor de Busca. A ideia central do projeto é utilizar as informações dos usuários, contidas na Rede Social, para criar um contexto no momento da busca por páginas, proporcionando 45 assim os melhores resultados, para um usuário especifico. Além disso, podemos propor os melhores relacionamentos entre usuários da mesma Rede Social, levando em conta o mesmo cadastro. O contexto do usuário é criado no momento do cadastro, no qual ele escolhe sua área de atuação profissional, e no decorrer do tempo de utilização do Motor de Busca, em que o mesmo aprende outras preferências do usuário. Para utilizar o sistema são propostas quatro páginas Web para o usuário, sendo essas: • • • • Cadastro; Login; Perfil; Busca Cadastro A página de cadastro é utilizada para cadastrar o usuário na rede, capturando informações necessárias para criar um contexto para um específico usuário. As informações necessárias são nome, login, senha, cidade, estado e área de atuação profissional. A localização do usuário é utilizada para criar o melhor relacionamento entre usuários, pois utilizamos as distâncias entre os mesmos para realizar o cálculo, além das informações da área de atuação profissional, que também são utilizadas no momento da busca por páginas (vide Apêndice A). Login A página de Login é utilizada apenas para possibilitar o acesso às funcionalidades do sistema pelo usuário que já esteja cadastrado, enviando login e senha para o sistema verificar se o mesmo tem possibilidade de utilizar o sistema. Após a página de login o usuário é redirecionado para sua página de perfil. Perfil A página de perfil utilizada neste projeto é uma simples página Web que mostra ao usuário informações de seu cadastro, possíveis usuários da Rede Social que podem ser "amigos" e a possibilidade de acessar a página de busca. Busca 46 A página de busca é utilizada para realizar uma busca e exibir os resultados de uma pesquisa realizada pelo usuário, sendo que esses resultados são exibidos utilizando a estratégia já citada na subseção 3.1.4 (Estratégia de Ranking de páginas). Para simplificar o funcionamento do sistema para o usuário, a Figura 12 mostra o diagrama de atividade do usuário, sendo que o mesmo pode realizar uma pesquisa na base de dados do Motor de Busca, realizar um cadastro no sistema, ou acessar seu perfil para visualizar suas informações e usuários "amigos". Figura : Diagrama de Atividade do Usuário. Fonte: Próprio Autor. 3.3.1 Funcionalidade do Sistema O sistema por completo funciona em grande parte em função do usuário, levando em consideração suas informações pessoais, como localização, profissão, lazer, entre outras, informações que são abstraídas do perfil do usuário, na Rede Social 47 simulada para este projeto. Essas informações são utilizadas para realizar a busca dos melhores relacionamentos entre os usuários, no momento da busca por páginas Web e no momento em que o Motor de Busca aprende as preferências do usuário no decorrer de algumas pesquisas. Os outros pontos do sistema estão voltados para o spider (buscador de páginas Web) e para a indexação na base de dados do Motor de Busca. A Figura 13 exibe o diagrama de caso de uso do sistema, com funções do usuário de pesquisar, cadastrar e acessar, do Motor de Busca de pesquisar, indexar e armazenar páginas Web, do sistema de relacionamento que escolhe os melhores relacionamentos entre usuários da Rede Social, e do sistema de aprendizagem que captura informações do Motor de Busca e do usuário para melhorar o resultado da pesquisa. Figura : Diagrama de Caso de Uso do Sistema. Fonte: Próprio Autor. (No Apêndice B pode-se encontrar os requisitos funcionais e não funcionais utilizados para projetar o caso de uso do sistema, além da amostragem dos cenários, utilizada para projetar todas as funcionalidades do sistema.) 48 4 RESULTADOS A realização dos testes foi dividida em três etapas: a primeira etapa dos testes está relacionada ao Motor de Busca, na segunda etapa obtiveram-se os resultados para a seleção de Meta-heurísticas, para uso no sistema geral. Neste apêndice mostramos os resultados dessas duas primeiras etapas e em seguida exibimos a formulação da funçãoobjetivo definida para a Otimização da sugestão de melhores relacionamentos em Rede Social, e comentamos sobre os resultados de seu uso. 4.1 MOTOR DE BUSCA 4.1.1 Indexação com XML Os testes implementados na primeira etapa foram uma pesquisa na Web através de um link inicial, sua inserção em fila, a verificação de páginas válidas, a repetição de links na fila, e a criação e o armazenamento das páginas no formato XML. Para testarmos utilizamos um link referente à área de atuação profissional Saúde, especificamente Medicina. Essa especificação foi adotada para verificarmos a contextualização do Motor de Busca, pois, se no momento da pesquisa fosse encontrado algum link não referente a medicina, tal link não seria armazenado no mesmo local dos links com essa referência. O link utilizado foi o da página Guia do Estudante, referente a estudantes de Medicina, http://guiadoestudante.abril.com.br/profissoes/saude/medicina-601803.shtml Realizando uma pesquisa com esse link, acessamos a página e obtivemos todos os links válidos, que foram armazenados na fila, como pode ser visto abaixo: http://guiadoestudante.abril.com.br/profissoes/saude/medicina-601803.shtml http://twitter.com/guiadoestudante http://www.facebook.com/guiadoestudante http://www.orkut.com.br/Main#Profile?ui http://www.lojaabril.com.br/detalhes.asp?produt http://www.lojaabril.com.br/detalhes.asp?produt http://www.lojaabril.com.br/detalhes.asp?produt http://www.lojaabril.com.br/detalhes.asp?produt http://twitter.com/share http://guiadoestudante.abril.com.br/profissoes/testes/teste-medicina-mesmo-minhaopcao-506885.shtml 49 http://guiadoestudante.abril.com.br/profissoes/testes/medicina-foi-escolha-certa-mim607503.shtml http://twitter.com/guiadoestudante http://www.facebook.com/GuiaDoEstudante http://twitter.com/guiadoestudante http://www.facebook.com/guiadoestudante http://www.orkut.com.br/Main#Profile?ui http://publicidade.abril.com.br/marcas/48/revista/informacoes-gerais">Anuncie</a></li http://www.lojaabril.com.br/busca/resultado_busca.asp?busc http://a1.twimg.com/a/1314996488/images/twitter_57.png http://a3.twimg.com/a/1314996488/images/favicon.ico http://twitter.com/guiadoestudante Esses links são utilizados para acessar outras páginas e assim sucessivamente. O próximo teste realizado foi o armazenamento das informações necessárias da página, como o link, palavras-chave e o título. Com essas informações podemos contextualizar uma página antes de armazenar. Para armazenamos a página Web é criado um xml para cada página, mas antes de criarmos cada xml, verificamos se tal link acessa uma página válida, com informações relevantes, como pode ser visto. título Medicina - Guia do Estudante. palavras-chave <meta name="keywords" content="Medicina,médico,Profissão,Mercado,Trabalho,Faculdade,Curso" /> link Medicina - Guia do Estudante. criar XML ARQUIVO GRAVOU XML criado com sucesso Depois que essa operação é realizada, podemos verificar no diretório as páginas que proporcionaram a criação de xmls. 50 Fonte: Próprio Autor. Quando uma página não tem conteúdo relevante, o sistema não gera um xml para essa página e continua percorrendo a fila. O próximo e último passo é indexar as páginas, comparando cada palavra do conjunto de palavras-chave com as tags armazenadas no analisador semântico, que podem ser observadas no Anexo A. No diretório Saúde foram armazenados os três primeiros links válidos encontrados na página Guia do Estudante. Como se pode observar pelo caminho na parte superior da figura seguinte, as páginas foram armazenadas no diretório Saúde, mostrando assim que a indexação foi realizada com sucesso. Fonte: Próprio Autor. Outras páginas foram indexadas, mostrando a ocorrência de algumas falhas, como páginas que não tiveram suas palavras-chave relacionadas com nenhuma tag do analisador semântico, sendo que assim essas páginas teriam que ser armazenadas nos mesmos diretórios das páginas que geraram tais links. 51 Diretórios utilizados para armazenamento das páginas: Fonte: Próprio Autor. 4.1.2 Indexação com TXT Os testes realizados nesta etapa estão relacionados ao armazenamento de algumas páginas em arquivo TXT, observando o funcionamento da indexação com árvore e tabela de hashing. Lembrando que cada diretório tem uma estrutura de armazenamento independente. Para realizarmos os testes utilizamos o site de tecnologia http://www.techtudo.com.br/ do portal Globo. Depois de o Web Crawler acessar a página, seu título e suas palavras-chave são buscadas, sendo em seguida comparados com as tags do analisador semântico e, encontrando um diretório equivalente, o Motor irá buscar quais as posições da árvore e do hashing para armazenar o arquivo. No entanto utiliza-se a primeira palavra do título, recupera-se a primeira letra, para descobrir qual a posição da árvore, e em seguida encontra-se o ASCII do título, para encontrar a chave do hashing. A palavra do título e: techtudo Não existe Primeira letra da palavra e ASCII: t e 116 ASCII da principal palavra do título: 234 chave da função hash: 35 tecnologia Como podemos observar a palavra escolhida do título “TechTudo: A Tecnologia Descomplicada” foi “techtudo”. Em seguida é verificado se existe algum nó da árvore 52 com esse respectivo valor, 116, que corresponde ao ASCII da primeira letra do título, t, e então encontramos o ASCII da palavra, utilizando esse mesmo ASCII para encontrar a chave do hashing. A última palavra gerada corresponde ao respectivo diretório onde o arquivo será armazenado. Fonte: Próprio Autor. Como podemos observar, a página em txt vem com o valor da chave do hashing, pois qualquer página, que tenha a mesma palavra-chave como techtudo, será armazenada assim, não havendo necessidade de criarmos vários arquivos XML. Em seguida pode-se observar a diferença entre uma página armazenada em xml e várias páginas armazenas em txt: Fonte: Próprio Autor. 53 Outra ação a ser realizada é a indexação de páginas que tenham uma mesma palavra-chave, como as páginas Mundo da Saúde e Mundo da Arte, sendo o primeiro contexto Saúde, e o segundo Artes. A palavra do titulo é: mundo Não existe Primeira letra da palavra e ASCII: m e 109 ASCII da principal palavra do título 105 chave da função hash 6 Saúde A palavra do titulo é: mundo Não existe Primeira letra da palavra e ASCII: m e 109 ASCII da principal palavra do título 105 chave da função hash 6 Artes Observe-se que as duas páginas têm quase todos os itens iguais, pelo fato de terem a mesma palavra-chave, e se as mesmas tivessem o mesmo sentido existiria apenas um arquivo txt para armazenar as duas páginas, mas no entanto existe um arquivo no diretório Saúde e outro no diretório Arte, como podemos observar a seguir. 54 Fonte: Próprio Autor. 4.2 ALGORITMOS DE OTIMIZAÇÃO Nesta seção serão abordados os testes dos algoritmos de Busca Tabu e Simulated Annealing. 4.2.1 Busca Tabu A busca tabu foi testada utilizando duas referências específicas da QAPLib, a saber, Scriabin e Vergin, e Taillard, cada uma sendo composta de exemplos com as respectivas iniciais dos autores, ordem ou tamanho do exemplo, fitness encontrado e solução final. O tamanho dos exemplos varia de 12 a 20 na primeira referência e de 12 a 256 na segunda, sendo esses tamanhos referentes à quantidade de instalações e localidades. Além disso, a busca tabu foi testada com um número de iterações equivalente ao tamanho de cada exemplo multiplicado por 50. A Tabela 1 contém a nomenclatura utilizada nas duas próximas tabelas; a Tabela 2, os resultados para Scriabin e Vergin; a Tabela 3, os resultados para Taillard. Tabela : Legenda das duas próximas tabelas. Nome Ordem Solução Fitness Obtido Diferença 1 Iterações Diferença 2 Nome do arquivo de exemplo testado Tamanho do exemplo, quantidade de localidades e instalações Valor conhecido do melhor fitness, que acompanha cada exemplo da QAPLib Valor do melhor fitness encontrado pela busca tabu Diferença entre o melhor fitness conhecido e o fitness da busca tabu Quantidade de iterações até a busca parar Diferença entre o fitness da melhor solução e o da segunda melhor solução da busca tabu . Tabela : Busca tabu para Scriabin e Vergin. Nome Ordem Solução Fitness Diferença 1 Iterações Diferença 2 55 Obtido Scr12 12 Scr15 15 Scr20 20 31410 (OPT) 51140 (OPT) 110030 (OPT) 42801 -11391 600 -18334 74249 -23109 750 -29050 169262 -59232 1000 -62397 Tabela : Busca tabu para Taillard. Nome Ordem Solução Fitness Obtido Diferença 1 Iterações Diferença 2 Tai12a 12 260777 -36361 600 -44714 Tai50a Tai256c 50 256 224416 (OPT) 4938796 44759294 5700638 96547604 -761842 -51788318 2500 12800 -112694 -2138074 4.2.2 Simulated Annealing Para se testar o algoritmo, foram utilizados exemplos da QAPLib. Foi utilizada como entrada uma temperatura igual a 50 (representando 50 níveis), e, como decremento de temperatura, um fator unitário a cada 12 iterações no primeiro conjunto de processamentos, e a cada 14 iterações no segundo conjunto, sendo todas as iterações de um conjunto correspondentes a cada nível de temperatura alcançado. Pode-se observar nas Tabelas 4 e 5 que quanto maior a temperatura, mais soluções ruins podem ser aceitas, e, quando essa temperatura diminui, a probabilidade de aceitação também é reduzida. Tabela : Resultados de SA para o exemplo had12. Temp 50; laços 1 2 3 4 Soluções 1874 1884 1836 1820 Temp 49; laços 1 2 3 4 Soluções 1824 1824 1812 1812 56 5 6 7 8 9 10 11 12 1866 1878 1870 1838 1858 1904 1956 1892 5 6 7 8 9 10 11 12 1804 1836 1808 1848 1860 1980 1960 1848 Tabela : Resultados de SA para o exemplo had14. Temp 50; laços 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Soluções 3112 3140 3076 3044 3108 3112 3104 3102 3116 3182 3234 3170 3134 3104 Temp 1; laços 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Soluções 3212 3212 3240 3236 3068 3090 3078 3074 3134 3102 3134 3066 3042 3056 Com os resultados obtidos pode-se observar a fuga de ótimos locais no SA, pois são consideradas soluções piores com temperaturas em 50 e 49. Com a redução da temperatura e a aproximação da melhor solução global, pode-se observar uma redução nessa aceitação de soluções piores, como na tabela 5, em que se observa que a temperatura em 50 recebe valores piores, já com a temperatura em 1 não recebemos soluções com valor pior. 5 CONCLUSÕES Observa-se que ao encontrarmos estratégias de contextualização de usuários no momento da busca e no momento da indexação de páginas Web pelo Motor de Busca, e da utilização das informações do mesmo para encontrar os melhores relacionamentos 57 entre usuários de Redes Sociais, especificamente a Rede Social citada no trabalho, pode-se afirmar que os objetivos principais do projeto foram alcançados. Objetivos como criar um Motor de Busca contextualizador, utilizando informações dos usuários cadastrados em uma Rede Social para criar um contexto tanto na busca quanto na relação com outros usuários. Podemos destacar as estratégias de indexação e pesquisa, ambas voltadas para a semântica do Motor de Busca, frisando a contextualização, aliada à organização das páginas, não somente uma indexação pura de páginas Web. Outro objetivo principal alcançado é a utilização de algoritmos de Otimização, principalmente de Meta-heurísticas, para criar o melhor relacionamento de usuários, Meta-heurísticas que foram previamente analisadas e testadas com exemplos do QAP. Entre os objetivos secundários, podemos citar a utilização de algoritmos de aprendizagem para melhorar a contextualização dos usuários e consequentemente proporcionar um melhor resultado nas pesquisas, sendo que o algoritmo estudado no projeto foi o de RNAs, observando que todo o algoritmo foi analisado e direcionado para o contexto do projeto, mas no entanto sua implementação não foi completada ainda, do ponto de vista específico do projeto deste TCC. Com isso já temos uma estratégia de aprendizagem de algoritmo para o Motor de Busca, restando apenas sua integração ao mesmo. Outro ponto interessante no desenvolvimento do projeto foi a criação de uma nova estratégia de ranking de páginas Web. A mesma foi implementada e testada, mas ainda não se dispõe da possibilidade do usuário votar nas páginas de interesse, impossibilitando o sistema de de fato criar um ranking utilizando tais possíveis votos. Um fato importante na implementação da estratégia de ranking foi a ideia de que se tem de modificar parâmetros dos links, e com isso foram consideradas duas possibilidades de armazenar as páginas: uma utilizando XML e outra utilizando arquivos texto. Para futuros projetos podemos avaliar as implementações citadas acima, e avaliar novas estratégias de algoritmos de aprendizagem para o Motor de Busca. Outro ponto que pode ser melhorado é aumentar a quantidade de áreas que podem ser escolhidas pelo usuário, refinando assim a avaliação do analisador semântico, e proporcionando um maior campo de alcance para incorporar todas as áreas possíveis, e não somente as áreas profissionais citadas no Apêndice A. 58 Um ponto que pode ser avaliado em projetos futuros é a implementação do sistema em uma plataforma paralela, com um servidor de grande porte, notando que todo o projeto até aqui tem uma arquitetura serial, e no entanto o mesmo pode ser avaliado e implementado com estratégias de programação paralela. 6 REFERÊNCIAS AMARAL, H. Criando Web Crawlers em Python. 2010. Disponível em: http://herberthamaral.com/2010/02/criando-web-crawlers-em-python-parte-i/ Acesso em: 15 de agosto de 2011. 59 AMO, S. Técnicas de Mineração de Dados. Universidade Federal de Uberlândia, Uberlândia. 2002. AMs Home Page, Busca Local. Disponível em: http://www2.dbd.pucrio.br/pergamum/tesesabertas/0210675_06_cap_03.pdf Acesso em: 08 de setembro de 2011. 2010. BENEVENUTO, F. ALMEIDA, J. M. SILVA, A. S. Coleta e Análise de Grandes Bases de Dados de Redes Sociais Online. UFOP, Ouro Preto. UFMG, Belo Horizonte. 2011. CENDÓN, B. V. Ferramentas de busca na Web. 2001. COELHO, A. M. Uma Abordagem via Algoritmos Meméticos para a Solução do Problema de Horário Escolar. CEFET-MG, Belo Horizonte. 2006. COELHO, R. AZEVEDO, R. Estudo Comportamental dos Web Crawlers. Universidade do Minho, Braga, Portugal. 2008. CORRÊA, F. C. Têmpera Simulada Aplicada ao Problema de Designação Quadrática. UFRGS, Porto Alegre. 2007. DUARTE, O. C. M. B. XML – Extensible Markup Language. Disponível em: http://www.gta.ufrj.br/grad/00_1/miguel/ Acesso em: 10 de outubro de 2011. 2010. FREITAS, C. M. D. S. Extração de Conhecimento e Análise Visual de Redes Sociais, 2008. GAREY, M. R. JOHNSON, D. S. Computers and Intractability: A Guide to the Theory of NPCompleteness, W. H. Freeman. 1979. GOMES, A. Uma Introdução à Busca Tabu. Universidade de São Paulo. 2003. HAESER, G. GOMES-RUGGIERO, M. Aspectos Teóricos de Simulated Annealing e um Algoritmo duas Fases em Otimização Global. UNICAMP. 1995. HAYKIN, S. S. ENGEL, P. M. Redes neurais: princípios e prática. 2ª Ed. Porto Alegre: Bookman. 2001. HOLLAND, J. H. Adaption in Natural and Artificial Systems, An introductory analysis with application to biology, control, and artificial intelligence, The University of Michigan Press, Ann Arbor, USA. 1975. KANTEK, P. Estruturas de Dados e Arquivos. Unicenp, Curitiba. 2007. MAIA, T. D’M. BERRETTA, R. E. Uma Avaliação de Meta-heurísticas para o Problema de Designação Quadrática. USP, São Carlos. 2002. OLIVEIRA, H. C. B. Clusterização em Redes Sociais através do Simulated Annealing não monotônico. Universidade Federal de Alfenas. 2009. PITONI, R. M. Mineração de Regras de Associação nos Canais de Informação do Direito. Universidade Federal do Rio Grande do Sul, Porto Alegre. 2002. 60 RECUERO, R. Redes Sociais na Internet. Ed. Meridional. 2009. SHKAPENYAK, V. SUEL, T. Design and Implementation of a High-Performance Distributed Web Crawler. Polytechnic University, Brooklyn, EUA. 2003. REEVES, C. R. Modern Heuristic Techniques for Combinatorial Problems, Blackwell. 1993. SANTOS, V. N. Indexação Automática de Documentos textuais: Iniciativas dos Grupos de Pesquisa de Universidades Públicas Brasileiras. USP, São Paulo. 2009. SCHWALBERT, M. A. Metodologias de Aprendizagem de Máquina utilizando Redes Neurais Artificiais. Universidade de Passo fundo. 2007. SHKAPENYUK, V. SUEL, T. Design and Implementation of a High-Performance Distributed Web Crawler. Polytechnic University. 2002. THOMÉ, A. C. G. Redes Neurais – Uma Ferramenta Para KDD e Data Mining. 2002. TONSIG, S. L. Redes Neurais Artificiais Multicamadas e o Algoritmo Backpropagation. PUC - Campinas. 2000. YAMAOKA, E. J. Recuperação de Informação na Web. UFRJ, Rio de Janeiro. 2003. 61 1 SOBRE OS APÊNDICES A & B Com relação ao Trabalho de Conclusão de Curso intitulado “Uso de Algoritmos de Otimização e Inteligência Artificial no Desenvolvimento de um Motor de Busca com Contextualização em Redes Sociais na WWW”, de autoria de Edson dos Santos Araújo, seguem três módulos em apêndice, estruturados como: 1.1 Apêndice A Contém a listagem de áreas de atuação profissional passíveis de escolha pelo usuário de Rede Social, que manipule o Motor de Busca com indexação a fim de obter sugestões de melhores relacionamentos na Rede, baseados nos resultados dos algoritmos de Otimização. 1.2 Apêndice B Contém elementos de análise do sistema geral, incluindo a caracterização dos requisitos funcionais e não funcionais considerados na construção do diagrama de caso de uso citado na monografia. 62 Apêndice A – Áreas de Atuação Profissional área de Ciências área de Saúde área de Tecnologia Astronomia Biologia Bioquímica Arquitetura Ecologia Estatística Física Geologia Matemática Química Enfermagem Farmácia Educação Física Medicina Odontologia Fisioterapia Nutrição Psicologia Radiologia Saúde Tecnologia Biológica Ciência de Computadores Aeronáutica Engenharia da Computação Engenharia Civil Engenharia Mecânica Engenharia Mecatrônica Engenharia Elétrica Engenharia de Alimentos Engenharia de Minas e Gás Engenharia Química Redes de Computadores Comunicação Análise de Sistemas Segurança Animação Digital área de Direito, Ciências Sociais e Serviços Administração Antropologia Economia Comércio Sociologia Direito Educação Geografia Gestão de Negócios Jornalismo Marketing Política Pedagogia Turismo área de Humanidades Arqueologia Assessoria Filosofia História Línguas Teologia Secretariado área de Agricultura e Recursos Naturais Agricultura Agronomia Engenharia da Agronômica Engenharia Florestal Gestão de Ambiente Medicina Veterinária Ciência Ambiental 63 Apêndice B – Análise de Requisitos Requisitos Funcionais Motor de Busca • Coletar informações de páginas na Web. Título da página, assunto, palavraschave, outros links válidos; • Criar lista de links; • Armazenar informações em XML; • Criar diretório de armazenamento; • Criar índice para indexação de XML; • Possibilitar pesquisa na base de dados do Motor de Busca; • Criar pontuação para informações, levando em consideração o usuário; • Listar resultados de busca levando em consideração a pontuação de cada informação. Perceptron de múltiplas camadas (PCM) • Coletar informações sobre preferências do usuário; • Treinar a rede com preferências do usuário; • Testar a rede; • Verificar modificações das preferências do usuário; • Mostrar preferências do usuário. Sistema Geral 64 • Cadastrar usuário; • Excluir usuário; • Recuperar informações do usuário; • Criar tabela para usuário; • Criar contexto para usuário; • Otimizar relacionamentos entre usuários, levando em consideração o contexto. Algoritmos de Otimização • Captura de informações do usuário para usar na Otimização (funçãoobjetivo); • Cálculos de imagem da função-objetivo; • Verificação de melhor imagem; • Informação das melhores opções de relacionamento na Rede para o usuário. Requisitos não funcionais Motor de Busca • Utilizar paralelismo na busca de informações da Web; • Verificar se o link encontrado é válido; • Verificar se os spiders estão pesquisando links já pesquisados; • Criar diretório em árvore binária de busca; 65 • Criar índices para arquivos XML, levando em consideração as letras do alfabeto e as áreas de atuação profissional; • No momento da pesquisa, verificar perfil do usuário e devolver resultados referentes ao contexto do usuário. Perceptron de múltiplas camadas (PCM) • Utilizar Heurística para melhorar o desempenho; • Utilizar base de dados do Motor de Busca para capturar informações; • Modificar pesos sinápticos entre neurônios. Sistema Geral • No cadastro o usuário informará: nome, senha, localização, apelido e profissão; • Criar lista de profissões e de cidades; • Criar interface Web, para cadastro e pesquisa. Algoritmos de Otimização • Utilizar Heurísticas e Meta-heurísticas; • Utilizar função-objetivo; • Utilizar localização e preferências do usuário, para sugerir melhores relacionamentos na Rede. Amostragem dos Cenários • Caso de Uso Acessar: 66 Ator: Usuário Pré-condição: O usuário estar acessando o sistema Pós-condição: Os dados serem exibidos e salvos Fluxo Principal: 1. Usuário informa apelido e senha; 2. Se o usuário já está cadastrado: 2.1 O sistema exibe informações relativas aos dados que chegam automaticamente; 5. 3. Usuário altera dados no cadastro; 4. Usuário confirma alterações; Sistema apresenta informação de sucesso. Fluxo Alternativo: 1.a – Usuário não está cadastrado: • 1. Apresenta uma mensagem indicando usuário não encontrado; 2. Usuário pode se cadastrar. Caso de Uso Cadastrar: Ator: Usuário Pré-condição: O usuário estar acessando o sistema Pós-condição: Os dados serem salvos Fluxo Principal: 1. Usuário escolhe a opção “Cadastrar”; 2. Usuário preenche os campos apelido, senha e email; 3. Usuário indica sua profissão; 4. Usuário preenche o campo de localização; 5. Usuário confirma cadastro; 6. Sistema apresenta informação de sucesso. Fluxo alternativo: 67 2.a – Campo apelido ou email já existem: • 1. Apresenta uma mensagem indicando o erro, mostrando qual erro; 2. O usuário pode preencher o(s) campo(s) novamente; 3. Retorna ao passo 2. Caso de Uso Pesquisar: Atores: Usuário e Motor de Busca Pré-condição: O usuário estar acessando o sistema Pós-condição: Os dados serem exibidos Fluxo Principal: 1. Usuário preenche com as palavras que serão pesquisadas; 2. Usuário inicia pesquisa; 3. Motor de Busca captura palavras-chave e profissão; 4. Motor de Busca realiza busca nos diretórios referentes às informações do usuário; 5. Motor de Busca encontra e lê o XML; 6. Motor de Busca retorna informações ordenadas, com título, palavraschave e link do site que corresponde à pesquisa; 7. Usuário escolhe entre as respostas do sistema. Fluxo alternativo: 3.a – Pesquisa não encontrada: 1. Sistema retorna mensagem para informar que não encontrou resposta; 2. Usuário pode refazer a pesquisa; 3. Retorna para passo 1. 5.a – Erro na leitura do XML: 1. Retorna qual erro; 2. Tenta ler novamente; 68 • 3. Se não conseguir ler, busca outro XML segundo o ranking; 4. Retorna para passo 5. Caso de Uso Pesquisar links: Atores: Motor de Busca e spider Pré-condição: O sistema estar conectado à Web Pós-condição: Os links serem exibidos e salvos Fluxo Principal: 1. Sistema recupera links da lista de links; 2. Spider obtém link e realiza pesquisa na página; 3. Spider armazena link encontrado, palavras-chave e título; 4. Spider cria XML com informações e envia para o Indexador; 5. Spider adiciona mais links na lista de links, para nova pesquisa; 6. Spider verifica se deve continuar pesquisando. Fluxo alternativo: 1.a – Verificar se um link é válido: 1. Sistema verifica que link não é válido, link é descartado; 2. Sistema retorna resposta de erro para spider; 3. Link é válido; 4. Sistema retorna mensagem de validação para spider; 5. Retorna para passo 2. 6.a – Se continua pesquisando: 1. Sistema verifica se continua loop de pesquisa; 2. Se resposta for “SIM”, vai para passo 1; 3. Se resposta for “NÂO”: 4. Sistema para de pesquisar. • Caso de Uso Indexar Informações: Atores: Motor de Busca e Indexador 69 Pré-condição: Ter criado XML de informações das páginas pesquisadas Pós-condição: Os dados serem salvos e ordenados Fluxo Principal: 1. Motor de Busca envia XML para o Indexador; 2. Indexador recupera título e palavras-chave; 3. Relaciona com alguma profissão; 4. Armazena XML no diretório profissão; 5. Sistema confirma indexação; 6. Indexador ordena XMLs. Fluxo alternativo: 2.a – Erro ao ler XML: 1. Indexador verifica erro; 2. Indexador tenta ler novamente XML; 3. Em caso de novo erro, descarta esse XML; 4. Retorna para passo 2. 4.a – Erro ao armazenar: 1. Não encontra diretório: 2. Retorna para passo 3. • Caso de Uso Treinar PMC: Atores: PMC Pré-condição: Escolher usuário cadastrado Pós-condição: PMC treinado Fluxo Principal: 1. Obter cadastro do usuário; 2. Separa informações e converter informações para o PMC utilizando Heurística; 70 3. Treinar neurônios; 4. Retornar mensagem de treinamento completo. Fluxo alternativo: 3.a – Verificar resultado de treinamento: 1. Se PMC está treinada: 2. Retornar para passo 4. 3.b – PMC não está treinado: • 1. Modificar pesos sinápticos dos neurônios; 2. Retornar para passo 3. Caso de Uso Retornar informações para usuário: Atores: Sistema e PMC Pré-condição: O usuário estar cadastrado Pós-condição: Os dados serem exibidos Fluxo Principal: 1. Obter informações da base de dados; 2. Separar parâmetros, como: distância entre usuários e relevância da informação para usuário, levando em consideração a ordem de indexação; 3. Usar função-objetivo com esses parâmetros, para Otimização; 4. Utilizar Meta-heurística(s) para sugerir melhores relacionamentos entre usuários. 5. Mostrar sugestão(ões) para o usuário. Fluxo alternativo: 4.a – Encontrou informações satisfatórias: 1. Ordenar informações pelo critério da Otimização; 3. Retornar para passo 4. 4.b – Não encontrou sugestão(ões) satisfatória(s): 4. Retornar para passo 3. 71 Diagrama de Caso de Uso Fonte: Próprio Autor.