# Лабораторная работа 7. Рекуррентная нейронная сеть и задача генерации текста ### Задание на лабораторную: Выбрать художественный текст (русскоязычный и англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру, справляющуюся достаточно хорошо с обоими видами текстов, и параметры так, чтобы приблизиться к максимально осмысленному результату. *** ### Как запустить лабораторную работу: Для запуска лабораторной работы необходимо открыть файл `lr7.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run". *** ### Технологии: **NumPy (Numerical Python)** - это библиотека Python, которую применяют для математических вычислений: начиная с базовых функций и заканчивая линейной алгеброй. **TensorFlow** - это библиотека для машинного обучения, группы технологий, которая позволяет обучать искусственный интеллект решению разных задач. **Keras** - это библиотека для языка программирования Python, которая предназначена для глубокого машинного обучения. Она позволяет быстрее создавать и настраивать модели — схемы, по которым распространяется и подсчитывается информация при обучении. **Keras Preprocessing** - это модуль предварительной обработки и дополнения данных библиотеки глубокого обучения Keras. Он предоставляет утилиты для работы с данными изображения, текстовыми данными и данными последовательности. **Tokenizer** - это инструмент, предоставляемый библиотекой Keras, который используется для токенизации текста (разделения текста на отдельные токены или слова). Токенизатор в Keras предоставляет функции для преобразования текста в последовательности числовых индексов. *** ### Что делает лабораторная работа: В лабораторной работе сначала данные считываются из файла, указанного в переменной *file_path*, создается экземпляр *Tokenizer*, который обучается на тексте из файла. Далее текст преобразуется в последовательности чисел с помощью функции *texts_to_sequences*, создаются обучающие данные путем создания последовательностей из слов и производится предобработка данных, чтобы все последовательности имели одинаковую длину, используя функцию *pad_sequences*. Данные разделяются на входные и выходные, создается модель рекуррентной нейронной сети с использованием *Sequential* и слоев *Embedding* (преобразует индексы слов в плотные векторные представления), *LSTM* ( рекуррентный слой, который обрабатывает последовательности данных с учетом долгосрочных зависимостей), *Dropout* (применяет случайное обнуление некоторых элементов входных данных во время обучения) и *Dense* (слой нейронной сети, в котором каждый нейрон связан со всеми нейронами предыдущего слоя). Модель компилируется с оптимизатором *'adam'*, функцией потерь *'sparse_categorical_crossentropy'* и метрикой *'accuracy'* и обучается на входных и выходных данных и на 150 эпохах. После генерируется текст на основе заданного начального предложения с помощью обученной модели. В функции генерации начальный текст преобразуется в последовательность чисел с помощью токенизатора, производится предобработка последовательности чисел, предсказывается следующее слово и выбирается наиболее вероятное, после этого предсказанное слово добавлется к начальному тексту. Результатом работы являются сгенерированные тексты из 25 слов на русском и английском языках, которые начинаются со слов *'Зима'* и *'Winter'* и составляются на основе исходных текстов из файлов `rus.txt` и `eng.txt` соответсвенно. *** ### Пример выходных данных: ***Пример работы и сгенерированный русский текст*** ![](rusRes1.JPG) ... ![](rusRes2.JPG) Сгенерированный текст: "Зима – лучшее время года зима – это самое холодное время года она волшебная потому что всё укрыто белым снегом и это похоже на сказку зимой". ***Пример работы и сгенерированный английский текст*** ![](engRes1.JPG) ... ![](engRes2.JPG) Сгенерированный текст: "Winter is the best time of the year winter is the coldest time of the year it is magical because everything is covered with white snow". *** **Вывод**: результатом лабораторной работы стали сгенерированные при помощи рекурентной нейронной сети, обученной на 150 эпохах, тексты из 25 слов на русском и английском языках. Программа сгенеририровала достаточно осмысленный текст, очень похожий на исходный, как на русском, так и на английском языках. Это говорит о правильно подобранных архитектуре и параметрах.