66 lines
5.2 KiB
Markdown
66 lines
5.2 KiB
Markdown
|
# Лабораторная работа №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
|
|||
|
Результат работы модели на основании файла с текстом на английском языке
|
|||
|
```
|
|||
|
|
|||
|
### Вывод
|
|||
|
На основе выходных данных можно сделать следующий вывод о довольно успешной работе модели, тексты содержат осмысленное содержание и практически не содержат пунктуационных и грамматических ошибок.
|