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)

Extração Inteligente de Palavras-Chave

Aqui na Vetta Labs desenvolvemos algumas tecnologias baseadas no processamento de linguagem natural, como já comentei em outro artigo. Hoje vou falar de uma nova aplicação que produzimos recentemente, que tem duas características bem interessantes: uma é suportar tanto textos em inglês quanto em português (o que é bastante incomum, já que as particularidades de nossa língua nem sempre são compatíveis com as técnicas mais conhecidas); a outra é que os resultados produzidos são muito fáceis de serem utilizados na prática, de forma simples, em por exemplo blogs e portais de conteúdo.

É comum sites associarem aos seus artigos frases ou palavras-chave relacionadas ao conteúdo. Essas palavras-chave podem funcionar como resumos do que é discutido, levar o usuário a outros artigos que tratam dos mesmos assuntos e também ajudar na categorização e indexação dos textos. Normalmente essas frases ou palavras-chave são escolhidas pelo próprio autor, ou então definidas pelos visitantes, de forma colaborativa (o que exige um grande número de visitas e “votos” para evitar resultados de baixa qualidade ou sem sentido).

O problema é que muitas vezes já temos uma grande coleção de textos sem palavras-chave definidas, e escolhê-las manualmente  é uma tarefa extremamente árdua.  Existem algumas ferramentas simples para detecção automática de palavras-chave, mas praticamente todas elas usam uma abordagem ingênua que dificilmente funciona bem: são usados dicionários, tabelas com palavras-chave pré-definidas, e  a aplicação simplesmente verifica se a palavra-chave na lista aparece no artigo. Essa alternativa é inútil se os artigos em questão são sobre assuntos pouco comuns, ou se as palavras-chave que desejamos são termos menos conhecidos.

Esse exatamente era o problema de dois dos nossos clientes: a h+ Magazine, uma revista eletrônica sobre trans-humanismo, singularidade e outras tendências tecnológicas e culturais, e o Ceticismo Aberto, um dos maiores sites do Brasil sobre ceticismo e divulgação científica.

Keywords through cyberspace (Digital Composite)

A solução que desenvolvemos utiliza técnicas de processamento estatístico de linguagem natural e aprendizado de máquina para extrair automaticamente frases e palavras-chave de milhares de artigos desses sites. As palavras-chave encontradas incluem neologismos, expressões, nomes próprios e termos obscuros que jamais apareceriam nos resultados de uma abordagem baseada em listas, e são automaticamente inseridas nos sistemas de gestão de conteúdo dos sites (baseados em WordPress e Drupal), permitindo seu uso imediato.

Nosso sistema inicialmente identifica frases ou palavras-chave candidatas criando sequências de até três ou quatro palavras. Cada candidata então é analisada, extraindo-se características como:

  • frequência no uso geral (palavras extremamente comuns não são importantes)
  • frequência no texto (palavras repetidas no artigo têm peso maior)
  • posição no texto (palavras no início ou no final do texto costumam ser mais representativas)
  • categoria gramatical (substantivos têm mais peso que preposições, por exemplo)
  • função sintática (frases sintaticamente incorretas ou incompletas são rejeitadas)
  • entidades ou lugares representados (o sistema identifica nomes próprios como Albert Einstein, Zumbi dos Palmares, Belo Horizonte ou São Luís do Paraitinga)

Note que combinar todas as essas informações extraídas e decidir se determinada candidata é ou não uma frase ou palavra-chave é uma tarefa complicadíssima. Para resolver esse problema, usamos um método de aprendizado supervisionado: utilizamos um pequeno número de artigos (em torno de 50 ou 100) que já tinham suas palavras-chave definidas manualmente pelos autores como exemplos positivos. Um algoritmo de aprendizado supervisionado analisa as informações acima dos exemplos positivos dados e aprende a identificar as palavras-chave, automaticamente. O interessante é que o modelo obtido é capaz de generalização, ou seja, apesar de ter aprendido “estudando” apenas 100 artigos ele é capaz de aplicar de forma correta as mesmas regras para artigos inéditos.

E os resultados são surpreendentes – às vezes é difícil convencer as pessoas de que as palavras-chave foram escolhidas automaticamente e não por uma pessoa capaz de ler e interpretar cada um dos artigos!

Notas

A nova versão do Ceticismo Aberto, já com as palavras-chave extraídas pelo sistema da Vetta Labs, entrou no ar no domingo 21 de Fevereiro, e a versão em inglês, para a h+ Magazine, deve ser disponibilizada publicamente em breve.

O projeto foi desenvolvido por Fabrício Aguiar (que já fez com a gente outras aplicações interessantes baseadas em linguagem natural), a partir de código escrito por Murilo Queiroz (que também coordenou o desenvolvimento) e diversos projetos de software livre, incluindo o WekaKEAOpenNLP, CoGrooRembrandt e OpenCalais.

Os arquivos de treinamento usados na versão para português foram criados  por Kentaro Mori, do Ceticismo Aberto, e muitas das idéias foram sugeridas inicialmente pelo Dr. Ben Goertzel.

Inteligência Artificial, Linguagem Natural 7 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 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)

Google Summer of Code 2009

Aqui no Vetta Labs são desenvolvidos vários projetos da Novamente, e com isso temos bastante contato com o Singularity Institute for Artificial Intelligence (SIAI). Desde o ano passado o SIAI é um participante do Google Summer of Code, um programa que paga bolsas (US$ 4000) para estudantes do mundo todo trabalharem em projetos de código aberto e software livre durante o as férias do verão americano (daí o nome).

Os estudantes são orientados por mentores ligados às  organizações participantes. No GSoC 2008 fui mentor do projeto OpenBiomind-GUI, que desenvolveu uma interface gráfica para um conjunto de ferramentas open source para bioinformática. Outro colega, Lúcio de Souza Coelho, também participou como mentor. Foi uma experiência muito interessante e gratificante.

E agora foram abertas as inscrições para o Google Summer of Code 2009! Estudantes no final da graduação e em pós-graduação podem participar, submetendo propostas baseadas nas idéias sugeridas pela organização, que incluem projetos em inteligência artificial e robótica  (OpenCog), processamento de linguagem natural (Link Grammar e RelEx), bioinformática e outros temas.

As propostas são avaliadas pelos mentores e outros membros do grupo, e as melhores são aceitas no programa. Ano passado houve 70 propostas para 11 vagas. A data limite para submissão de propostas é 3 de Abril.

A página principal do GSoC tem todas as informações necessárias:

http://socghop.appspot.com

A página do SIAI no Google Summer of Code, especificamente, é a seguinte:

http://socghop.appspot.com/org/show/google/gsoc2009/opencog

Biotecnologia, Desenvolvimento, Inteligência Artificial, Linguagem Natural 1 Comentário

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

Web semântica, sem enrolação

Hoje me pediram para explicar o que era a tal web semântica. A pegadinha é que se queria uma resposta “sem frescuras”, “sem enrolação de marketing” e com exemplos concretos. Esse artigo é uma tentativa de abordagem bem informal desse assunto.

A web que a gente conhece é feita para ser acessada por pessoas. A informação é organizada de forma que fique esteticamente agradável, num formato familiar aos usuários. Usabilidade é fundamental, mas cria um problema: o que é fácil de ser entendido por humanos não é compreendido por computadores.

Tome como exemplo as suas lojas preferidas na Internet. Os produtos, preços e condições de pagamento são mostrados de forma a chamar a sua atenção. Cada loja faz isso de uma forma diferente. Se você está comparando preços de uma dúza de lojas você vai ter que fazer uma dúzia de buscas, e manualmente copiar e colar isso numa planilha, para só então “digerir” esses dados.

Alguns sites fazem isso automaticamente, mas mesmo esses formatam os resultados para pessoas; escrever um programa que acompanha o preço de alguns produtos todos os dias acessando um site assim dá bastante trabalho (recentemente dei umas dicas para um amigo que fez isso).

A idéia da web semântica é ter toda essa informação disponível não apenas para pessoas, mas também num formato fácil de ser processado por computadores (imagine acessar os preços de todas as lojas da web como se acessa uma planilha eletrônica ou um banco de dados!).

No início acreditava-se que isso se tornaria realidade quando cada criador de conteúdo na web formatasse seus dados de forma estruturada. O HTML comum, usado com fins puramente visuais, daria lugar a linguagens e tecnologias mais rígidas (XML, RDF, OWL, etc.), e seriam disponibilizandas formas de acesso automatizado aos dados (semantic web services, por exemplo).

Só que o progresso nesse sentido tem sido lento: basicamente dá muito trabalho e ninguém tem muito interesse em fazer isso. Lojas não gostam quando seus preços são comparados com o das outras! :-). Há soluções específicas bastante bem-sucedidas, mas não são tão conhecidas do grande público.

Uma tentativa de atacar o problema por outro lado é usar software que consegue transformar informação formatada para pessoas em informação estruturada, automaticamente ou com ajuda do usuário.

Um exemplo desse último caso é o PiggyBank / Solvent, código livre desenvolvido no MIT.

Logo do Piggy Bank

O Solvent é uma extensão pro Firefox que deixa qualquer usuário médio criar (“quase” só visualmente) um código JavaScript que extrai informação de uma página (um scraper).

Com o Solvent (ou outras ferramentas parecidas) você pode capturar os produtos e preços de uma loja virtual, ou as notas de um jogo num site de reviews, ou endereços de agências na página do seu banco, por exemplo. Ele converte informação organizada visualmente para humanos em informação estruturada acessível por computadores.

O PiggyBank é um banco de dados estruturado para armazenar as informações extraídas pelo Solvent. Assim, se todo mundo contribui com scrapers para diferentes sites, o PiggyBank fica cheio de informação facilmente recuperável.

Ainda que para a web a coisa ainda não dê muito certo, isso numa intranet grande ou com fins específicos pode ser muito útil. Eu investiguei bastante a fundo esse tipo de ferramenta enquanto trabalhava para melhorar a busca e o atendimento aos usuários do portal do condado de Miami-Dade, na Flórida.

A partir do momento que as informações da web estão disponíveis num formato estruturado (num banco de dados, planilha ou arquivo XML, por exemplo), fica fácil pensar em um monte de aplicações interessantes.

Por exemplo, seria possível criar um agente inteligente que monitorasse milhares de lojas detectando variações de preço de produtos em que você está interessado. Poderíamos juntar informação geográfica das lojas com informação dos preços e das opiniões de usuários (cada um desses dados vindo de sites diferentes) e mostrar tudo isso no Google Maps, com gráficos feitos com a Google Visualization API – dando uma idéia de como um produto é aceito em diferentes locais, e como o preço influencia nisso.

Obviamente  a idéia central da web semântica não está restrita à implementação específica de um subconjunto dos aspectos dela que o PiggyBank / Solvent provê, nem a tecnologias específicas tradicionalmente associadas a ela. É muito mais um conceito do que uma implementação ou produto propriamente dito.

Os mashups – “misturas” inteligentes de informações de diferentes fontes para criar uma aplicação web ou site original – tão em moda hoje em dia, são materializações bem concretas do conceito de web semântica, sem necessariamente usar nenhuma das tecnologias tradicionalmente associadas a ela. Eles mostram que quando é possível ter acesso uniforme a diversas fontes de informação o resultado final pode ser surpreendente.

Um exemplo recente: misturando-se informação geográfica com pesquisas no Google de sintomas de gripe é possível criar um detector de epidemias de gripe que avisa com duas semanas de antecedência quando uma epidemia de gripe vai chegar em determinado local!

Internet, Linguagem Natural, Web 2.0 1 Comentário

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

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)

Categorização de textos

Eu ia comentar um pouco no post do Murilo (“Computador, por favor encontre…“), mas achei que daria um artigo. Vamos lá…

Como descrito pelo Murilo, o processamento de linguagem natural (do inglês Natural Language Processing ou apenas NLP) é o campo da Inteligência Artificial que visa fazer com que os computadores entendam os seres humanos pela sua linguagem natural, sem que seja necessário aprender uma linguagem artificial utilizada pelas máquinas.

Para isso, existem basicamente duas técnicas: análise sintática e análise estatística.

O RelEx descrito pelo Murilo utiliza análise sintática para extrair informações semânticas dos textos. A outra técnica citada utiliza um conjunto de dados previamente conhecido para calcular valores estatísticos que são utilizados para processar um conteúdo desconhecido. Por exemplo, na análise estatística é possível calcular as probabilidades da palavra “manga” significar fruta ou parte de uma camisa, de acordo com as palavras que aparecem próximas à ela.

Com o crescimento e popularização da Web, é crescente também o conteúdo textual disponível para os usuários. Além da aplicação que o Murilo apresentou (sistema de busca mais ciente da semântica do conteúdo buscado), temos trabalhado aqui no Labs com categorização de textos utilizando a análise estatística.

Essa aplicação visa atribuir categorias para grandes quantidades de textos desconhecidos, sem que o usuário os tenha lido. Por exemplo, existem diversos sites de notícias que publicam várias notícias diariamente. Um categorizador de textos pode selecionar, dentre todas as notícias de todos os sites, quais as que o usuário mais se identifica e tem interesse em ler, poupando bastante tempo.

Outro uso bem conhecido de categorização de textos é o processamento de críticas de produtos em sites de comércio eletrônico ou de filmes, para notificar ao usuário, sem que o usuário as leia, se o produto ou filme é bom ou ruim.

A categorização também pode ser utilizada em máquinas de busca. Aqui no Labs, em parceria com a Novamente LLC, foi desenvolvida uma máquina de busca que utiliza o feedback do usuário para ordenar as páginas que aparecem na tela de resultados. A idéia é fazer com que os primeiros resultados sejam os mais relevantes para os usuários.

Existem diversas outras aplicações interessantes para NLP. Vejo um futuro bastante promissor nessa área……..

Inteligência Artificial, Linguagem Natural 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Computação pervasiva e casas que pensam

Tenho visto nas livrarias uma verdadeira inundação de livros editados ou re-editados na esteira do sucesso de Dan Brown. A excelente idéia de misturar fatos históricos com ciência e ficção de uma maneira sutil e homogênea, quando feita seguindo uma proporção mágica que apenas os bons autores conseguem inferir, pode realmente resultar em livros divertidos, leves e muito gostosos de se ler. Claro que isso é mais ou menos como cozinhar: os mesmos temperos misturados em proporções diferentes geram resultados em um amplo espectro que vai do sofrível ao meu-Deus-isso-é-uma-perdição!

Li há pouco tempo um livro que alguns amigos meus classificariam como “honesto”. O estilo da autora é meio vamos-no-trivial-pra-não-errar mas o pano de fundo é bem interessante. “A Origem Perdida” da Matilda Asensi, fala sobre línguas antigas das tribos indígenas sul-americanas com personagens ultra-modernos que desfiam um número impressionante de termos, gadgets e até mesmo gírias do obscuro mundo dos computeiros de profissão.

Eu me lembrei desse livro quando li o excelente post do Fabrício sobre Computação Ciente de Contexto . No livro um dos personagens tem uma casa espetacular com um computador de última geração que funciona ao mesmo tempo como secretária, governanta, conselheira e psicóloga. Tudo no feminino porque o tal personagem foi quem supostamente escreveu o software que roda na tal máquina e ele teve o compreensível e louvável bom-senso de colocar características femininas nas “interfaces” do sistema (o nome pelo qual ele se o chama, a voz no sintetizador, o “rosto” digital que aparece na tela etc.).

A casa é toda controlada por esse software de IA. Desde persianas nas portas e janelas até o sistema de aquecimento central, passando por streams de aúdio e vídeo direcionados a diversos canais disponíveis na casa e comandados por voz (não comandos “secos”, mas interpretação de linguagem natural). O tal sistema chegava ao ponto de “fritar o ovo”, dando ordens em linguagem natural a empregados domésticos (cozinheiras, copeiros etc) minutos antes de acordar o dono da casa para que seu café-da-manhã estivesse pronto e quentinho na hora certa em sua cama. Realmente invejável… O cara tinha toda a casa às suas ordens, mandava e desmandava o tempo todo, falava mais grosso para ressaltar prioridades, xingava horrores para dar feedbacks negativos que eram sempre humildemente ouvidos pelo sistema, que agradecia pela oportunidade de aprender com os próprios erros. Tudo isso sem sofrer o desgaste psicológico por estar sendo escroto com os empregados! (Opa… tem gente que me falaria que isso é um ponto negativo :-)).

Claro que a autora foi coerente e esse personagem sofre no livro porque não consegue arrumar mulher! :-)

Mas o que achei bacana é que tirando a parte do cérebro de IA que dava conselhos e interpretava/gerava linguagem natural, pouco há de ficção nessa casa inteligente. De fato, hoje temos um conjunto de sensores e atuadores (grande parte deles adaptados da automação industrial) que se usados em conjunto com técnicas apropriadas de computação ciente de contexto em uma arquitetura bem planejada podem perfeitamente compor um sistema residencial “inteligente”, ou pelo menos inteligente o suficiente para impressionar até mesmo um computeiro experimentado.

Eu acabei de ler um livro sobre casas inteligentes e vou postar em breve mais informações sobre isso. Na verdade minha intenção inicial era já colocar tais informações neste post mas acabou que falei pelos cotovelos e o texto já está bem grandinho, então fica para a próxima.

Automação, Inteligência Artificial, Linguagem Natural 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

“Computador, por favor encontre…”

Jornada nas Estrelas, processamento de linguagem natural, e o que os computadores podem fazer para lhe ensinar a causa da Dengue

Numa cena antológica do filme Jornada nas Estrelas IV: A Volta para Casa, a tripulação da USS Enterprise volta no tempo para o longínquo ano de 1986. O engenheiro-chefe Scotty então se vê diante de um computador da época (um Mac Plus, da Apple), e, da forma mais natural do mundo, começa a falar com o micrinho, que se recusa a responder. O Dr. McCoy, então, gentilmente entrega a Scotty o mouse que estava em cima da mesa. Scotty sorri, pega o mouse como se fosse um microfone, e fala de novo: “Computador…” (veja essa cena no Youtube).

Scotty talks to Mac

A cena virou uma piada recorrente contada por todo mundo que sonha com computadores capazes de estabelecer um diálogo de forma natural com o usuário – como os computadores da ficção científica e dos quadrinhos (o Bat-computador não precisa de mouse ou teclado!). E, mesmo hoje em dia, não é incomum usuários inexperientes digitarem em serviços de busca como o Google frases completas, conversacionais (“em que ano o Rio de Janeiro foi capital do Brasil ?”).

Obviamente, não é assim que funciona; o próprio Google, considerado por muitos o serviço de busca mais sofisticado da Internet, não faz absolutamente nada referente ao que chamamos de Processamento de Linguagem Natural (em inglês, Natural Language Processing), as técnicas usadas para compreender frases escritas na língua do dia-a-dia dos humanos. Ao invés disso, o Google, como todos os outros serviços de busca tradicionais, simplesmente conta quantas vezes as palavras aparecem nas páginas e nas pesquisas dos usuários (uma abordagem simples, mas que dá bons resultados em muitos casos).

 Quer dizer que Processamento de Linguagem Natural é ficção científica ? Não, de jeito nenhum! Empresas como a californiana Powerset oferecem (em breve, para o público) um sistema de busca capaz de “compreender” linguagem natural.  E nossa equipe no Vetta Labs trabalha há vários anos em tecnologia capaz disso – com resultados surpreendentes.

O sistema que desenvolvo atualmente, o RelEx, Semantic Relation Extractor, extrai informações semânticas (isso é, relativas ao signficado) de um texto, baseando-se em técnicas sofisticadas de análise sintática (identificação de “sujeito”, “predicado”, como aprendemos no ensino fundamental), algoritmos semânticos construídos manualmente e uso intensivo de técnicas de aprendizado de máquina. E o mais interessante disso tudo é que praticamente todo o código é open source (ainda que árido para desenvolvedores não familiarizados com essa área).

E o que o RelEx faz ? Imagine que você quer saber, por exemplo, o que causa a dengue. Se uma página na internet tem a frase Dengue is caused by four closely related virus serotypes of the genus Flavivirus, mas você procura num serviço de busca tradicional dengue microbe, você não encontra coisa alguma.

Se procura Which virus causes Dengue ?, numa tentativa de busca com linguagem natural, também não dá em nada (porque a frase na página diz Dengue is caused by Flavivirus, não Flavivirus causes Dengue).

A tecnologia usada no RelEx interpreta tanto a frase na página quanto a sua pergunta, e consegue casar ambas por compreender, por exemplo, que Dengue é uma doença, vírus um agente patológico, e que vírus que dá dengue e dengue é causada por quê ? referem-se à mesma coisa.

Como uma imagem vale mais do que mil palavras, vejam só como o RelEx “enxerga” as frases do exemplo:

Which virus causes Dengue ?

 

 

Dengue is caused by four closely related virus serotypes of the genus Flavivirus

Fica simples então casar a variável (associada à palavra which) à palavra Dengue.

É claro que por trás  das imagens bonitinhas há muito mais coisas interessantes. Por exemplo, é trivial obter análise sintática tradicional:

(S Which virus (VP causes (NP Dengue)) ?)

E informação semântica específica também é produzida:

^1_Temporal_colocation:Event(present,cause)
^1_Temporal_colocation:Time(present,cause)
^1_Causation:Affected(cause,virus)
^1_Transitive_action:Agent(cause,virus)
^1_Causation:Effect(cause,Dengue)

Definitivamente, Processamento de Linguagem Natural não é ficção científica – mas pode ser tão divertida quanto! :-)

Inteligência Artificial, Linguagem Natural 4 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)