Найти тему
the robot

Учим нейронку писать как Фёдор Михайлович Достоевский

Сейчас мы обучим рекуррентную нейронную сеть создавать тексты в стиле Фёдора Михайловича Достоевского. Всё что ей для этого понадобится – это способность предсказывать следующую букву для строки из уже имеющихся. Не стоит ожидать от сети осмысленных фраз и предложений, но правила композиции слов, общую структуру и настроение она улавливает довольно неплохо.

Приведенный здесь результат работы получен за примерно 1 час обучения на ПК с видеокартой. Результат можно улучшить, увеличив время обучения или размер сети (её глубину или ширину слоев).

Итак, приступим!

Писать нейросеть мы будем на python, сейчас это фактически основной язык для Data Scientist. Использовать будем популярный фреймворк Keras, который позволяет очень просто описывать структуру нейронной сети и абстрагироваться от деталей её реализации. Keras внутри себя может использовать для вычислений библиотеки Tensorflow от Google или Theano. В нашем случае это будет Tensorflow. Библиотека поддерживает расчеты на GPU, так что мощная видеокарта от NVidia может ощутимо сократить время работы.

Загружаем все необходимые библиотеки, разрешаем бекенду Tensorflow увеличивать размер используемой GPU памяти при необходимости

Ввод:

import tensorflow as tf
from keras import backend as K
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
K.set_session(sess) # разрешаем использовать больше видеопамяти
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, LSTM,TimeDistributed, Embedding
from keras.callbacks import ModelCheckpoint, Callback, EarlyStopping, ReduceLROnPlateau
from keras.optimizers import RMSprop, Adam, SGD
import sys
import numpy as np

Яндекс.Дзен не позволяет передать код в удобном формате, для того чтобы посмотреть все шаги построения нейронной сети перейдите по ссылке на наш сайт

Результаты:

По логу обучения хорошо видно, как сеть шаг за шагом усваивает всё более и более сложные закономерности исходного текста. Вначале это проблемы между словами, типичные слоги, отделение предложений точкой. Затем слова становятся всё более и более похожими на нормальный русский язык, сеть учится писать имена и диалоги, разделенные отступами и тире. Видно, как сеть начинает использовать и другие знаки препинания, строить сложные предложения, выводить непрямую речь.

Теперь мы можем посмотреть как влияет температура сэмплинга на выводимый моделью текст. Используем для этого одну и ту же начальную последовательность и посмотрим на результаты

Ввод:

seed = "У нас в Малом зале до сих пор проходят"
test(model, 300, seed, 0.1)
test(model, 300, seed, 0.5)
test(model, 300, seed, 0.7)

Вывод

Seed:   У нас в Малом зале до сих пор проходят — У нас в Малом зале до сих пор проходят с ним с тобой и подозревали и подозревали и при всех столь и под конец просто подозрения и просто подозревали и при своей стороны и принять своего простодушного старика и подозревали и просто подозревали и подозревали и под конец в своем положении и принять в себе старика, но в том, что он всегда п
Seed:   У нас в Малом зале до сих пор проходят — У нас в Малом зале до сих пор проходят на свою разом и не после прежнего правда с тревожностью, выразился и смотрел на положении. Но просто отвечала она принять меня и сказал его и пред нею, как бы во всех своего проклятий принес в картину и стал простодушное ветром и воздух не понимаю, что не давать предстоящего и судорога. Она убил с
Seed:   У нас в Малом зале до сих пор проходят — У нас в Малом зале до сих пор проходят картины. Теперь сейчас они остановившись пошле дорогу совсем и почти неожиданное  своего  затрастно   на  собой  в  том,  чтобы  не  сказали его ответ к нему прочтить виде и деньги в руках голова  –  учительно  и  старику с каким-то полячной столы погросить, но на него. — Всё больше-то и распоря
При низких температура модель начинает застревать в каких-то внутренних циклах и колеблется около одной и той же темы. С ростом температуры разнообразие текста повышается, но с какого-то момента всё больше слов сеть “придумывает” и текст становится слегка бредовым. Слова эти, тем не менее, построены по правилам русского языка и выглядят очень похожими на настоящие.

Автор: Олег Шляжко

Ссылка на github: https://github.com/ollmer/neural_experiments/blob/master/char_rnn_dostoevsky.ipynb

Изображения взяты с: Reuters.

Привет, это редакция канала the Robot. Если тебе понравилась эта статья или тематика нашего канала – нажми лайк и подпишись, чтобы не пропустить новые материалы.
Новости о роботах и ИИ теперь можно читать там, где тебе удобно, присоединяйся! Наш telegram канал : https://t.me/robotics_channel
Наш сайт: https://the-robot.ru/
E-mail расслыка лучших статей раз в неделю