IIS_2023_1/podkorytova_yulia_lab_7/README.md

44 lines
7.3 KiB
Markdown
Raw Normal View History

2023-11-27 02:51:56 +04:00
# Лабораторная работа 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 слов на русском и английском языках.
Программа сгенеририровала достаточно осмысленный текст, очень похожий на исходный, как на русском, так и на английском языках. Это говорит о правильно подобранных архитектуре и параметрах.