Criando um gerador automático de letras de Forró

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 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
Eu 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
Eu 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 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
Nã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
Nã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 é 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...
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 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!
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.

Vnicius / lyrics-generator

Generate lyrics with textgenrnn

原文链接:Criando um gerador automático de letras de Forró

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
The course of true love never did run smooth.
真诚的爱情之路永不会是平坦的
评论 抢沙发

请登录后发表评论

    暂无评论内容