IIS_2023_1/istyukov_timofey_lab_7/README.md
2024-01-13 22:21:36 +04:00

6.1 KiB
Raw Blame History

Лабораторная работа №7. Рекуррентная нейронная сеть и задача генерации текста

12 вариант


Задание:

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

Вариант:

  • Язык текста: русский

Художественный текст:

  • Отрывок из книги Ф.М. Достоевского — "Белые ночи" (в формате .txt)

Запуск

  • Запустить файл lab7.py

Используемые технологии

  • Язык программирования Python
  • Среда разработки PyCharm
  • Библиотеки:
    • numpy
    • keras
    • os

Описание программы

Здесь представлена модель глубокого обучения для генерации текста с помощью библиотеки Keras и алгоритма LSTM. Чтобы построить модель генерации художественного текста, требуются некоторые текстовые данные. В качестве набора данных здесь используется отрывок из книги великого русского писателя-реалиста в формате текстового файла.

Шаги написания программы:

  1. Предварительная обработка данных
    1. Перевод символов в нижний регистр
    2. Формирование уникального набора использующихся в тексте символов
    3. Преобразование текстовых данных в числовые значения
    4. Создание последовательности символов (X - значений, Y - следующий символ)
    5. Преобразование данных в массив логических значений
  2. Построение базовой модели
    1. Инициализация модели Sequential. это простой стек слоев, с помощью которого нельзя представить произвольную модель.
    2. Три слоя LSTM (по 200 единиц в каждом):
      • В первом слое входная форма.
      • Во втором слое параметр return_sequences=True для обработки тех же последовательностей
      • В третьем слое ничего лишнего
    3. Три слоя Dropout с вероятностью 20% для проверки переобучения. Dropout предполагает случайный кик нейронов из процесса обучения. Он обеспечивает, чтобы нейронная сеть не стала слишком зависимой от любого одного узла.
    4. Один "плотный" слой Dense в конце, который даёт вывод символов. Dense обрабатывает каждый элемент предыдущего слоя, выполняя матричное перемножение этих элементов со своими весами.
    5. Конфигурация модели для категориальной классификации.
  3. Обучение модели
    1. epochs=50 (одна эпоха = один проход вперёд и один проход назад всех обучающих примеров)
    2. batch_size=100 (количество обучающих примеров за один проход вперёд/назад. Чем больше размер пакета, тем больше памяти лучше использовать.
  4. Сохранение модели (во избежание повторного обучения и ради экономии времени)
  5. Генерация текста на основе сохранённой модели
    1. Загрузка модели
    2. Выбор случайной стартовой точки в исходном тексте
    3. Генерация назначенного количества символов

Пример работы

В ходе прогона программы было зафиксировано несколько результатов генерации 200 символов. Примеры приведены ниже.

Graphics

Graphics

Graphics

Graphics


Вывод

Итак, рекуррентная нейронная сеть справилась с задачей генерации текста. Если говорить о качестве, то требуется более глубокое обучение и больше текста. И тогда нейросеть сможет писать даже в стиле Достоевского. Но по времени это слишком затратно. Однако в рамках лабораторной работы результат вышел приемлемый.