Analisando o Twitter usando Árvore de Palavras

Nesse artigo vou comentar sobre mais um projeto de processamento de linguagem natural que desenvolvemos aqui na Vetta Labs: um analisador de textos baseado em árvore de palavras.

Comecemos do princípio: uma concordância é um tipo especial de índice, onde se mostram junto de cada palavra algumas palavras que aparecem antes e depois dela. A primeira concordância foi criada no século XII, para a Bíblia em latim, e é mais ou menos desse jeito:

Ocorrências de "alegria" na Bíblia

Ocorrências de "alegria" na Bíblia (clique para aumentar)

Uma concordância era algo incrivelmente útil – basicamente o equivalente ao Google daquela época! – e extremamente caro de se fazer: a primeira da Bíblia em latim exigiu o trabalho de 500 monges e a primeira concordância da Bíblia Hebraica levou 10 anos para ser concluída. Hoje em dia, é claro, ninguém mais dá tanta importância a esse tipo de índice porque é muito mais fácil realizar a busca eletronicamente.

Mas concordâncias ainda têm muita utilidade prática. A Fernanda Viégas, da IBM, fez uma palestra interessantíssima na TEDx São Paulo chamada Revolução Visual, onde ela demonstra uma forma de visualização de textos baseada em concordâncias e numa estrutura de dados bem conhecida na Ciência da Computação, a árvore de sufixos (introduzida nos anos 1970). Chamada WordTree, esta visualização tem como ênfase a exploração interativa de textos curtos (no máximo do tamanho da Bíblia), e está publicamente disponível no site ManyEyes.

Veja um exemplo, criado por mim:

WordTree da letra de "Construção", de Chico Buarque

WordTree da letra de "Construção", de Chico Buarque (clique para aumentar)

A implementação da WordTree no ManyEyes me chamou a atenção, mas não se mostrou útil para mim por uma série de razões:

  • a quantidade máxima de texto suportada é centenas de vezes menor do que a que gostaria de processar
  • a WordTree não permite que voltemos ao trecho original do texto
  • qualquer texto e visualização submetida é obrigatoriamente público, o que impede o processamento de dados confidenciais
  • o uso é sempre interativo, não sendo possível o processamento em lote ou automático
  • não é permitido o uso do ManyEyes em aplicações comerciais
Resolvi, então, criar minha própria implementação de concordância baseada em árvore de sufixos. A idéia não é simplesmente explorar visualmente um texto específico, mas gerar automaticamente árvores de palavras a partir de itens do Twitter.

A motivação é simples: um dos mecanismos mais interessantes do Twitter é o Re-Tweet, ou RT, que é o gesto de alguém repetir o que foi postado por outra pessoa, como forma de manifestação de apoio (ao fazer RT de um item no Twitter você está divulgando aquele item para as pessoas para seus seguidores). Quanto maior o número de RTs mais divulgação um determinado item teve.

O sistema monitora o Twitter em tempo real, buscando itens com as palavras chave determinadas pelo usuário. Todos os dias (ou, por exemplo, a cada 1000 twits encontrados) uma nova árvore é gerada, que ilustra de forma bem interessante o que tem sido discutido a respeito daquele assunto. Veja um exemplo, gerado enquanto escrevia esse artigo a partir de twits a respeito do Campeonato Mineiro (nada contra o time do Atlético!):

Árvore gerada por twits do Cruzeiro

Árvore gerada por twits do Cruzeiro

Como a quantidade de textos processada é enorme – dezenas de milhares de itens por dia! – árvores de palavras geradas de forma ingênua são gigantescas. Para exibir apenas as informações relevantes, utilizamos técnicas de processamento de linguagem natural para podar a árvore.

Por exemplo, podemos exigir que determinados nós sempre contenham verbos, ou apenas sentenças em que a palavra escolhida funcione como sujeito sejam consideradas. Tudo isso, é claro, configurável e acessível através de uma interface web, com tudo a que o usuário tem direito (feeds RSS, interface AJAX, exibição de estatísticas a respeito de como a árvore foi construída, links para os itens originais…).

E como o assunto da vez são as Eleições 2010, vejam alguns exemplos, também produzidos nesse exato momento:

Árvore produzida por menções a Aécio Neves no Twitter

Árvore produzida por menções a Aécio Neves no Twitter

Também podemos gerar árvores reversas, que mostram o que precede determinada palavra, e árvores com maior profundidade, como exemplificado abaixo:

Árvore reversa (Aécio Neves no Twitter)
Árvore reversa (Aécio Neves no Twitter)

O mais interessante (e divertido!) disso tudo é que essa técnica de visualização permite ter uma avaliação instantânea do que “está rolando no Twitter”, em poucos segundos. Uma árvore de palavras condensa informação de milhares de itens e a exibe de forma intuitiva e direta – algo realmente raro num mundo em que a sobrecarga de informação é cada vez maior.

Data Mining, Internet, Linguagem Natural, Redes Sociais, Usabilidade, Visualização Cientifica, Web 2.0 11 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 4,75 out of 5)

Mineração de Opinião

É notável o crescimento da quantidade de informação disponível na Web nos últimos anos. Além dos conteúdos disponibilizados por empresas de notícias, os usuários passaram a compartilhar na Web seus conhecimentos, críticas e opiniões em blogs pessoais, sites de relacionamentos, microblogs, dentre outros meios. Com esse aumento da participação dos usuários nos conteúdos da Web, surgiu também uma nova área de pesquisa relacionada ao Processamento de Linguagem Natural, chamada de Mineração de Opinião e também conhecida como Análise de Sentimento.

A Mineração de Opinião visa identificar o sentimento que os usuários apresentam a respeito de alguma entidade de interesse (um produto específico, uma empresa, um lugar, uma pessoa, dentre outros) baseado nos conteúdos divulgados na Web. O objetivo principal é permitir que um usuário obtenha um relatório contendo o que as pessoas andam dizendo sobre algum item sem precisar encontrar e ler todas as opiniões e notícias a respeito.

Existem diversas aplicações para o uso da Mineração de Opinião, sendo algumas listadas abaixo:

  • análise de empresas na bolsa de valores: quem acompanha nosso Blog deve se lembrar do projeto stockmood.com, cujo objetivo é identificar o humor do mercado em relação às empresas negociadas na bolsa de valores baseado nas opiniões dos analistas, com o intuito de identificar a tendência dos preços das mesmas;
  • análise de um produto: uma empresa pode ter interesse na opinião dos usuários sobre um determinado produto. Por exemplo, a Apple (ou uma concorrente) pode realizar uma mineração de opinião para saber o que as pessoas andam dizendo sobre o iPhone 3G. Esses resultados podem ser usados com o intuito de melhorar os produtos ou mesmo para identificar estratégias de marketing. Uma aplicação desse tipo chamada Sentweet foi desenvolvida aqui no Labs para classificar a opiniões postadas no microblog Twitter;
  • análise de lugares: uma pessoa que vai viajar pode utilizar as opiniões de outras sobre o lugar pretendido para planejar o roteiro da viagem, evitando passeios desinteressantes;
  • análise de políticos: os eleitores podem identificar qual a opinião de outros eleitores sobre um determinado candidato político;
  • análise de filmes e jogos: também é possível minerar a opinião sobre filmes e jogos eletrônicos;

Basicamente, os passos envolvidos no processo de mineração de opinião são:

  1. coleta de conteúdos: visa buscar na Web conteúdos sobre o item de interesse, e também identificar se esse conteúdo é relativo a um fato ou uma opinião. Fatos devem ser descartados, já que o interesse  é nas opiniões dos usuários;
  2. classificação: a polaridade do conteúdo recuperado deve ser identificada. Geralmente, as polaridades usadas são positiva, negativa ou neutra;
  3. sumarização dos resultados: as classificações das diversas opiniões devem ser sumarizadas para o usuário, com o intuito de facilitar o seu entendimento sobre as mesmas. Essa sumarização pode ser em forma de texto ou gráfico.

O passo de coleta dos conteúdos está relacionado com recuperação da informação. Porém, deve utilizar técnicas mais avançadas capazes de identificar se o conteúdo é uma opinião ou um fato, o que não é uma tarefa trivial. No entanto, nem todo fato deve ser descartado, já que mesmo fatos podem conter algum tipo de opinião, e vice-versa. Essa distinção é importante para se ter uma acurácia maior no passo seguinte, de classificação.

Basicamente, a etapa de classificação dos conteúdos pode ser realizada com três técnicas diferentes, que são brevemente descritas abaixo:

  • aprendizagem de máquina: essa técnica requer que um conjunto de conteúdos seja previamente classificado para servir de base para o treinamento do modelo. A partir desse modelo treinado, novos conteúdos são classificados. Uma vantagem dessa abordagem é a utilização de algoritmos já consolidados e eficientes. Como desvantagens, podemos citar a necessidade do conjunto ser classificado para treinamento e que, para diferentes tópicos, diferentes conjuntos de treinamento são necessários. Por exemplo, um modelo treinado com um conjunto de conteúdos relacionados ao mercado financeiro não é adequado para classificar conteúdos sobre política;
  • seleção de palavras: essa abordagem envolve avaliar as palavras dos conteúdos e identificar aquelas positivas e negativas com base em uma lista de palavras previamente selecionadas. Com isso, é possível executar algoritmos para classificar o conteúdo como positivo, negativo ou neutro. Vantagens dessa técnica são a sua simplicidade e o fato de ser desnecessário classificar documentos previamente para treinamento, como na abordagem anterior. No entanto, o conjunto de palavras positivas e negativas deve ser selecionado e deve ser específico para cada tópico;
  • análise sintática: essa abordagem envolve analisar o conteúdo sintaticamente, identificando adjetivos e/ou advérbios (principalmente) que podem indicar polaridades dos textos. Como vantagem dessa abordagem, pode-se citar não ser necessário classificar previamente um conjunto de textos.   Porém, ela requer um analisador sintático eficiente e que os conteúdos sejam compostos por sentenças sintaticamente corretas.

Essas três abordagens podem ser adotadas em conjunto, formando um modelo híbrido, para tentar aumentar a acurácia da classificação.

O último passo, de sumarização dos resultados, pode ser apresentado de forma textual ou gráfica. A sumarização em forma de texto não é uma tarefa trivial, e é um tópico de pesquisa por si só. Ela envolve geração de linguagem natural com base em diversos conteúdos e existem várias propostas de pesquisadores para tal. Porém, ainda é um tópico em aberto, com várias dificuldades para serem enfrentadas. A sumarização em forma de gráfico é mais simples, e exige somente que uma forma fácil de ser lida e interpretada seja adotada.

Existem diversos desafios na área que devem ser tratados para que a mineração de opinião seja obtida com uma acurácia representativa. Várias dessas dificuldades estão relacionadas ao processamento de linguagem natural, que está diretamente  relacionado à mineração de opinião. Abaixo são descritas alguns desses desafios:

  • não é trivial distinguir se um texto é opinião ou fato, e principlamente identificar em um fato se existem opiniões embutidas;
  • textos podem conter sarcasmos e ironias, o que também não são fáceis de serem identificados e podem impactar os resultados;
  • um texto pode referenciar mais de um item de interesse (pode citar iPhone e iPod) com opiniões diferentes sobre os itens, o que pode confundir a classificação;
  • uso de pronomes para referenciar itens pode dificultar a identificação de sentenças que mencionam o item de interesse;
  • textos com palavras escritas erradas e com sentenças sintaticamente mal formadas (o que é bastante comum nos Blogs e redes sociais atualmente) dificultam a busca e classificação dos mesmos;
  • uso de termos do “Internetês”, como por exemplo “vc”, “fds” e “:)”, devem ser considerados no vocabulário;
  • propaganda disfarçada, em que blogueiros recebem dinheiro para falar bem de alguma empresa ou produto pode impactar os resultados.

Podemos perceber que a mineração de opinião é uma tendência da web com diversas aplicações interessantes, dado o grande número de dados disponibilizados pelos usuários. Porém, não é uma tarefa trivial de ser realizada, já que envolve vários desafios como os descritos nesse post. Esperamos que um dia seja possível termos um sumário automático das opiniões divulgadas pelos diversos internautas, com uma qualidade alta para nos ajudar nas diversas tomadas de decisões sobre os mais diferentes temas.

Data Mining, Linguagem Natural 2 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)

Lidando com datasets minúsculos

Há um tempo atrás, escrevi aqui no Tecnologia Inteligente um artigo onde eu criticava algumas esperanças meio irreais sobre o que se pode fazer com bases de dados (ou datasets, o anglicismo que efetivamente usamos o tempo todo no nosso trabalho :) imensamente grandes. Já neste artigo, pretendo analisar um problema que de certa forma é oposto – o das bases de dados pequenas demais.

Sim! Por incrível que pareça, em uma era onde se fala em “dilúvio de dados” em quase todos os campos da Ciência e terabytes rapidamente caminham para a trivialidade, ainda assim às vezes, em certos casos específicos, a quantidade de dados disponível é muito menor do que poderia ser considerado satisfatório. 

De fato, tive inspiração para escrever este artigo porque nas últimas semanas estava lidando com um dataset biológico muito pequeno, com dados caracterizando apenas seis amostras. Ah, sim, aqui é importante frisar que era um dataset pequeno em número de amostras, mas cada amostra era caracterizada pelos valores de expressão de dezenas de milhares de genes, totalizando um tamanho de uns dois megas.

O que, a propósito, há muito parece um tamanho ridículo em nossa era onde facilmente temos arquivos de vários gigas, mas de qualquer modo já é um tamanho humanamente intratável e que exige análises computadorizadas.

Outro comentário pertinente é relacionado com o fato de que muitos podem achar estranho um dataset biológico ser pequeno, já que a fama é de serem enormes. Bom, o caso é que muitas vezes, para certos problemas, coletar dados de um grande número de amostras pode ser difícil, ou caro, ou ambos. Pense em indivíduos com condições médicas raras, ou então em exames médicos que são caríssimos, e vai ser fácil juntar os pontos para ver como aparecem com razoável freqüencia datasets biológicos minúsculos.

Bom, qualquer que seja o motivo da escassez de amostras, como lidar com esses números reduzidos em um estudo de aprendizagem supervisionada? Eu tenho a seguinte receita de bolo de três passos:

Validação leave-one-out

Depois que são treinados com (duh! :) dados de treino, classificadores são validados com dados de teste que eles nunca “viram”, os famosos out-of-sample.  Dado um conjunto inicial de amostras, existem diversas formas de “produzir” conjuntos de teste e treinamento.

A mais simples delas é simplesmente escolher aleatoriamente uma fração (digamos, 2/3) das amostras para treinamento, e usar o restante para teste.

Uma segunda forma mais sofisticada e confiável, que torna mais improvável a seleção de conjuntos de treino e teste irrealmente favoráveis, é a chamada cross-validation.

Nesta política de validação, o dataset inicial é dividido em n subconjuntos com mais ou menos o mesmo número de amostras, e correspondentemente são feitos n pares de treino e teste: no primeiro par o subconjunto 1 é usado para teste e o restante para treinamento; no segundo par o subconjunto 2 é usado para teste e o restante para treinamento; e assim por diante.

Pois bem, no caso de datasets com pouquíssimas amostras, o ideal é usar o leave-one-out (“deixe um de fora“, numa tradução literal que funciona), que é o caso especial de cross-validation onde n é igual ao número de amostras da base – isto é, a cada par só uma amostra é usada como teste e todas as outras para treinamento.

Esse tipo de validação minimiza ao extremo a probabilidade de formação de pares “privilegiados” de treino e teste, a qual já não é tão pequena assim em datasets minúsculos.

Análise de Permutação:

Vamos supor que você foi cuidadoso na fase anterior de validação, usando leave-one-out, e descobriu que seus classificadores têm um desempenho maravilhoso nos dados, com altas acurácias tanto nos conjuntos de treino quanto de teste.

Mas, se você for realmente rigoroso (alguns diriam paranóico, mas a paranóia quase chega a ser uma virtude na Ciência :), deverá considerar a possibilidade de que talvez seus resultados sejam tão bons porque o número de amostras é pequeno e é fácil para o seu algoritmo decorar algumas propriedades numéricas dos dados que *por coincidência* podem ser usadas para distinguir corretamente as categorias (digamos que casos de controles), mas não necessariamente são relacionados com o problema real que está sendo estudado.

A solução para verificar essa terrível possibilidade é fazer a assim-chamada análise de permutação. Esta é um “embaralhamento”: consiste em trocar aleatoriamente os rótulos de categoria entre as amostras. Gerando muitas permutações diferentes e vendo que as acurácias dos testes feitos com dados “embaralhados” são menores que o resultado obtido com os dados reais, pode-se inferir que as acurácias excelentes devem ser também “reais”, correspondendo a padrões relevantes para o problema investigado.

Nota: aqui estou falando em acurácia – que talvez seja a métrica de qualidade de classificação mais comum, óbvia e intuitiva – mas existem outras métricas, e o que estou dizendo aqui usando acurácia também vale para elas.

Comportamento com métodos não-determinísticos:

Às vezes, nem a análise de permutação pode ser suficiente. Se o dataset for muito pequeno mesmo, o número total de permutações pode ser tão modesto que não permite calcular um alto valor de significância estatística.

No dataset de apenas seis amostras que mencionei, o número de embaralhamentos utilizáveis era de apenas 18. Quando se nota que tradicionalmente o limiar de significância interessantemente para os biólogos é de 0.05, ou uma chance em 20 dos seus resultados serem “falsos”, 18 permutações parecem problemáticas para decidir se seus resultados passam nesse limiar. :) Como então contornar essa forma extrema do problema dos datasets pequenos?

Uma opção interessante pode ser usar um método de classificação não-determinístico (por exemplo GA, GP, vários modelos de redes neuronais, etc) e realizar vários testes de classificação sobre os seus dados reais e sobre os dados permutados.

Um método não-determinístico não necessariamente produz o mesmo classificador com os mesmos dados de entrada, e assim no final essa etapa de validação terá gerado um monte de classificadores diferentes – uns melhores, uns piores que os outros. Interessantemente, agora é possível se falar em comparação de distribuições de acurácias, e não de um dado pontual de acurácia nos dados reais versus um pequeno conjunto de acurácias “embaralhadas”.

Essas distribuições podem ser tão grandes quanto se queira – basta gerar mais classificadores de forma não-determinística – e quanto maior o número de pontos amostrais envolvidos, mais estatisticamente significativa será qualquer discrepância entre as distribuições com e sem embaralhamento.

Moral da história

Enfim, o ideal mesmo em vários processos científicos é trabalhar com números grandes de amostras, mas se as vicissitudes da vida um dia obrigarem você a lidar com datasets minúsculos, não se desespere! Com os macetes descritos há uma boa chance de você espremer (admitidamente de forma um tanto lenta e dolorosa)  alguns padrões confiáveis apesar de tudo; ou na pior das hipóteses demonstrar confiavelmente que seu dataset não presta mesmo. :)

Biotecnologia, Data Mining 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

TechCrunch 50!

Está rolando em San Francisco a TechCrunch 50, uma grande conferência onde startups se apresentam para a imprensa, investidores, empreendedores e outros formadores de opinião do Vale do Silício. É provavelmente o maior evento dedicado ao lançamento de novos produtos, sites e empresas inovadoras do mundo. As empresas selecionadas (52 de um total de mais de 1000 inscrições) têm que manter seus produtos em segredo até a conferência.

Como a conferência já começou, podemos anunciar que um dos produtos lançados foi desenvolvido todinho aqui no Labs, e está em beta atualmente. O StockMood.com é uma ferramenta para auxílio a pequenos investidores na bolsa dos EUA. O sistema usa processamento de linguagem natural e inteligência artificial para determinar o “tom” (positivo ou negativo) de artigos que saem na imprensa sobre uma empresa.

Correlacionando o tom dos artigos com o movimento do preço da ação ao longo do tempo, ele tenta quantificar o “humor” da ação, e gera alertas quando o humor e o tom dos artigos do dia chegam a valores muito altos ou muito baixos. Esses alertas indicam uma possível reversão dos preços. O sistema de classificação do tom de artigos está longe de ser perfeito, mas os usuários podem corrigir os erros do sistema pelo site, gerando alertas melhores e permitindo que o próprio classificador aprenda com os erros.

Brett Markinson presenting StockMood.com

A foto acima (by Andrew Mager) é do Brett, CEO da nova startup, durante a apresentação. A recepção ao StockMood.com foi geralmente bem positiva, como nesse artigo da Fortune. embora o modelo de negócios da empresa ainda esteja sendo refinado. O beta será limitado, por enquanto, a 1000 usuários cadastrados, então se você achou a idéia interessante e não tem medo do inglês, cadastre-se!

E, finalmente, parabéns a toda a equipe do StockMood.com, especialmente ao Fabrício Aguiar e ao Gustavo Gama, que vocês conhecem um pouco de posts aqui no blog.

Data Mining, Inovação, Inteligência Artificial, Internet, Linguagem Natural, Negócios, Web 2.0 10 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Na Biologia, a moda agora é criar um Wiki

Há um mês atrás eu postei sobre o WikiProteins, que é um Wiki biológico destinado à anotação de proteínas.

Mais recentemente, no início desse mês, a PloS Biology publicou um artigo sobre o Wiki Genes. O Wiki Genes é algo bastante parecido como o WikiProteins, mas voltado para prover informação sobre genes. E é voltado para ser implementado na própria WikiPedia!

A idéia dos caras foi a de colocar uma entrada na WikiPedia pra cada gene humano (e ainda pra alguns organismos modelo como o camundongo). A premissa foi a de que editores de Wikis preferem editar entradas já existentes do que criar novas. Dessa forma, a geração desses stubs (entradas no Wiki com pequenas coleções de informações) deverá alavancar a edição de genes humanos na WikiPedia.

O que eles fizeram foi parsear as entradas de todos os genes presentes no Entrez Gene e gerar cerca de 7500 stubs. Melhor do que as meras 650 entradas que existiam anteriormente. ;-) Aparentemente o resto das entradas ainda está sendo gerado – o Entrez Gene contém informação de 39950 genes humanos – não que esse seja o número total de genes humanos, mas essa é outra história. ;-)

O parser, que foi feito em Java, produz um stub diretamente em “wiki-text” e o código-fonte está disponível.

Também na PLoS saiu bem recentemente um outro artigo sobre um Wiki na área de biologia, dessa vez o Wiki Pathways. Os pathways, na biologia, são uma representação de uma miríade de interações, reações e regulações, seja entre genes, proteínas ou compostos biológicos. Por serem extremamente complexos e difíceis de curar e compilar, a estratégia foi também a de gerar um Wiki.

Aparentemente, com essa enxurrada de dados biológicos sendo gerados à todo vapor (vide as “ômicas” da vida – genômicas, proteômicas,metabolômicas, etc.), a corrente agora é para a integração desses dados, em ferramentas que permitem updates rápidos e fáceis.

E pelo visto, esses novos Wikis são o tipo de ferramenta que vêm a calhar nesse momento, pois tornam os dados acessíveis e editáveis aos curadores especialistas bem como para a comunidade em geral.

Vamos ver se a moda pega.

Biologia, Biotecnologia, Data Mining 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

A Nova Panacéia Universal: o “Dilúvio de Dados”

Recentemente, um artigo na Wired, escrito pelo seu próprio editor, o Chris Anderson, fez uma declaração bombástica: a de que o método científico está obsoleto porque os “algoritmos do Google” podem achar correlação de qualquer coisa com qualquer coisa. Ok, quem ler o artigo vai ver que eu estou supersimplificando e comprimindo tudo em uma frase, mas eu não diria que a versão descomprimida e complicada soa menos bombástica ou mais aceitável. Pelo contrário! :)

Nem bem uma semana passou após a emissão dessa opinião, uh, digamos, polêmica, e vários artigos pipocaram pela Internet dizendo basicamente duas coisas: que o método científico continua muito bem, obrigado, e que o autor provavelmente não tem uma noção conceitual muito clara do que é Ciência. Um exemplo particularmente bem-humorado desse contra-ataque é o artigo do Daily Galaxy. Não vou chover muito no molhado e só vou ressaltar um argumento bem interessante que vi por aí para desconstruir essa alegada “obsolescência do método científico”:

Primeiro, vamos desconsiderar as limitações do Google e outros search engines – sim, apesar de impressionantes, eles são ferramentas de domínio e capacidade limitados, feitas especificamente para produzir resultados de buscas de páginas Web (e outros tipos de documentos online) que satisfaçam a maioria das pessoas. Mas vamos supor que em um futuro não muito distante o Google se torne (como quer o editor da Wired) uma espécie de oráculo que saiba tudo de qualquer coisa e que em teoria substitui a Ciência. Vamos supor que alguém pergunte ao oráculo algo como “quero a cura da gripe” e o Google magicamente, usando só correlação de dados, mostre a fórmula da tal droga que cura gripe. Agora, uma pergunta para o leitor: você tomaria essa droga sabendo que ela é apenas o que algoritmos estatísticos “acham” que deve ser uma solução, sendo que ela nunca foi testada sequer em cobaias? Se a sua resposta é “não”, é um sinal de que você considera o método científico, e toda a parte de validação experimental, necessários sim.

Acho que o artigo irrealisticamente entusiástico da Wired é só um indício de uma manifestação recente do que chamo de “Sindrome da Panacéia Universal”. É uma síndrome recorrente, com inúmeras encarnações ao longo da história da Ciência e da Tecnologia, que basicamente são produzidas toda vez que algum recurso inovador e revolucionário se populariza. Essa síndrome aliás pode se materializar em vários níveis e em vários contextos, muitas vezes bem específicos. Por exemplo, no contexto da pesquisa de IA do início dos Anos 90 aqui no Brasil, redes neurais estavam muito na moda e havia um “hype” de que elas poderiam solucionar todos os problemas da aprendizagem de máquina. Também ao longo dos 90, nos campos de engenharia de software e linguagens de programação, havia um hype em torno da Orientação por Objetos, que também era “vendida” por muitos como a solução para todos os problemas do desenvolvimento, engenharia e arquitetura de software. E assim cada época vai adorando suas “balas de prata” até que as pessoas caem na real. (Ou então surja uma nova moda de bala de prata para substituir a anterior. :)

O hype de panacéia universal que a Wired caiu vítima, porém, além de mais recente é de um nível mais abrangente. Eu o chamo de a Panacéia do Dilúvio de Dados. Porque hoje em dia a capacidade de armazenamento de dados sobe às alturas, armazena-se dados sobre qualquer coisa, os dados são acessíveis de qualquer lugar e, o que talvez seja o ponto crucial, pode-se fazer buscas nesses dados, começa-se a criar no imaginário popular (ou quem sabe seja só no, como diria o Kenji, “imaginário computeiro” :) a noção de que a resposta para todas as perguntas e a solução para todos os problemas está nessa massa gigantesca de dados online, é só saber minerá-los direito; ela teria se tornado o próprio Logos, o Conhecimento Definitivo.

O meu reality check para isso é primeiro reconhecer que massas gigantescas de dados são sim coisas fascinantes e muito úteis – sei muito bem disso, uma boa parte do meu trabalho nos projetos do Vetta Labs com a Biomind envolve a análise de bases de dados biológicas com nossas ferramentas de aprendizagem de máquina. Mas, uma vez feito esse reconhecimento, também tenho de reconhecer que, em última instância, os resultados da nossa mastigação de dados servem é para sugerir ao biólogo o que eles devem investigar (e às vezes como a investigação deve ser feita) com seus experimentos; não serve de forma alguma para eliminar esses experimentos, mas antes para guiá-los, dar prioridades e mesmo levar à geração de novas hipóteses. De fato, esses métodos de mineração de dados não vieram para depor o Método Científico, mas antes para ajudar a Ciência, como uma nova (e extremamente poderosa) ferramenta analítica. E sinto que essa conclusão que tirei da minha experiência profissional e acadêmica com Bioinformática é generalizável sem problemas para todas áreas da ciência e da tecnologia. Assim, parece que as notícias do assassinato do Método Científico pela Panacéia do Dilúvio de Dados foram grandemente exageradas…

Biologia, Data Mining, Internet, Web 2.0 2 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Weka

Depois dos 2 excelentes posts do Lúcio sobre Machine Learning (ML), você pode estar se perguntando: mas como utilizo tudo isso na prática? Neste post irei apresentar (sem detalhes para não ficar chato) uma ferramenta bastante difundida e utilizada no mundo na área de ML: o Weka (Waikato Environment for Knowledge Analysis).

Weka é um pacote de código aberto (com licença GNU General Public License) composto de algoritmos de ML implementados em Java. Seu desenvolvimento foi iniciado em 1993 e ficou nas mãos de uma equipe da Universidade de Waikato na Nova Zelândia durante aproximadamente 13 anos. Em 2006, o projeto foi incorporado ao conjunto de soluções de uma empresa de BI chamada Pentaho.

A versão mais recente conta com diversos algoritmos de ML implementados, incluindo algoritmos de clustering, classificação, regras de associação e regressão. Além dos algoritmos, também conta com uma gama de implementações relacionadas com pré-processamento dos dados, filtros e interfaces para visualização. Para entrada de dados, o Weka permite os formatos ARFF (formato desenvolvido especificamente para o Weka), CSV e leitura diretamente do banco de dados via JDBC. Além da possibilidade de utilizar o Weka incluído no seu código Java, também é possível utilizar uma ferramenta gráfica chamada de Explorer para entrada de dados e execução dos algoritmos. Pelo Explorer, você pode ter uma visão gráfica dos seus dados de entrada, executar facilmente diferentes filtros e algoritmos e realizar avaliações dos modelos. Porém, ao lidar com quantidades muito grandes de dados (o que geralmente é o caso na utilização de ML) e também para automatizar o processo, é melhor utilizar o Weka diretamente no seu código.

O código do projeto é muito bem estruturado e escrito, adotando as melhores práticas e padrões de desenvolvimento orientado por objetos. Em um projeto desenvolvido aqui no Labs, tive que modificar o código de um filtro para adaptá-lo aos nossos requisitos. E essa tarefa não foi um bicho de sete cabeças, mesmo sendo um código totalmente desconhecido a princípio.

Pra finalizar, gostaria de deixar uma dica de um excelente livro para os interessados no assunto, tanto de Machine Learning e Data Mining em geral quanto do Weka. O livro é Data Mining: Practical Machine Learning Tools and Techniques.

Data Mining 5 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Aprendizagem de Máquina ao Alcance de Todos – (1)

Volta e meia surge algum artigo aqui no blog falando de aplicações de inteligência artificial e frequentemente usando termos que podem soar meio misteriosos para muitos, como o críptico “aprendizagem de máquina”, às vezes também usado em sua forma original em Inglês, “machine learning”. Penso que talvez esse termo pode ainda evocar na cabeça de muitos uma imagem de coisa scifi incompreensível, então decidi escrever este artigo (em dois “capítulos”) sobre o beabá da aprendizagem de máquina para mostrar que, uma vez explicado, o tal Machine Learning (ou ML) pode até parecer meio prosaico…

A definição vaga e por alto (e não sei se existe uma definição exata e profunda, a propósito :) de ML como um todo é: um método ou algoritmo para descobrir de forma automatizada padrões em uma massa de dados. Acho que essa definição não diz muito coisa sem exemplos, então vamos dar alguns nomes a alguns bois.

Vamos supor que você tenha um banco de dados com características de várias pessoas. As características podem ser qualquer coisa (digamos, peso, altura, idade, etc), desde que possam ser comparadas de forma quantitativa ou lógica. Esse conjunto de valores de características descrevendo cada pessoa é chamado vetor de características, em jargão de ML.

Já que o valor da altura de uma pessoa é comparável com o valor da altura de outra, o mesmo acontecendo com peso, idade e demais dimensões (=outro jargão de ML – bem, na verdade de ciências exatas em geral, nesse caso :) do vetor de características, então acaba que dois vetores inteiros podem ser comparados um com o outro, levando em conta todas as suas dimensões ao mesmo tempo. É possível criar o que chamamos de medida de similaridade, que é simplesmente uma conta envolvendo todas as dimensões de dois vetores que no final solta um número – quanto mais alto esse valor, mais similares são esses vetores.

De posse dessa medida, já é possivel fazer coisas divertidas em ML – por exemplo juntar as pessoas parecidas umas com as outras, dividindo o conjunto original em vários subconjuntos de pessoas parecidas. Esse tipo de processo é o chamado clustering – ou aglomeração, traduzindo – e é a base da vertente de ML chamada de aprendizado não-supervisionado.

A parte do “aprendizado” nesse nome vem do fato de que antes os elementos do conjunto de dados sendo analisado eram completamente amorfos, não-estruturados, “farinha do mesmo saco” por assim dizer; após o clustering, porém, temos grupos separados nos quais veremos padrões. No exemplo do clustering de pessoas, talvez se forme um aglomerado de pessoas baixas e gordas, outro de pessoas altas, um de pessoas velhas de peso médio, e por aí vai.

Já a parte do “não supervisionado” vem do fato de que não é preciso dizer ao algoritmo de clustering sendo usado (existe uma infinidade deles) se os resultados que ele está produzindo são bons ou ruins, ele mesmo toma suas próprias “decisões” de como fazer melhor a aglomeração. Aliás, é difícil dizer quantitativamente e de forma geral, irrestrita, se um clustering é bom ou ruim, no sentido de que é algo um tanto subjetivo – existe uma multiplicidade de métricas de qualidade de clustering, com aplicações apropriadas caindo em vários casos diferentes.

Existe também, é claro, a aprendizagem supervisionada, o outro grande campo da Aprendizagem de Máquina. Mas isso é assunto para a Parte 2 deste artigo…

Data Mining, Inteligência Artificial 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

WikiProteins: um site público para a anotação de proteínas

Está no ar o WikiProteins beta, que é parte de uma iniciativa iniciada anteriormente, o WikiProfessional. A idéia é a mesma do WikiPedia porém voltada para a anotação de proteínas.

A anotação é um processo de caracterização de proteínas, principalmente de sua função. Existem biólogos em constante processo de anotação de proteínas e genes. Esse processo pode se dar em intervalos curtos de tempo, como em projetos genomas, onde diversos novos genes são descobertos e precisam ser anotados. Ou como em projetos de longo prazo, como a anotação de todo o UniProt, por exemplo.

Em ambos os casos todos os tipos de informações sobre genes e proteínas tentam ser coletados, assim como dados de função, localização, informações estruturais, artigos científicos relacionados, etc. O WikiProteins provê exatamente esse tipo de informação de maneira editável por qualquer um.

É claro que foi necessário um esforço computacional inicial pesado pra reunir diversas informações de proteínas e genes em um único pool inicial pra servir de startup pro wiki. E os dados foram minerados de fontes bem confiáveis, como o PubMed, UniProt e BioMed Central.

Os autores fizeram uso de metodologias de text mining/data mining que demandaram a criação de um componente de software, denominado Knowlet. Os Knowlets, segundo os autores, “combinam múltiplos atributos e valores para os relacionamentos entre conceitos” (tradução minha). Mais sobre isso no paper da Genome Biology.

Só pra constar, eu andei testando o WikiProteins com uns genes que o Lúcio me passou ;-) Esses genes parecem ser relacionados com nefropatia em pacientes diabéticos. Mais especificamente o gene PCSK1, que é uma proteína neuroendócrina. O WikiProteins me retornou uma série de informações relevantes e minha impressão é que o site promete.

Infelizmente ele não me retornou exatamente o que eu queria saber - e isso eu obtive com o bom e velho Gene Cards :

…susceptibility gene for non insulin dependent diabetes (type II) and…”

Bom, acho que agora é hora de promover o site e editar o Wiki… ;-)

PS: Ah, esse post foi de dica de um amigo, o Durfan

Biologia, Biotecnologia, Data Mining 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Analisando Dados “Misteriosos”

Naquele estranho (e meio nojento – tudo bem, muito nojento) filme de 1986 do Cronenberg, “A Mosca”, em algum momento a repórter interpretada pela Geena Davis pergunta ao cientista vivido pelo Jeff Goldblum como ele conseguiu construir um teleportador do nada no galpão dele. O cientista responde que na verdade ele não fez aquilo sozinho e nem do nada, ele contratava equipes de cientistas ao longo do globo pedindo coisas esquisitas do tipo “quero um analisador molecular obedecendo tais e tais especificações”, e aí uns meses depois lá chegava o analisador molecular. As equipes independentes de cientistas que resolviam esses sub-problemas e criavam esses componentes só enxergavam o que precisavam enxergar, não tinham noção de onde a solução que eles desenvolveram seria aplicada, e principalmente não tinham a menor idéia do projeto do teleportador que o personagem principal estava desenvolvendo.

No mundo real, longe das referências nerd envolvendo obras de ficção científica, devo dizer que nós aqui do Vetta Labs às vezes nos sentimos um pouco como os cientistas do filme que construíram o analisador molecular sabe-se lá para ser usado em que. Como diz o ditado, “o segredo é a alma do negócio”, e isso é particularmente aplicável quando o negócio envolve a análise de informações de outras empresas que querem ao mesmo tempo terceirizar serviços de mineração de dados e preservar o sigilo de seus contratos e seus clientes.

Pois bem, uns meses atrás, em mais um daqueles exemplos das maravilhas do outsourcing de pesquisa, fomos contratatos pela Novamente para analisar os dados de um terceiro cliente-cujo-nome-não-será-revelado, que como dá para suspeitar pela omissão do nome era justamente desses que preferem manter seus dados e planos envoltos em mistério. Recebemos uma base de dados composta por dezenas de milhares de tuplas, cada uma formada por um punhado de valores correspondendo a um pequeno conjunto de variáveis. O problema que nos foi colocado foi tentar prever uma das variáveis em especial com base nos valores de todas as outras, com uma taxa de acerto superior a um certo limite mínimo aceitável. A variável a ser predita era, para todos os fins práticos, lógica, do tipo “sim” ou “não”. As demais variáveis eram bem variadas, algumas claramente numéricas, outras também lógicas, e finalmente umas que talvez fossem numéricas ou talvez fossem simbólicas. O caso é que não tínhamos nem muita certeza do tipo de algumas das variáveis porque não nos foi dada qualquer informação sobre as mesmas. Os nomes de algumas variáveis até davam pistas do que elas deviam ser (mas não exatamente em que unidades elas estavam sendo medidas), porém outras variáveis tinham nomes herméticos que não ajudavam muito do ponto de vista da, digamos, semântica dos dados.

Assim, inventando uma base de dados parecida para fins de exemplificação, vamos supor que temos um conjunto aparentemente desprovido de sentido de quatro variáveis chamadas TUTU, PEDRA, CAVALO e CHUVA, e com base nelas temos de prever se o valor de uma quinta variável RESPOSTA é “sim” ou “não”. Existem dezenas de milhares de combinações-exemplo de valores de TUTU, PEDRA, CAVALO e CHUVA com valores conhecidos de RESPOSTA, e com base nelas devemos achar regras engraçadas como, digamos, “Se TUTU vale mais que 0.65, PEDRA tem valor ‘mole’ ou ‘redonda’, CAVALO pode ter qualquer valor e CHUVA vale ‘forte’, então RESPOSTA é ‘sim’, caso contrário ‘não’”, regras essas capazes de prever RESPOSTA corretamente com uma acurácia maior que um mínimo estipulado pelo cliente.

Numa situação dessas, o bom minerador de dados deve se ater àquela máxima que acredita-se o filósofo-patrono das ciências exatas, o Pitágoras, soltou uns 25 séculos atrás: “Tudo são números”. É verdade que, como já exemplificamos várias vezes aqui no blog, quando mais informação você tem sobre uma base de dados, melhor, e às vezes é inclusive interessante usar outras bases de dados direta ou indiretamente relacionadas para “amplificar” a base objeto do seu estudo. Porém, nas situações em que não podemos (ou não devemos :) saber mais a respeito dos dados, o puro uso da lógica e da matemática podem ainda assim ser surpreendentemente efetivos.

Foi assim no caso dessa base de dados “misteriosa”. Devo dizer que criar uma abordagem capaz de passar do limite de acurácia mínimo pedido pelo cliente foi bem… desafiador, talvez inclusive devido ao desconhecimento da semântica dos dados. Mas, no final, chegamos a uma método bem robusto capaz de resolver até nossas dúvidas sobre o tipo exato de algumas variáveis. Nessa metodologia (da qual falarei apenas por alto para não “falar demais” :), desenvolvemos uma maneira de medir a “capacidade de predição” de uma variável quando assumia um dado valor (não importando se esse valor é um número, uma string, lógico, etc), e também para qual resposta (“sim” ou “não”) tendia esse dado valor de dada variável. No final, ao contrário do exemplo acima, nossas regras verificavam não os valores diretos das variáveis, mas sim a capacidade de predição dos valores que elas estavam assumindo na tupla em questão, e com base nisso decidiam se a tupla apontava para “sim” ou um “não”.

Conseguimos com essa abordagem ultrapassar (por pouco) a acurácia mínima pedida pelo cliente, inclusive em um segundo conjunto de tuplas completamente desconhecidas, seguindo o mesmo formato de dados, que o cliente nos forneceu para uma validação adicional. É possível que agora formalizemos um serviço de análise e desenvolvimento de mais longo prazo – e quem sabe até com um véu de mistério menos espesso. De qualquer forma, a lição que ficou foi: os números são seus amigos, não se desespere se eles são a única coisa ajudando você em seu trabalho de análise de dados. ;-)

Data Mining, Inovação, Inteligência Artificial 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5,00 out of 5)

« Previous Entries