IIS_2023_1/kozlov_alexey_lab_7/README.md
2024-01-12 12:01:18 +04:00

66 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №7. Рекуррентная нейронная сетьи задача генерации текста
## 14 вариант
___
### Задание:
Выбрать художественный текст (четные варианты русскоязычный, нечетные англоязычный)и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.
___
### Запуск
- Запустить файл lab7.py (Для английского языка необходимо в коде выбрать соответсвующий файл и начальную строку)
### Используемые технологии
- Язык программирования **Python**
- Среда разработки **PyCharm**
- Библиотеки:
* keras
* tensorflow
* numpy
### Описание программы
Код программы выполняет следующие действия:
1. Импортирует необходимые библиотеки: numpy, Tokenizer и pad_sequences из keras.preprocessing.text, Sequential, LSTM, Dense, Dropout из keras.models.
2. Читает текст из файла "english.txt" и сохраняет его содержимое в переменную "text".
3. Задает параметр "seq_length" как длину входной последовательности.
4. Создает экземпляр класса Tokenizer, который разбивает текст на токены (в данном случае, символы) и обучает его на тексте.
5. Преобразует текст в последовательности чисел с использованием метода texts_to_sequences.
6. Создает входные и выходные последовательности для обучения модели с помощью цикла. Входная последовательность - это последние "seq_length" символов перед текущим символом, а выходная последовательность - это текущий символ.
7. Преобразует входные и выходные данные в формат массивов numpy с использованием функции pad_sequences.
8. Создает модель RNN (рекуррентная нейронная сеть) с помощью класса Sequential из keras.models. Модель состоит из двух слоев LSTM, которые последовательно соединены. Первый LSTM-слои принимает входную последовательность, а второй - выход первого слоя.
9. Компилирует модель, задавая функцию потерь, оптимизатор и метрику для оценки модели.
10. Обучает модель на входных и выходных данных с помощью метода fit.
11. Определяет функцию generate_text для генерации текста. Функция принимает начальный текст seed_text и длину генерируемого текста gen_length.
12. В цикле генерирует текст, используя обученную модель. Начиная с seed_text, функция преобразует его в последовательность чисел, затем преобразует в формат массива numpy и делает предсказание с помощью модели. Следующий символ выбирается с помощью функции argmax для получения индекса символа с наибольшей вероятностью. Затем символ добавляется к сгенерированному тексту и seed_text обновляется, чтобы учесть новый символ.
13. Возвращает сгенерированный текст.
14. Генерирует текст, используя seed_text и функцию generate_text, и выводит результат.
___
### Пример работы
![Graphics](russian.png)
```text
Результат работы модели на основании файла с текстом на русском языке
```
![Graphics](english.png)
```text
Результат работы модели на основании файла с текстом на английском языке
```
### Вывод
На основе выходных данных можно сделать следующий вывод о довольно успешной работе модели, тексты содержат осмысленное содержание и практически не содержат пунктуационных и грамматических ошибок.