IIS_2023_1/zhukova_alina_lab_7/readme.md

80 lines
6.2 KiB
Markdown
Raw Normal View History

2023-12-18 19:25:37 +04:00
## Задание
Рекуррентная нейронная сеть и задача генерации текста
Выбрать тексты на русском и английском языках.
Обучить нейронную сеть и подобрать параметры таким образом,
чтобы максимально приблизиться к осмысленному результату.
Интерпретировать результаты
Вариант №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)