Напиши свою песню за 10 минут (модуль textgenrnn Python3)

от автора

Сегодня попробуем обучить свою собственную нейронную сеть, чтобы писала текст для песен. Обучающей выборкой будут тексты группы «Руки Вверх». Ничто не мешает чтобы поменять данные на тексты своих любимых групп. Для извлечения данных с веб-сайтов используем Python3 (модуль BeautifulSoup).

Задача будет состоять в том, чтобы выгрузить данные(тексты) c веб-сайтов а потом на их основе обучить нейронную сеть.

На самом деле, можно разбить работу на 2 этапа:
Этап 1: выгрузить и сохранить тексты песни в удобном формате.
Этап 2: обучить свою собственную нейронную сеть.

Троллям и любителям искать тайный смысл сразу скажу:

  • Я не являюсь сотрудником группы «Руки Вверх».
  • Эта статья не является рекламой никакой группы.
  • Я не получил за неё ни копейки.
  • Не буду одобрять комментарии, в которых есть суть только причинить досаду автору, примерно про опечатки. Конечно стараюсь делать все без ошибок, к сожалению, не являюсь носителем русского языка и иногда чего-то не замечу, будьте добры и пишите об этом в личку. Другим со своими несмешными стебами предлагаю прогулку лесом.

Этап 1

Виртуальная среда для проекта(virtualenv).
REPO

#start virtualenv -p python3 my_song #

#run  source my_song/bin/activate 

#install modules pip install -r requirements.txt

Выгрузка и сохранение текстов песни c веб-сайта в сохраняем в формате *.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/'+l.a.get('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' 

Cледущий шаг — транслитерировать текст в латинский вариант(модель работает лучше на латиницу чем на кириллицу).

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') 'Моё судно на воздушной подушке полно угрей' '''

Этап 2

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

И все! Легко и удобно было использовать (textgenrnn)[https://github.com/minimaxir/textgenrnn], тексты все-таки еще не реалистичны, но придется изменить параметров модели самому.

Премущество textgenrnn заключается в том, что вам не нужно иметь дело с какой-либо обработкой данных, просто загрузите текстовый набор данных и присядьте с чашкой кофе, наблюдая за вашим обучением модели.

#Загрузите обученную модель и используйте ее  textgen_2 = textgenrnn('textgenrnn_weights.hdf5') textgen_2.generate(3, temperature=1.0) textgen_2.generate_to_file('lyrics.txt')

Что дальше?

Теперь, после того, как вы узнали, как сделать textgenrnn для создания текстов, вы можете многое сделать, используя эти знания :

  • Cоздать статью на Википедии.
  • Посты на соцсетях.
  • Новости.

Список используемых источников:

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


ссылка на оригинал статьи https://habr.com/ru/post/464973/