.. | ||
belye-nochi.txt | ||
lab7.py | ||
README.md | ||
result_1.jpg | ||
result_2.jpg | ||
result_3.jpg | ||
result_4.jpg | ||
save_text_generator_deeper_model.h5 |
Лабораторная работа №7. Рекуррентная нейронная сеть и задача генерации текста
12 вариант
Задание:
Выбрать художественный текст на языке по варианту и обучить на нём рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться на пары чётный-нечётный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом. В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов.
Вариант:
- Язык текста: русский
Художественный текст:
- Отрывок из книги Ф.М. Достоевского — "Белые ночи" (в формате .txt)
Запуск
- Запустить файл lab7.py
Используемые технологии
- Язык программирования Python
- Среда разработки PyCharm
- Библиотеки:
- numpy
- keras
- os
Описание программы
Здесь представлена модель глубокого обучения для генерации текста с помощью библиотеки Keras и алгоритма LSTM. Чтобы построить модель генерации художественного текста, требуются некоторые текстовые данные. В качестве набора данных здесь используется отрывок из книги великого русского писателя-реалиста в формате текстового файла.
Шаги написания программы:
- Предварительная обработка данных
- Перевод символов в нижний регистр
- Формирование уникального набора использующихся в тексте символов
- Преобразование текстовых данных в числовые значения
- Создание последовательности символов (X - значений, Y - следующий символ)
- Преобразование данных в массив логических значений
- Построение базовой модели
- Инициализация модели Sequential. это простой стек слоев, с помощью которого нельзя представить произвольную модель.
- Три слоя LSTM (по 200 единиц в каждом):
- В первом слое входная форма.
- Во втором слое параметр return_sequences=True для обработки тех же последовательностей
- В третьем слое ничего лишнего
- Три слоя Dropout с вероятностью 20% для проверки переобучения. Dropout предполагает случайный кик нейронов из процесса обучения. Он обеспечивает, чтобы нейронная сеть не стала слишком зависимой от любого одного узла.
- Один "плотный" слой Dense в конце, который даёт вывод символов. Dense обрабатывает каждый элемент предыдущего слоя, выполняя матричное перемножение этих элементов со своими весами.
- Конфигурация модели для категориальной классификации.
- Обучение модели
- epochs=50 (одна эпоха = один проход вперёд и один проход назад всех обучающих примеров)
- batch_size=100 (количество обучающих примеров за один проход вперёд/назад. Чем больше размер пакета, тем больше памяти лучше использовать.
- Сохранение модели (во избежание повторного обучения и ради экономии времени)
- Генерация текста на основе сохранённой модели
- Загрузка модели
- Выбор случайной стартовой точки в исходном тексте
- Генерация назначенного количества символов
Пример работы
В ходе прогона программы было зафиксировано несколько результатов генерации 200 символов. Примеры приведены ниже.
Вывод
Итак, рекуррентная нейронная сеть справилась с задачей генерации текста. Если говорить о качестве, то требуется более глубокое обучение и больше текста. И тогда нейросеть сможет писать даже в стиле Достоевского. Но по времени это слишком затратно. Однако в рамках лабораторной работы результат вышел приемлемый.