Aprendizado de máquina nas nuvens

Uma hora, todo mundo sabia que iria acontecer. Os algoritmos de aprendizado de máquina (machine learning) encontrariam um modelo de escalabilidade massiva (hadoop, o mesmo que o yahoo anda namorando para competir com o google) e se encontrariam num interessantíssimo novo projeto cultivado pela Apache Foundation chamado Mahout.

Este belo e promissor projeto pretende implementar cerca de 10 algoritmos descritos neste paper de Stanford incluindo K-Means, SVM, PCA e etc, numa “nuvem” de computadores, permitindo lidar com um alto grau de paralelismo e lidando com dados BEM grandes.

Não tem nada pronto ainda… na verdade o projeto ainda está começando, mas promete.

Para os curiosos interessados em acompanhar este projeto mais de perto, fiquem de olho nos blogs de Sean Owen, Jeff Eastman e no blog do Apache Lucene, mantido pelo Grant Ingersoll.

Curiosidade: Mahout é o cara que pilota um elefante, enquanto Hadoop é o nome do elefantinho de pelúcia do filho do Doug Cutting, criador do projeto. Que por sinal, hoje trabalha no Yahoo. Nada como uma concorrência saudável. ;-)

Data Mining, Inteligência Artificial, Paralelismo 0 Comentários

Crianças de rua e Erlang

Outro dia, alguém me contou de uma pesquisa que fizeram para saber como as crianças de rua manejavam dinheiro. Quero dizer, como elas faziam as contas com dinheiro.

Muitas vezes, essas crianças precisam manejar dinheiro mas não sabem fazer contas básicas de soma e subtração. E essa pesquisa [se alguém achar esta pesquisa eu agradeço] revela que um mecanismo muito usado era o de memorizar um monte de regrinhas baseadas nas cores das notas e nos tamanhos das moedas. O que é, no fim das contas, muito mais oneroso em termos de aprendizado, mas é uma solução se você não sabe o que é aritmética.

Por exemplo, uma criança que não sabe somar ou subtrair, pode saber que cinco notas azuis (5 x R$ 2) equivalem a duas notas roxas (2 x R$ 5) ou a uma nota vermelha (R$ 10). Ou ainda, que o troco para algo que custa uma nota azul (R$ 2), se você der uma nota roxa (R$ 5), é de outra nota azul (R$ 2) e uma nota verde (R$ 1). E por aí vai.

O que estas crianças fazem, basicamente, é criar um conjunto de regras que imita o conhecimento de aritmética que elas não têm, que na maior parte das vezes, para as quantias com as quais elas lidam todos os dias, acaba funcionando. Ao custo da memorização de um monte, mas um monte mesmo de regras.

Claro que para ter que decorar menos regras, provavelmente estas crianças podem sair substituindo regras dentro de outras. Por exemplo, se uma nota roxa (R$ 5) equivale a duas notas azuis (2 x R$ 2) e uma verde (R$ 1), então uma nota vermelha (R$ 10), que equivale a duas notas roxas (2 x R$ 5), pode ser convertida em um monte de notas azuis e verdes… ou até mesmo, um monte de notas verdes… ;-)

Este princípio de equivalência e substituição é o coração da programação lógica, que é o princípio por trás da linguagem de programação Prolog, este respeitável senhor que nasceu em 72 com uma verba de US$ 20.000 em 18 meses de desenvolvimento. Rodava num incrível IBM 360-67 com 1 MB de memória (virtual).

Apesar da maior parte do interesse por prolog, hoje em dia, ser mais acadêmico (embora, claro, hajam aplicações comerciais de prolog, não são muitas), é sempre bom ficar de olho em todas as direções para onde evolui a tecnologia, afinal, são dos lugares mais inesperados que surgem as inspirações para as inovações mais interessantes.

Um exemplo disto é o recente interesse que tem surgido em relação a uma mais ou menos obscura linguagem de programação chamada Erlang (que apesar da sintaxe similar a Prolog, não é uma linguagem de programação dita “lógica”, mas “funcional”). Essa linguagem foi prototipada em Prolog em 92 e foi desenvolvida pela Ericsson para lidar com concorrência e distribuição. Alguns de seus conceitos revolucionários estão inspirando modificações no modo como JAVA lida com estes aspectos.

O interesse, claro, surgiu quando alguém resolveu falar que o Amazon Simple DB é implementado em Erlang.

Nada como um sistema em produção lidando com um volume de dados imenso e uma carga enorme de processamento para quebrar alguns preconceitos com linguagens mais ou menos obscuras ;-)

E pode apostar, como os processadores não conseguem ficar mais rápidos ultimamente, na mesma velocidade em que eles vão se tornando cada vez mais paralelizados, paralelismo será algo que, cada vez mais, todo programador vai querer ;-)

Inovação, Inteligência Artificial, Paralelismo 2 Comentários