IIS_2023_1/zhukova_alina_lab_7/readme.md

80 lines
6.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.

## Задание
Рекуррентная нейронная сеть и задача генерации текста
Выбрать тексты на русском и английском языках.
Обучить нейронную сеть и подобрать параметры таким образом,
чтобы максимально приблизиться к осмысленному результату.
Интерпретировать результаты
Вариант №10
## Используемые технологии
В лабораторной были использованы библиотеки:
+ keras - используется для работы с реккурентной нейронной сетью и методами машинного обучения
+ numpy - позволяет работать с массивами и матрицами
+ Flask - предоставляет способ быстрого создания веб-страниц для визуализации работы приложения
## Используемые компоненты
+ Tokenizer - инструмент для токенизации текста, подсчитывает частоту вхождения слов
+ Sequential - предоставляет линейный набор слоев нейронной сети
+ Embedding - слой keras, который преобразует целочисленный последовательности
в плотные векторы
+ LSTM - представляет особую структуру реккурентной нейронной сети,
способную к обучению долговременными зависимостями
+ Dense - предоставляет плотные(полносвязные) слои нейросети
## Как запустить
Запустить файл flask-server, который поднимет локальный сервер
и позволит обратиться к программе через браузер по ссылке [http://127.0.0.1:5000/](http://127.0.0.1:5000/)
## Что делает программа
В зависимости от параметров в коде, обучается и генерирует русский или английский текст.
В первую очередь считанный из файла текст проходит токенизацию, строится модель нейронной сети.
Далее полученная реккурентная нейронная сеть обучается, а после генерирует 250 символов
исходя из начальной фразы
## Анализ
Наиболее качественные результаты модель предоставляет при 15 итерациях обучения.
Если итераций недостаточно, модель генерирует не слова, а одно и то же сочетание букв,
разделяя сочетания пробелами.
На 15 итерациях с текстом величиной в 3 400 знаков, время обучения составило около 5-6 часов.
Потому в программе реализованы функции сохранения и загрузки моделей, чтобы не обучать нейросетей заново,
а дообучать на тех же или новых данных.
На выбранной архитектуре сети при введении новых данных качество работы модели значительно снижалось.
При работе на одних и тех же данных выполнение 15 итераций достаточно, чтобы сеть могла генерировать
слова из текста. Однако осмысленного текста добиться не удалось. Очевидно это связано с
выбранной архитектурой, нехватке данных и недостаточном обучении. Можно сделать вывод о том,
что обучить нейросеть генерировать осмысленный текст на имеющейся аппаратуре если и возможно,
то очень затратно.
## Скриншоты работы программы
**Наилучший результат генерации русского текста.**
Генерация русского текста при достаточном обучении. Почти все сгенерированные слова являются реальными.
Однако полученный текст все же нельзя назвать осмысленным
![img.png](img_screen_2.png)
**Остальные варианты**
Генерация русского текста при недостаточном обучении. Вместо слов создаются сочетания букв,
которые очень быстро зацикливаются.
![img.png](img_screen_1.png)
Генерация русского текста при переобучении. Нейросеть не генерирует новый текст, она переписывает
фрагмент из обучающих данных.
![img.png](img_screen_3.png)
В случае с английским текстом все происходит точно также.
**Наилучший результат генерации английского текста.**
Генерация английского текста при достаточном обучении. Почти все сгенерированные слова являются реальными.
Однако полученный текст все же нельзя назвать осмысленным
![img.png](img_screen_4.png)
При генерации английских текстов зацикление происходит быстрее. Возможно
это связано с меньшим количеством используемых символов.
![img.png](img_screen_5.png)