Escribe tu canción en 10 minutos (módulo textgenrnn Python3)


Hoy intentaremos entrenar nuestra propia red neuronal para escribir letras de canciones. La muestra de capacitación serán los textos del grupo Hands Up. Nada le impide intercambiar datos por los textos de sus grupos favoritos. Para extraer datos de sitios web utilizamos Python3 (módulo BeautifulSoup).


La tarea será descargar datos (textos) de sitios web y luego entrenar la red neuronal en función de ellos.


De hecho, puede dividir el trabajo en 2 etapas:
Etapa 1: descargue y guarde la letra en un formato conveniente.
Etapa 2: entrena tu propia red neuronal.


Para que los trolls y aficionados busquen el significado secreto, diré de inmediato:


  • No soy miembro de Hands Up.
  • Este artículo no es un anuncio publicitario para ningún grupo.
  • No conseguí un centavo por ella.
  • No aprobaré los comentarios, que tienen la esencia de solo molestar al autor, sobre los errores tipográficos. Por supuesto, trato de hacer todo sin errores, desafortunadamente, no soy un hablante nativo del idioma ruso y, a veces, no me doy cuenta de algo, por favor sea amable y escriba al respecto en PM. A otros, con mis bromas divertidas, les propongo un paseo por el bosque.

Etapa 1


Entorno virtual para el proyecto (virtualenv).
REPO


#start virtualenv -p python3 my_song # 

 #run source my_song/bin/activate 

 #install modules pip install -r requirements.txt 

Descargar y guardar las letras del sitio web en formato * .csv.


 #-*- coding: utf-8 -*- import urllib.request from bs4 import BeautifulSoup import pandas as pd URL = 'http://txtmusic.ru/index.php?s=%D0%F3%EA%E8+%C2%E2%E5%F0%F5%21' #  page = urllib.request.urlopen(URL) soup = BeautifulSoup(page) li = soup.body.findAll('li') #   <li>    URL URLS = ['http://txtmusic.ru/'+laget('href') for l in li] df = pd.DataFrame(columns=['name', 'text']) list_of_names = [] list_of_text = [] ind=0 BIG = "" for URL in URLS: page = urllib.request.urlopen(URL) soup = BeautifulSoup(page) article = soup.body.findAll('article') #    ( rticle) text = str(article[0]).split('\n')[8] text = text.split('<br/>') text = [t for t in text if t!=''] text = " ".join(text) name= str(article[0].h1).split(" - ")[1].rstrip("</h1>") list_of_text.append(text) list_of_names.append(name) df.name = list_of_names df.text = list_of_text df.to_csv('songs.csv') #    'songs.csv' 

El siguiente paso es transcribir el texto al latín (el modelo funciona mejor para el alfabeto latino que para el alfabeto cirílico).


 import pandas as pd df = pd.read_csv('songs.csv') df = df[['name','text']] df.text = df.text.apply(lambda x: cyrtranslit.to_latin(x, 'ru')) df.text.to_csv('trans.csv') '''  cyrtranslit.to_latin('      ', 'ru') 'Moyo sudno na vozdushnoj podushke polno ugrej' cyrtranslit.to_cyrillic('Moyo sudno na vozdushnoj podushke polno ugrej') '      ' ''' 

Etapa 2


 from textgenrnn import textgenrnn textgen = textgenrnn() textgen.train_from_file('trans.csv', num_epochs=1) # created file textgenrnn_weights.hdf5 

¡Y eso es todo! Fue fácil y conveniente de usar (textgenrnn) [ https://github.com/minimaxir/textgenrnn ], los textos aún no son realistas, pero debe cambiar los parámetros del modelo usted mismo.



La ventaja de textgenrnn es que no necesita lidiar con ningún tipo de procesamiento de datos, solo cargue un conjunto de datos de texto y siéntese con una taza de café mientras observa su entrenamiento modelo.


 #      textgen_2 = textgenrnn('textgenrnn_weights.hdf5') textgen_2.generate(3, temperature=1.0) textgen_2.generate_to_file('lyrics.txt') 

Que sigue


Ahora, después de haber aprendido cómo hacer textgenrnn para crear textos, puede hacer mucho con este conocimiento:


  • Crea un artículo de Wikipedia.
  • Publicaciones en redes sociales.
  • Noticias.

Lista de fuentes utilizadas:


https://github.com/minimaxir/textgenrnn
https://towardsdatascience.com/ai-generates-taylor-swifts-song-lyrics-6fd92a03ef7e

Source: https://habr.com/ru/post/464973/


All Articles