12 apps em 1 ano: Gerando funk usando inteligência artificial

Continuando com o desafio de criar 12 apps em 1 ano, dessa vez resolvi brincar um pouco com algoritmos, e criei um sistema para tentar “compor” músicas automaticamente.  

Por que Inteligência Artificial?

Inteligência Artificial sempre foi uma das áreas da computação que mais me fascinaram. A ideia de criar inteligência apresenta desafios técnicos e filosóficos imensos. Acompanho desde a época da faculdade todos os novos desenvolvimentos na área e recentemente tenho visto realizações muito importantes.

Em 2016 vimos um entusiasmo muito grande em relação ao futuro da Inteligência Artificial, e esse sentimento se refletiu em investimentos gigantes em pesquisa e desenvolvimento de novas tecnologias relacionadas a IA. Esses investimentos foram capitaneados principalmente por grandes empresas de tecnologia, como Google, Facebook, Amazon e Microsoft.

As redes neurais

Um dos principais motivos desse entusiasmo são os resultados inéditos obtidos com um novo conjunto de técnicas que ficou conhecido como “Deep Learning”. A maioria dessas técnicas se baseia em criar redes de neurons artificiais — o que é conhecido como uma “rede neural”.  Vários tipos de redes neurais podem ser criadas dependendo da quantidade e do modo como os neurônios artificiais são conectados.

Recurrent Neural Networks, ou RNNs, são um tipo de rede neural que permite trabalhar com dados sequenciais. Suas aplicações são vastas e podem ser usadas para modelar áudio, vídeo e texto. O pesquisador Andrej Karpathy escreveu uma introdução muito interessante sobre o tema:  “The Unreasonable Effectiveness of Recurrent Neural Networks”. Karpathy usa uma RNN para modelar textos de Shakespeare e a partir deles gerar novos textos.

Se uma rede neural pode escrever imitando Shakespeare, por que não compor músicas?

O MC Robô

Para brincar um pouco com geração de textos, resolvi criar um programa gerador de letras de funk. O primeiro desafio foi conseguir coletar os dados. Para conseguir treinar a rede neural, eu precisaria de muitos exemplos de letras de músicas. Buscando por vários sites de letras, encontrei uma API disponibilizada pelo site Vagalume. Usando a API deles, extraí os nomes de todos os artistas com músicas categorizadas como funk, e depois as letras de todas as músicas de cada um deles. Compilei todos os dados em um único arquivo.

O arquivo final gerado tem apenas 526Kb de texto — isso é muito pouco para conseguir ter bons resultados com uma RNN. Mesmo assim, por curiosidade, resolvi testar. Esse foi o resultado que obtive:

Eu vou pode chorando, levando o chãoso

Redida a bolsa assim,

Soltmeita a cabelente a rainha eu te um venhã

Uma está na lua

por univinho diste tempo, se eu aqui

E só me recompanhei cubinha

Ele existe acordo, me desejando ser

 

Seu amor vou praça

Que saber quem toda esquecida

Um pade briquinte é o proucl continamos

A ledo, nos menos já tempo

Que vequise esto amor

 

Ah até a cada lava lamar dentro dormir…

Aqueu bumbunto no mortoso assos de um bar you e Jesus

Não parece fazer muito sentido. Podemos ver que a rede conseguiu aprender a combinar caracteres e gerar palavras, versos e até estrofes, mas boa parte não faz nenhum sentido. Isso acontece porque a rede é treinada caractere por caractere — ou seja, primeiro ela aprende que:

  • um conjunto de caracteres separado por um caractere de espaço forma palavras;
  • depois, que um conjunto de palavras com um “new line” no final forma linhas;
  • e depois, que um conjunto de linhas com uma linha em branco forma um estrofe.

Se  houvesse mais dados poderíamos perceber que ela conseguiria criar letras cada vez melhores.

Cadeias de Markov

Redes Neurais Recorrentes não são a única maneira de gerarmos texto. Uma técnica muito usada, chamada de Cadeias de Markov, usa o mapeamento de probabilidades em cadeia para modelagem de textos. Treinando esse algoritmo no mesmo dataset de letras de funk, eu objetive os seguintes resultados:

Funk Markov  1

Quando tem o seu jeito

Ô dança aí que eu tô de vacilação

É disso que ela vem

Tô ligado eu vou curtir

Vem vem vem pro sobrado amarelo vai

Já que tá preparada

Para continuar testando a abordagem de geração de novas letras, eu baixei todas as músicas de Sertanejo, Forró e MPB também. Esse é um exemplo de letra gerada baseada em sertanejo:

Sertanejo Markov

Tem direito de sentar de ficar de joelhos

E morar dentro do coração

Acreditar que é a força que tem um amor assim não não

E ainda nem sabe a força que tem um amor assim

Diz que eu quero dormir

Que todo mundo ver

Na ilha desse amor vou ser perdoado

Tão de repente o menino ainda falou

Conclusão

Usar algoritmos para gerar textos, imagens e outras formas de conteúdo é uma forma divertida de aprender Machine Learning. Um dos maiores limitadores do projeto foi conseguir dados relevantes: talvez forçando alguns dos parâmetros da rede neural eu tivesse tido resultados melhores, mas mesmo assim uma quantidade baixa de dados acaba diminuindo bastante a capacidade de abstração da rede.

Em um projeto futuro, planejo treinar uma rede usando múltiplos livros, para criar um “contador de histórias” interativo, em que a história será escrita pelo usuário em conjunto com o computador.

Você tem alguma ideia interessante de como usar algoritmos para gerar textos? Deixe suas ideias nos comentários!

Agradecimento especial a Rita Lisboa por ter revisado esse texto.

Saiba quando um novo app for criado !

Coloque seu email abaixo para acompanhar cada novo app criado.

Powered by ConvertKit

Edmar Ferreira é Co-Fundador e CEO da Rock Content, líder em Marketing de Conteúdo no Brasil, e é membro ativo do SanPedroValley, comunidade auto-gerenciada de startups de Belo Horizonte.

Site Footer