Costumo dizer que o Forró é a trilha sonora do Nordeste, é realmente algo que está no ambiente. A maioria das músicas das bandas mais conhecidas eu nunca parei realmente para ouvir, mas conheço todas elas apenas por estar no Nordeste.
Há uns meses a Dandara Sousa teve uma ideia (ao meu ver) genial de aplicar conceitos de análise de dados com músicas de Forró. Como? Ela decidiu utilizar os dados das músicas da banda Calcinha Preta numa série de posts (Vol. 1, Vol. 2, Vol. 3) e palestras.
Daí me surgiu a ideia de também fazer algo utilizando o forró como contexto.
No forró feito pela Calcinha Preta e muitas outras bandas, grupos e cantores, não só a melodia característica do gênero musical se destaca, mas também as letras que literalmente marcam gerações. Em sua maioria se resumem em desventuras amorosas e declarações de amor.
Seria uma máquina capaz de escrever uma música de forró comparável aos grandes cancioneiros populares? É o que veremos a seguir.
Dados
Primeiramente vamos aos dados.
Irei utilizar as letras das músicas da Calcinha Preta, Cavaleiros do Forró, Limão com Mel e Aviões do Forró disponíveis no letras.mus.br. Nada que um scraper não resolva.
Foram um total de 2.309 músicas.
Pré-processamento
Para esse caso vou fazer um pré-processamento simples, apenas deixar tudo em minúsculo, separar as pontuações das palavras e colocar uma música por linha.
Esse último passo do pré-processamento eu resolvi fazer assim pois num teste anterior utilizando um verso por linha eu não obtive um bom resultado. Acredito que seja pelos versos geralmente serem bem pequenos e com pouco contexto, além de ser muito comum que uma frase seja dividida em vários versos. Nesse caso decidi colocar todos os versos de cada música numa mesma linhas, mas separados por um token (#
).
Ou seja, o nosso algoritmo irá gerar a letra completa de uma música de uma só vez.
Treinando o algoritmo
Para criar o modelo de geração de textos, eu vou utilizar a biblioteca textgenrnn que possibilita criar e treinar uma rede de geração de textos com Redes Neurais Recorrentes em poucas linhas de código.
Por exemplo, treinei o modelo assim:
<span>from</span> <span>textgenrnn</span> <span>import</span> <span>textgenrnn</span><span>textgen</span> <span>=</span> <span>textgenrnn</span><span>(</span><span>name</span><span>=</span><span>"</span><span>new_model</span><span>"</span><span>)</span><span>textgen</span><span>.</span><span>reset</span><span>()</span><span>textgen</span><span>.</span><span>train_from_file</span><span>(</span><span>data_path</span><span>,</span> <span>num_epochs</span><span>=</span><span>10</span><span>,</span><span>gen_epochs</span><span>=</span><span>2</span><span>,</span> <span>new_model</span><span>=</span><span>True</span><span>,</span><span>word_level</span><span>=</span><span>True</span><span>,</span> <span>rnn_bidirectional</span><span>=</span><span>True</span><span>,</span><span>rnn_size</span><span>=</span><span>64</span><span>,</span> <span>dim_embeddings</span><span>=</span><span>300</span><span>)</span><span>from</span> <span>textgenrnn</span> <span>import</span> <span>textgenrnn</span> <span>textgen</span> <span>=</span> <span>textgenrnn</span><span>(</span><span>name</span><span>=</span><span>"</span><span>new_model</span><span>"</span><span>)</span> <span>textgen</span><span>.</span><span>reset</span><span>()</span> <span>textgen</span><span>.</span><span>train_from_file</span><span>(</span><span>data_path</span><span>,</span> <span>num_epochs</span><span>=</span><span>10</span><span>,</span> <span>gen_epochs</span><span>=</span><span>2</span><span>,</span> <span>new_model</span><span>=</span><span>True</span><span>,</span> <span>word_level</span><span>=</span><span>True</span><span>,</span> <span>rnn_bidirectional</span><span>=</span><span>True</span><span>,</span> <span>rnn_size</span><span>=</span><span>64</span><span>,</span> <span>dim_embeddings</span><span>=</span><span>300</span><span>)</span>from textgenrnn import textgenrnn textgen = textgenrnn(name="new_model") textgen.reset() textgen.train_from_file(data_path, num_epochs=10, gen_epochs=2, new_model=True, word_level=True, rnn_bidirectional=True, rnn_size=64, dim_embeddings=300)
Enter fullscreen mode Exit fullscreen mode
Resultados
Segue alguns exemplos de letras desse feat de Calcinha Preta, Cavaleiros do Forró, Limão com Mel e Aviões do Forró.
Eu não preciso de vocêO que eu sinto por tiÉ por favor, me faz enlouquecerToda segunda a me entregarMe diga, sem me deixar, ahEu vou te dar o que você quiserEu não consigo te esquecerEu quero ver você falar de mimJá cansei de esperarAcabou nosso amorE agora eu sofro por vocêMas eu não consigo esquecerVocê é linda e eu maisPra mim e não quer mais saberDe verdadeVocê não vai me dominarVocê não vai me dominarVocê não é dona de mim para me dominarEu não preciso de você O que eu sinto por ti É por favor, me faz enlouquecer Toda segunda a me entregar Me diga, sem me deixar, ah Eu vou te dar o que você quiser Eu não consigo te esquecer Eu quero ver você falar de mim Já cansei de esperar Acabou nosso amor E agora eu sofro por você Mas eu não consigo esquecer Você é linda e eu mais Pra mim e não quer mais saber De verdade Você não vai me dominar Você não vai me dominar Você não é dona de mim para me dominarEu não preciso de você O que eu sinto por ti É por favor, me faz enlouquecer Toda segunda a me entregar Me diga, sem me deixar, ah Eu vou te dar o que você quiser Eu não consigo te esquecer Eu quero ver você falar de mim Já cansei de esperar Acabou nosso amor E agora eu sofro por você Mas eu não consigo esquecer Você é linda e eu mais Pra mim e não quer mais saber De verdade Você não vai me dominar Você não vai me dominar Você não é dona de mim para me dominar
Enter fullscreen mode Exit fullscreen mode
Não sei o que fazerCom tanta dorVocê não pode entenderComo a força desse amorVem fazer amorMe dar calorMe deixa loucaE me chama de tiDigo sim pro meu coraçãoIsso tinha tudo que eu quisEu sei que te amoSe ligue pra mimQue nao da mais te esquecerNão sei o que fazer Com tanta dor Você não pode entender Como a força desse amor Vem fazer amor Me dar calor Me deixa louca E me chama de ti Digo sim pro meu coração Isso tinha tudo que eu quis Eu sei que te amo Se ligue pra mim Que nao da mais te esquecerNão sei o que fazer Com tanta dor Você não pode entender Como a força desse amor Vem fazer amor Me dar calor Me deixa louca E me chama de ti Digo sim pro meu coração Isso tinha tudo que eu quis Eu sei que te amo Se ligue pra mim Que nao da mais te esquecer
Enter fullscreen mode Exit fullscreen mode
Você não sabe o que é amorMe diz como é complicadoMas não se amar ninguém é segurarEu amo vocêEu te amo demaisEu não posso ficarEu te aviseiEu te chamoQuando me diz o que eu façoSe você me vêAgora eu me apaixoneiPor você toda vidaEu queria ouvir você dizerTe amo, masMentir pra mimAinda é te amo ninguémHoje eu te amo, amo, amoSei que eu te amo, amo, amoAmo, amo, amo...Você não sabe o que é amor Me diz como é complicado Mas não se amar ninguém é segurar Eu amo você Eu te amo demais Eu não posso ficar Eu te avisei Eu te chamo Quando me diz o que eu faço Se você me vê Agora eu me apaixonei Por você toda vida Eu queria ouvir você dizer Te amo, mas Mentir pra mim Ainda é te amo ninguém Hoje eu te amo, amo, amo Sei que eu te amo, amo, amo Amo, amo, amo...Você não sabe o que é amor Me diz como é complicado Mas não se amar ninguém é segurar Eu amo você Eu te amo demais Eu não posso ficar Eu te avisei Eu te chamo Quando me diz o que eu faço Se você me vê Agora eu me apaixonei Por você toda vida Eu queria ouvir você dizer Te amo, mas Mentir pra mim Ainda é te amo ninguém Hoje eu te amo, amo, amo Sei que eu te amo, amo, amo Amo, amo, amo...
Enter fullscreen mode Exit fullscreen mode
Você é o meu amorSó você me faz sentir tão sozinhaE agora que há 100 anos de viverEu não te esqueciNem sei o que fazerVocê me faz sofrerNão vou deixar você fugirMas eu não posso te perderNão posso te amarEu sei que vou ficar sozinho olhando pra vocêTenho muito medo que eu te douE não quis assimMe diz o que é que eu faço pra ter vocêMenina eu confesso: eu te amo demais!Você é o meu amor Só você me faz sentir tão sozinha E agora que há 100 anos de viver Eu não te esqueci Nem sei o que fazer Você me faz sofrer Não vou deixar você fugir Mas eu não posso te perder Não posso te amar Eu sei que vou ficar sozinho olhando pra você Tenho muito medo que eu te dou E não quis assim Me diz o que é que eu faço pra ter você Menina eu confesso: eu te amo demais!Você é o meu amor Só você me faz sentir tão sozinha E agora que há 100 anos de viver Eu não te esqueci Nem sei o que fazer Você me faz sofrer Não vou deixar você fugir Mas eu não posso te perder Não posso te amar Eu sei que vou ficar sozinho olhando pra você Tenho muito medo que eu te dou E não quis assim Me diz o que é que eu faço pra ter você Menina eu confesso: eu te amo demais!
Enter fullscreen mode Exit fullscreen mode
Alguns dos versos são 100% “originais”, ou seja, em nenhuma das letras tem um verso exatamente igual. Algumas vezes ele gera de 1 a 3 versos exatamente iguais a de alguma música, em outras ele gera 1 verso e meio de uma música e completa com outra música diferente.
O que eu achei mais incrível é que com pouco treinamento ele já ser capaz de gerar versos e até mesmo estrofes com uma construção gramatical correta, original e com uma certa linha de contexto.
Todos os códigos que eu utilizei estão nesse repositório.
暂无评论内容