Analisando o Twitter usando Árvore de Palavras

12:27 pm Data Mining, Internet, Linguagem Natural, Redes Sociais, Usabilidade, Visualização Cientifica, Web 2.0

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.

11 Respostas
  1. muriloq » Blog Archive » Analisando o Twitter usando Árvore de Palavras :

    Date: abril 10, 2010 @ 12:34 pm

    [...] de publicar um artigo no Tecnologia Inteligente, o blog da minha empresa, Vetta Labs, sobre análise e visualização de [...]

  2. Jean :

    Date: abril 10, 2010 @ 1:02 pm

    Muito legal cara. É mais ou menos o que o google faz com os predictive searches, né?

  3. Murilo Queiroz :

    Date: abril 10, 2010 @ 7:39 pm

    @Jean: muito obrigado! O princípio usado nas predictive searches do Google é o mesmo, sim: ver com qual freqüência uma palavra sucede alguma outra. Tecnicamente você pode pensar nisso como uma cadeia de Markov: http://pt.wikipedia.org/wiki/Cadeias_de_Markov

  4. Raphael de Almeida :

    Date: abril 11, 2010 @ 7:28 pm

    Interessante a forma como é montada essa wordTree.

    Sua implementação foi feita em que linguagem? Está disponível para download?

  5. Murilo Queiroz :

    Date: abril 12, 2010 @ 10:27 am

    @raphael: A implementação é em Java, e ainda não está publicamente disponível (estamos estudando essa possibilidade).

  6. Google trends foi só o começo « De Gustibus Non Est Disputandum :

    Date: maio 14, 2010 @ 11:14 am

    [...] o começo Posted by claudio under Uncategorized Leave a Comment  Convido-os à leitura deste breve texto do pessoal do Vetta Labs. [...]

  7. Marcel :

    Date: junho 7, 2010 @ 4:01 pm

    Olá pessoal,

    Belo trabalho! Vocês já tem o código-fonte disponível para consulta? Estou fazendo um projeto pra uma disciplina de DM e isso seria incrível!! Estou querendo até contribuir com um porting do mesmo para Python que é a ferramenta que programo! Parabéns!

  8. Murilo Queiroz :

    Date: junho 8, 2010 @ 12:54 pm

    @Marcel: muito obrigado pelos elogios.

    Nossa implementação é parte de um sistema comercial de monitoramento e análise do Twitter, blogs e outras mídias, e por isso não podemos disponibilizar o código-fonte.

    A propósito, também sou um grande fã de Python! :-)

  9. Marcel :

    Date: junho 10, 2010 @ 3:13 pm

    Olá Murilo valeu pela resposta! Estou tentando montar a minha própria. Mas estou com uma dúvida (se puder responder claro), como vocês conseguiram podar a árvore para que o segundo nó seja só verbo. USaram algum tipo de Pos-tagger? Ele está disponível open-source ? Desculpa aí o incomodo, e valeu Murilo!

  10. Murilo Queiroz :

    Date: junho 10, 2010 @ 4:18 pm

    Sim, Marcel, usamos um POS tagger baseado em maximização de entropia para analisar cada sentença e obter a classe gramatical das palavras.

  11. Marcel :

    Date: junho 14, 2010 @ 5:51 pm

    Olá murilo,

    Em pouco tempo que tive o projeto era para esta semana consegui chegar a algo bem interessante. Minha árvore de palavras não ficou tão sofisticada igual a sua, mas acredito que em uma semana foi um resultado bem satisfatório. Venho aqui agradecer o apoio e as dicas!
    Se quiser dar uma olhada no que gerei:

    http://aimotion.blogspot.com/2010/06/hi-all-it-has-been-while-since-my-last.html

    Valeu,
    Marcel!