Сегодня попробуем обучить свою собственную нейронную сеть, чтобы писала текст для песен. Обучающей выборкой будут тексты группы "Руки Вверх". Ничто не мешает чтобы поменять данные на тексты своих любимых групп. Для извлечения данных с веб-сайтов используем 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
Автор: fuwiak